Package org.aspectj.weaver.bcel
Klasse BcelShadow
java.lang.Object
org.aspectj.weaver.Shadow
org.aspectj.weaver.bcel.BcelShadow
-
Verschachtelte Klassen - Übersicht
Von Klasse geerbte verschachtelte Klassen/Schnittstellen org.aspectj.weaver.Shadow
Shadow.Kind
-
Feldübersicht
Von Klasse geerbte Felder org.aspectj.weaver.Shadow
ADVICE_EXECUTION, AdviceExecution, AdviceExecutionBit, ALL_SHADOW_KINDS_BITS, CONSTRUCTOR_CALL, CONSTRUCTOR_EXECUTION, ConstructorCall, ConstructorCallBit, ConstructorExecution, ConstructorExecutionBit, enclosingShadow, EXCEPTION_HANDLER, ExceptionHandler, ExceptionHandlerBit, FIELD_GET, FIELD_SET, FieldGet, FieldGetBit, FieldSet, FieldSetBit, Initialization, INITIALIZATION, InitializationBit, MAX_SHADOW_KIND, METHOD_CALL, METHOD_EXECUTION, MethodCall, MethodCallBit, MethodExecution, MethodExecutionBit, mungers, needAroundClosureStacking, NO_SHADOW_KINDS_BITS, PreInitialization, PREINITIALIZATION, PreInitializationBit, SHADOW_KINDS, shadowId, StaticInitialization, STATICINITIALIZATION, StaticInitializationBit, SYNCHRONIZATION_LOCK, SYNCHRONIZATION_UNLOCK, SynchronizationLock, SynchronizationLockBit, SynchronizationUnlock, SynchronizationUnlockBit
-
Konstruktorübersicht
KonstruktorBeschreibungBcelShadow
(BcelWorld world, Shadow.Kind kind, Member signature, LazyMethodGen enclosingMethod, BcelShadow enclosingShadow) This generates an unassociated shadow, rooted in a particular method but not rooted to any particular point in the code. -
Methodenübersicht
Modifizierer und TypMethodeBeschreibungvoid
addAdvicePreventingLazyTjp
(org.aspectj.weaver.bcel.BcelAdvice advice) boolean
Is arg0 occupied with the value of thiscopyInto
(LazyMethodGen recipient, BcelShadow enclosing) void
ensureInitializedArgVar
(int argNumber) genTempVar
(UnresolvedType utype) genTempVar
(UnresolvedType typeX, String localName) protected ResolvedType[]
getAnnotations
(ResolvedMember foundMember, Member relevantMember, ResolvedType relevantType) getArgAnnotationVar
(int i, UnresolvedType forAnnotationType) getArgVar
(int i) getKindedAnnotationVar
(UnresolvedType forAnnotationType) org.aspectj.weaver.bcel.ShadowRange
getRange()
protected ResolvedMember
getRelevantMember
(ResolvedMember foundMember, Member relevantMember, ResolvedType relevantType) int
getTargetAnnotationVar
(UnresolvedType forAnnotationType) a var referencing the targetgetThisAnnotationVar
(UnresolvedType forAnnotationType) getThisAspectInstanceVar
(ResolvedType aspectType) Get the Var for the enclosingJpStaticPartfinal Var
getThisJoinPointStaticPartBcelVar
(boolean isEnclosingJp) Get the Var for the xxxxJpStaticPart, xxx = this or enclosingfinal Var
a var referencing thisgetWithinAnnotationVar
(UnresolvedType forAnnotationType) getWithinCodeAnnotationVar
(UnresolvedType forAnnotationType) getWorld()
void
init()
void
Initialize all the available arguments at the shadow.void
void
By determining what "kind" of shadow we are, we can find out the annotations on the appropriate element (method, field, constructor, type).void
void
void
void
void
void
boolean
static BcelShadow
makeAdviceExecution
(BcelWorld world, LazyMethodGen enclosingMethod) static BcelShadow
makeArrayConstructorCall
(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle arrayInstruction, BcelShadow enclosingShadow) static BcelShadow
makeConstructorCall
(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle callHandle, BcelShadow enclosingShadow) static BcelShadow
makeConstructorExecution
(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle justBeforeStart) static BcelShadow
makeExceptionHandler
(BcelWorld world, ExceptionRange exceptionRange, LazyMethodGen enclosingMethod, InstructionHandle startOfHandler, BcelShadow enclosingShadow) Make the shadow for an exception handler.static BcelShadow
makeFieldGet
(BcelWorld world, ResolvedMember field, LazyMethodGen enclosingMethod, InstructionHandle getHandle, BcelShadow enclosingShadow) static BcelShadow
makeFieldSet
(BcelWorld world, ResolvedMember field, LazyMethodGen enclosingMethod, InstructionHandle setHandle, BcelShadow enclosingShadow) static BcelShadow
makeIfaceInitialization
(BcelWorld world, LazyMethodGen constructor, Member interfaceConstructorSignature) create an init join point associated w/ an interface in the body of a constructorstatic BcelShadow
makeMethodCall
(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle callHandle, BcelShadow enclosingShadow) static BcelShadow
makeMethodExecution
(BcelWorld world, LazyMethodGen enclosingMethod) static BcelShadow
makeMethodExecution
(BcelWorld world, LazyMethodGen enclosingMethod, boolean lazyInit) static BcelShadow
makeMonitorEnter
(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle monitorInstruction, BcelShadow enclosingShadow) static BcelShadow
makeMonitorExit
(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle monitorInstruction, BcelShadow enclosingShadow) static BcelShadow
makeShadowForMethod
(BcelWorld world, LazyMethodGen enclosingMethod, Shadow.Kind kind, Member sig) static BcelShadow
makeShadowForMethodCall
(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle callHandle, BcelShadow enclosingShadow, Shadow.Kind kind, ResolvedMember sig) static BcelShadow
makeStaticInitialization
(BcelWorld world, LazyMethodGen enclosingMethod) static BcelShadow
makeUnfinishedInitialization
(BcelWorld world, LazyMethodGen constructor) Create an initialization join point associated with a constructor, but not with any body of code yet.static BcelShadow
makeUnfinishedPreinitialization
(BcelWorld world, LazyMethodGen constructor) protected void
Prepare the shadow for implementation.void
requireThisJoinPoint
(boolean hasGuardTest, boolean isAround) static void
void
setActualTargetType
(String className) void
setRange
(org.aspectj.weaver.bcel.ShadowRange range) boolean
If the end of my range has no real instructions following then my context needs a return at the end.void
weaveAfter
(org.aspectj.weaver.bcel.BcelAdvice munger) void
weaveAfterReturning
(org.aspectj.weaver.bcel.BcelAdvice munger) The basic strategy here is to add a set of instructions at the end of the shadow range that dispatch the advice, and then return whatever the shadow was going to return anyway.void
weaveAfterThrowing
(org.aspectj.weaver.bcel.BcelAdvice munger, UnresolvedType catchType) void
weaveAroundClosure
(org.aspectj.weaver.bcel.BcelAdvice munger, boolean hasDynamicTest) void
weaveAroundInline
(org.aspectj.weaver.bcel.BcelAdvice munger, boolean hasDynamicTest) void
weaveCflowEntry
(org.aspectj.weaver.bcel.BcelAdvice munger, Member cflowField) void
weavePerObjectEntry
(org.aspectj.weaver.bcel.BcelAdvice munger, BcelVar onVar) void
weavePerTypeWithinAspectInitialization
(org.aspectj.weaver.bcel.BcelAdvice munger, UnresolvedType t) Causes the aspect instance to be *set* for later retrievable through localAspectof()/aspectOf()void
weaveSoftener
(org.aspectj.weaver.bcel.BcelAdvice munger, UnresolvedType catchType) Von Klasse geerbte Methoden org.aspectj.weaver.Shadow
addMunger, checkCanThrow, checkMunger, getArgCount, getArgType, getArgTypes, getArgumentTypesForArrayConstructionShadow, getGenericArgTypes, getKind, getMatchingSignature, getMungers, getResolvedSignature, getReturnType, getSignature, getTargetType, getThisType, hasTarget, hasThis, howMany, implement, isShadowForArrayConstructionJoinpoint, isShadowForMonitor, setMatchingSignature, toResolvedString, toSet, toString
-
Felddetails
-
appliedLazyTjpOptimization
public static boolean appliedLazyTjpOptimization
-
-
Konstruktordetails
-
BcelShadow
public BcelShadow(BcelWorld world, Shadow.Kind kind, Member signature, LazyMethodGen enclosingMethod, BcelShadow enclosingShadow) This generates an unassociated shadow, rooted in a particular method but not rooted to any particular point in the code. It should be given to a rooted ShadowRange in theShadowRange.associateWithShadow(BcelShadow)
method.
-
-
Methodendetails
-
copyInto
-
getIWorld
-
addAdvicePreventingLazyTjp
public void addAdvicePreventingLazyTjp(org.aspectj.weaver.bcel.BcelAdvice advice) -
prepareForMungers
protected void prepareForMungers()Beschreibung aus Klasse kopiert:Shadow
Prepare the shadow for implementation. After this is done, the shadow should be in such a position that each munger simply needs to be implemented.- Setzt außer Kraft:
prepareForMungers
in KlasseShadow
-
getRange
public org.aspectj.weaver.bcel.ShadowRange getRange() -
setRange
public void setRange(org.aspectj.weaver.bcel.ShadowRange range) -
getSourceLine
public int getSourceLine() -
getEnclosingType
- Angegeben von:
getEnclosingType
in KlasseShadow
-
getEnclosingClass
-
getWorld
-
makeConstructorExecution
public static BcelShadow makeConstructorExecution(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle justBeforeStart) -
makeStaticInitialization
-
makeExceptionHandler
public static BcelShadow makeExceptionHandler(BcelWorld world, ExceptionRange exceptionRange, LazyMethodGen enclosingMethod, InstructionHandle startOfHandler, BcelShadow enclosingShadow) Make the shadow for an exception handler. Currently makes an empty shadow that only allows before advice to be woven into it. -
makeIfaceInitialization
public static BcelShadow makeIfaceInitialization(BcelWorld world, LazyMethodGen constructor, Member interfaceConstructorSignature) create an init join point associated w/ an interface in the body of a constructor -
initIfaceInitializer
-
makeUnfinishedInitialization
Create an initialization join point associated with a constructor, but not with any body of code yet. If this is actually matched, its range will be set when we inline self constructors.- Parameter:
constructor
- The constructor starting this initialization.
-
makeUnfinishedPreinitialization
public static BcelShadow makeUnfinishedPreinitialization(BcelWorld world, LazyMethodGen constructor) -
makeMethodExecution
public static BcelShadow makeMethodExecution(BcelWorld world, LazyMethodGen enclosingMethod, boolean lazyInit) -
init
public void init() -
makeMethodExecution
-
makeShadowForMethod
public static BcelShadow makeShadowForMethod(BcelWorld world, LazyMethodGen enclosingMethod, Shadow.Kind kind, Member sig) -
makeAdviceExecution
-
makeConstructorCall
public static BcelShadow makeConstructorCall(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle callHandle, BcelShadow enclosingShadow) -
makeArrayConstructorCall
public static BcelShadow makeArrayConstructorCall(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle arrayInstruction, BcelShadow enclosingShadow) -
makeMonitorEnter
public static BcelShadow makeMonitorEnter(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle monitorInstruction, BcelShadow enclosingShadow) -
makeMonitorExit
public static BcelShadow makeMonitorExit(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle monitorInstruction, BcelShadow enclosingShadow) -
makeMethodCall
public static BcelShadow makeMethodCall(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle callHandle, BcelShadow enclosingShadow) -
makeShadowForMethodCall
public static BcelShadow makeShadowForMethodCall(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle callHandle, BcelShadow enclosingShadow, Shadow.Kind kind, ResolvedMember sig) -
makeFieldGet
public static BcelShadow makeFieldGet(BcelWorld world, ResolvedMember field, LazyMethodGen enclosingMethod, InstructionHandle getHandle, BcelShadow enclosingShadow) -
makeFieldSet
public static BcelShadow makeFieldSet(BcelWorld world, ResolvedMember field, LazyMethodGen enclosingMethod, InstructionHandle setHandle, BcelShadow enclosingShadow) -
retargetAllBranches
-
terminatesWithReturn
public boolean terminatesWithReturn()If the end of my range has no real instructions following then my context needs a return at the end. -
arg0HoldsThis
public boolean arg0HoldsThis()Is arg0 occupied with the value of this -
getThisVar
Beschreibung aus Klasse kopiert:Shadow
a var referencing this- Angegeben von:
getThisVar
in KlasseShadow
-
getThisAnnotationVar
- Angegeben von:
getThisAnnotationVar
in KlasseShadow
-
getTargetVar
Beschreibung aus Klasse kopiert:Shadow
a var referencing the target- Angegeben von:
getTargetVar
in KlasseShadow
-
getTargetAnnotationVar
- Angegeben von:
getTargetAnnotationVar
in KlasseShadow
-
getArgVar
-
getArgAnnotationVar
- Angegeben von:
getArgAnnotationVar
in KlasseShadow
-
getKindedAnnotationVar
- Angegeben von:
getKindedAnnotationVar
in KlasseShadow
-
getWithinAnnotationVar
- Angegeben von:
getWithinAnnotationVar
in KlasseShadow
-
getWithinCodeAnnotationVar
- Angegeben von:
getWithinCodeAnnotationVar
in KlasseShadow
-
getThisJoinPointStaticPartVar
- Angegeben von:
getThisJoinPointStaticPartVar
in KlasseShadow
-
getThisEnclosingJoinPointStaticPartVar
- Angegeben von:
getThisEnclosingJoinPointStaticPartVar
in KlasseShadow
-
requireThisJoinPoint
public void requireThisJoinPoint(boolean hasGuardTest, boolean isAround) -
getThisJoinPointVar
- Angegeben von:
getThisJoinPointVar
in KlasseShadow
-
getThisJoinPointStaticPartBcelVar
-
getThisAspectInstanceVar
- Angegeben von:
getThisAspectInstanceVar
in KlasseShadow
-
getThisJoinPointStaticPartBcelVar
Get the Var for the xxxxJpStaticPart, xxx = this or enclosing- Parameter:
isEnclosingJp
- true to have the enclosingJpStaticPart- Gibt zurück:
-
getThisEnclosingJoinPointStaticPartBcelVar
Get the Var for the enclosingJpStaticPart- Gibt zurück:
-
getEnclosingCodeSignature
- Angegeben von:
getEnclosingCodeSignature
in KlasseShadow
-
getRealEnclosingCodeSignature
-
initializeTargetVar
public void initializeTargetVar() -
ensureTargetTypeIsCorrect
-
ensureInitializedArgVar
public void ensureInitializedArgVar(int argNumber) -
initializeArgVars
public void initializeArgVars()Initialize all the available arguments at the shadow. This means creating a copy of them that we can then use for advice calls (the copy ensures we are not affected by other advice changing the values). This method initializes all arguments whereas the method ensureInitializedArgVar will only ensure a single argument is setup. -
initializeForAroundClosure
public void initializeForAroundClosure() -
initializeThisAnnotationVars
public void initializeThisAnnotationVars() -
initializeTargetAnnotationVars
public void initializeTargetAnnotationVars() -
getRelevantMember
protected ResolvedMember getRelevantMember(ResolvedMember foundMember, Member relevantMember, ResolvedType relevantType) -
getAnnotations
protected ResolvedType[] getAnnotations(ResolvedMember foundMember, Member relevantMember, ResolvedType relevantType) -
initializeKindedAnnotationVars
public void initializeKindedAnnotationVars()By determining what "kind" of shadow we are, we can find out the annotations on the appropriate element (method, field, constructor, type). Then create one BcelVar entry in the map for each annotation, keyed by annotation type. -
initializeWithinAnnotationVars
public void initializeWithinAnnotationVars() -
initializeWithinCodeAnnotationVars
public void initializeWithinCodeAnnotationVars() -
weaveAfter
public void weaveAfter(org.aspectj.weaver.bcel.BcelAdvice munger) -
weaveAfterReturning
public void weaveAfterReturning(org.aspectj.weaver.bcel.BcelAdvice munger) The basic strategy here is to add a set of instructions at the end of the shadow range that dispatch the advice, and then return whatever the shadow was going to return anyway. To achieve this, we note all the return statements in the advice, and replace them with code that: 1) stores the return value on top of the stack in a temp var 2) jumps to the start of our advice block 3) restores the return value at the end of the advice block before ultimately returning We also need to bind the return value into a returning parameter, if the advice specified one. -
weaveAfterThrowing
-
weaveSoftener
-
weavePerObjectEntry
-
weavePerTypeWithinAspectInitialization
public void weavePerTypeWithinAspectInitialization(org.aspectj.weaver.bcel.BcelAdvice munger, UnresolvedType t) Causes the aspect instance to be *set* for later retrievable through localAspectof()/aspectOf() -
weaveCflowEntry
-
weaveAroundInline
public void weaveAroundInline(org.aspectj.weaver.bcel.BcelAdvice munger, boolean hasDynamicTest) -
weaveAroundClosure
public void weaveAroundClosure(org.aspectj.weaver.bcel.BcelAdvice munger, boolean hasDynamicTest) -
genTempVar
-
genTempVar
-
getFactory
-
getSourceLocation
- Angegeben von:
getSourceLocation
in KlasseShadow
-
getEnclosingShadow
-
getEnclosingMethod
-
isFallsThrough
public boolean isFallsThrough() -
setActualTargetType
-
getActualTargetType
-