Klasse BcelShadow

java.lang.Object
org.aspectj.weaver.Shadow
org.aspectj.weaver.bcel.BcelShadow

public class BcelShadow extends Shadow
  • 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 the ShadowRange.associateWithShadow(BcelShadow) method.
  • Methodendetails

    • copyInto

      public BcelShadow copyInto(LazyMethodGen recipient, BcelShadow enclosing)
    • getIWorld

      public World getIWorld()
      Angegeben von:
      getIWorld in Klasse Shadow
    • 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 Klasse Shadow
    • getRange

      public org.aspectj.weaver.bcel.ShadowRange getRange()
    • setRange

      public void setRange(org.aspectj.weaver.bcel.ShadowRange range)
    • getSourceLine

      public int getSourceLine()
    • getEnclosingType

      public ResolvedType getEnclosingType()
      Angegeben von:
      getEnclosingType in Klasse Shadow
    • getEnclosingClass

      public LazyClassGen getEnclosingClass()
    • getWorld

      public BcelWorld getWorld()
    • makeConstructorExecution

      public static BcelShadow makeConstructorExecution(BcelWorld world, LazyMethodGen enclosingMethod, InstructionHandle justBeforeStart)
    • makeStaticInitialization

      public static BcelShadow makeStaticInitialization(BcelWorld world, LazyMethodGen enclosingMethod)
    • 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

      public void initIfaceInitializer(InstructionHandle end)
    • makeUnfinishedInitialization

      public static BcelShadow makeUnfinishedInitialization(BcelWorld world, LazyMethodGen constructor)
      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

      public static BcelShadow makeMethodExecution(BcelWorld world, LazyMethodGen enclosingMethod)
    • makeShadowForMethod

      public static BcelShadow makeShadowForMethod(BcelWorld world, LazyMethodGen enclosingMethod, Shadow.Kind kind, Member sig)
    • makeAdviceExecution

      public static BcelShadow makeAdviceExecution(BcelWorld world, LazyMethodGen enclosingMethod)
    • 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

      public static void retargetAllBranches(InstructionHandle from, InstructionHandle to)
    • 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

      public Var getThisVar()
      Beschreibung aus Klasse kopiert: Shadow
      a var referencing this
      Angegeben von:
      getThisVar in Klasse Shadow
    • getThisAnnotationVar

      public Var getThisAnnotationVar(UnresolvedType forAnnotationType)
      Angegeben von:
      getThisAnnotationVar in Klasse Shadow
    • getTargetVar

      public Var getTargetVar()
      Beschreibung aus Klasse kopiert: Shadow
      a var referencing the target
      Angegeben von:
      getTargetVar in Klasse Shadow
    • getTargetAnnotationVar

      public Var getTargetAnnotationVar(UnresolvedType forAnnotationType)
      Angegeben von:
      getTargetAnnotationVar in Klasse Shadow
    • getArgVar

      public Var getArgVar(int i)
      Angegeben von:
      getArgVar in Klasse Shadow
    • getArgAnnotationVar

      public Var getArgAnnotationVar(int i, UnresolvedType forAnnotationType)
      Angegeben von:
      getArgAnnotationVar in Klasse Shadow
    • getKindedAnnotationVar

      public Var getKindedAnnotationVar(UnresolvedType forAnnotationType)
      Angegeben von:
      getKindedAnnotationVar in Klasse Shadow
    • getWithinAnnotationVar

      public Var getWithinAnnotationVar(UnresolvedType forAnnotationType)
      Angegeben von:
      getWithinAnnotationVar in Klasse Shadow
    • getWithinCodeAnnotationVar

      public Var getWithinCodeAnnotationVar(UnresolvedType forAnnotationType)
      Angegeben von:
      getWithinCodeAnnotationVar in Klasse Shadow
    • getThisJoinPointStaticPartVar

      public final Var getThisJoinPointStaticPartVar()
      Angegeben von:
      getThisJoinPointStaticPartVar in Klasse Shadow
    • getThisEnclosingJoinPointStaticPartVar

      public final Var getThisEnclosingJoinPointStaticPartVar()
      Angegeben von:
      getThisEnclosingJoinPointStaticPartVar in Klasse Shadow
    • requireThisJoinPoint

      public void requireThisJoinPoint(boolean hasGuardTest, boolean isAround)
    • getThisJoinPointVar

      public Var getThisJoinPointVar()
      Angegeben von:
      getThisJoinPointVar in Klasse Shadow
    • getThisJoinPointStaticPartBcelVar

      public BcelVar getThisJoinPointStaticPartBcelVar()
    • getThisAspectInstanceVar

      public BcelVar getThisAspectInstanceVar(ResolvedType aspectType)
      Angegeben von:
      getThisAspectInstanceVar in Klasse Shadow
    • getThisJoinPointStaticPartBcelVar

      public BcelVar getThisJoinPointStaticPartBcelVar(boolean isEnclosingJp)
      Get the Var for the xxxxJpStaticPart, xxx = this or enclosing
      Parameter:
      isEnclosingJp - true to have the enclosingJpStaticPart
      Gibt zurück:
    • getThisEnclosingJoinPointStaticPartBcelVar

      public BcelVar getThisEnclosingJoinPointStaticPartBcelVar()
      Get the Var for the enclosingJpStaticPart
      Gibt zurück:
    • getEnclosingCodeSignature

      public Member getEnclosingCodeSignature()
      Angegeben von:
      getEnclosingCodeSignature in Klasse Shadow
    • getRealEnclosingCodeSignature

      public Member getRealEnclosingCodeSignature()
    • initializeTargetVar

      public void initializeTargetVar()
    • ensureTargetTypeIsCorrect

      public UnresolvedType ensureTargetTypeIsCorrect(UnresolvedType tx)
    • 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

      public void weaveAfterThrowing(org.aspectj.weaver.bcel.BcelAdvice munger, UnresolvedType catchType)
    • weaveSoftener

      public void weaveSoftener(org.aspectj.weaver.bcel.BcelAdvice munger, UnresolvedType catchType)
    • weavePerObjectEntry

      public void weavePerObjectEntry(org.aspectj.weaver.bcel.BcelAdvice munger, BcelVar onVar)
    • 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

      public void weaveCflowEntry(org.aspectj.weaver.bcel.BcelAdvice munger, Member cflowField)
    • 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

      public BcelVar genTempVar(UnresolvedType utype)
    • genTempVar

      public BcelVar genTempVar(UnresolvedType typeX, String localName)
    • getFactory

      public InstructionFactory getFactory()
    • getSourceLocation

      public ISourceLocation getSourceLocation()
      Angegeben von:
      getSourceLocation in Klasse Shadow
    • getEnclosingShadow

      public Shadow getEnclosingShadow()
    • getEnclosingMethod

      public LazyMethodGen getEnclosingMethod()
    • isFallsThrough

      public boolean isFallsThrough()
    • setActualTargetType

      public void setActualTargetType(String className)
    • getActualTargetType

      public String getActualTargetType()