001: //
002: // This file is part of the prose package.
003: //
004: // The contents of this file are subject to the Mozilla Public License
005: // Version 1.1 (the "License"); you may not use this file except in
006: // compliance with the License. You may obtain a copy of the License at
007: // http://www.mozilla.org/MPL/
008: //
009: // Software distributed under the License is distributed on an "AS IS" basis,
010: // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
011: // for the specific language governing rights and limitations under the
012: // License.
013: //
014: // The Original Code is prose.
015: //
016: // The Initial Developer of the Original Code is Andrei Popovici. Portions
017: // created by Andrei Popovici are Copyright (C) 2002 Andrei Popovici.
018: // All Rights Reserved.
019: //
020: // Contributor(s):/**
021:
022: // $Id: JoinPoint.java,v 1.1.1.1 2003/07/02 15:30:50 apopovic Exp $
023: // =====================================================================
024: //
025: // (history at end)
026: //
027:
028: package ch.ethz.jvmai;
029:
030: /**
031: * Abstract class <code>JoinPoint</code> is the base-class
032: * for a set of JoinPoint-classes. Instances of this classes
033: * contain information about a joinpoint which has been
034: * reached during execution. The callback-methods in
035: * <code>JoinPointHook</code> receive such instances as
036: * arguments. They can then be used to retrieve additional
037: * information about the state of the VM when this
038: * join-point has been reached (e.g. local variables, name
039: * of the method currently beeing executed ...)
040: * <p>
041: * <b>Important</b> : Use only JoinPoint-objects provided by
042: * a JoinPointHook-method. Do not create them on your own
043: * <p>
044: * <b>Notice</b>: In addition to the data created by the
045: * aspect interface, this method compiles to the AspectJ
046: * API.
047: *
048: * @version $Revision: 1.1.1.1 $
049: * @author Andrei Popovici
050: */
051: public interface JoinPoint {
052:
053: /** Compliance with aspectj */
054: public Object[] getArgs();
055:
056: /** Compliance with aspectj */
057: public Object getThis();
058:
059: /** Compliance with aspectj */
060: public Object getTarget();
061:
062: /** Compliance with aspectj */
063: public JoinPointStaticPart getStaticPart();
064:
065: /** Compliance with aspectj */
066: public String getKind();
067:
068: /** Compliance with aspectj */
069: public String toLongString();
070:
071: /** Compliance with aspectj */
072: public String toShortString();
073:
074: /** Compliance with aspectj */
075: public String toString();
076:
077: /** Compliance with aspectj */
078: public Signature getSignature();
079:
080: /** This method provides information similar to the
081: * AspectJ original getKind. The problem with getKind
082: * is that it works with strings, which is inefficient.
083: * We cannot override getKind -- Java is not
084: * zero-variant on results (at least until 1.4.*).
085: *
086: * @return one of the JoinPointKinds.MASK_XXX integer values
087: */
088: public int getMask();
089:
090: }
091:
092: //======================================================================
093: //
094: // $Log: JoinPoint.java,v $
095: // Revision 1.1.1.1 2003/07/02 15:30:50 apopovic
096: // Imported from ETH Zurich
097: //
098: // Revision 1.1 2003/05/05 14:02:27 popovici
099: // renaming from runes to prose
100: //
101: // Revision 1.7 2003/04/17 08:47:09 popovici
102: // Important functionality additions
103: // - Cflow specializers
104: // - Restructuring of the MethodCut, SetCut, ThrowCut, and GetCut (they are much smaller)
105: // - Transactional capabilities
106: // - Total refactoring of Specializer evaluation, which permits fine-grained distinction
107: // between static and dynamic specializers.
108: // - Functionality pulled up in abstract classes
109: // - Uniformization of advice methods patterns and names
110: //
111: // Revision 1.6 2003/03/04 11:27:07 popovici
112: // Important refactorization step (march):
113: // - removal of 'JoinPointEvents'; JoinPoints now have the same function as events
114: // - reimplementation of the JVMAIDebuggerAspectInterface (better performance, coding conventions, removal of ProseVM
115: // structures
116: //
117: // Revision 1.5 2002/03/28 13:48:28 popovici
118: // Mozilla-ified
119: //
120: // Revision 1.4 2002/02/13 12:25:05 smarkwal
121: // spaces/tabs alignment corrected
122: //
123: // Revision 1.3 2002/01/24 12:50:40 smarkwal
124: // Field 'klass' renamed to 'methodClass', because in FieldJoinPoint now exists a field 'fieldClass'. Comments added.
125: //
126: // Revision 1.2 2001/12/17 15:10:03 smarkwal
127: // added public to fields thread and frameId
128: //
129: // Revision 1.1 2001/12/14 15:01:16 smarkwal
130: // Initial Revision
131: //
|