public ConcreteTypeMunger reify(World world, ResolvedType aspectType) { return world.getWeavingSupport().concreteTypeMunger(munger, aspectType); } }
public Advice reify(Member signature, World world, ResolvedType concreteAspect) { return world.getWeavingSupport().createAdviceMunger(this, pointcut, signature, concreteAspect); }
/** * Create an advice shadow munger for the given advice kind */ public final Advice createAdviceMunger(AdviceKind kind, Pointcut p, Member signature, int extraParameterFlags, IHasSourceLocation loc, ResolvedType declaringAspect) { AjAttribute.AdviceAttribute attribute = new AjAttribute.AdviceAttribute(kind, p, extraParameterFlags, loc.getStart(), loc.getEnd(), loc.getSourceContext()); return getWeavingSupport().createAdviceMunger(attribute, p, signature, declaringAspect); }
protected Test findResidueInternal(Shadow shadow, ExposedState state) { // System.out.println("find residue: " + this); if (usesCounter) { return Test.makeFieldGetCall(cflowField, cflowCounterIsValidMethod, Expr.NONE); } else { if (slots != null) { // null for cflows managed by counters for (Slot slot: slots) { // System.out.println("slot: " + slot.formalIndex); state.set(slot.formalIndex, aspect.getWorld().getWeavingSupport().makeCflowAccessVar(slot.formalType, cflowField, slot.arrayIndex)); } } return Test.makeFieldGetCall(cflowField, cflowStackIsValidMethod, Expr.NONE); } }
public void exposeType(UnresolvedType typeToExpose) { if (ResolvedType.isMissing(typeToExpose)) { return; } if (typeToExpose.isParameterizedType() || typeToExpose.isRawType()) { if (typeToExpose instanceof ResolvedType) { typeToExpose = ((ResolvedType) typeToExpose).getGenericType(); } else { typeToExpose = UnresolvedType.forSignature(typeToExpose.getErasureSignature()); } } // Check we haven't already got a munger for this: String signatureToLookFor = typeToExpose.getSignature(); for (Iterator<ConcreteTypeMunger> iterator = typeMungers.iterator(); iterator.hasNext();) { ConcreteTypeMunger cTM = iterator.next(); ResolvedTypeMunger rTM = cTM.getMunger(); if (rTM != null && rTM instanceof ExposeTypeMunger) { String exposedType = ((ExposeTypeMunger) rTM).getExposedTypeSignature(); if (exposedType.equals(signatureToLookFor)) { return; // dont need to bother } } } addTypeMunger(world.getWeavingSupport().concreteTypeMunger(new ExposeTypeMunger(typeToExpose), inAspect)); // ResolvedMember member = new ResolvedMemberImpl( // Member.STATIC_INITIALIZATION, typeToExpose, 0, UnresolvedType.VOID, // "<clinit>", UnresolvedType.NONE); // addTypeMunger(world.concreteTypeMunger( // new PrivilegedAccessMunger(member), inAspect)); }
public PerClause concretize(ResolvedType inAspect) { PerSingleton ret = new PerSingleton(); ret.copyLocationFrom(this); World world = inAspect.getWorld(); ret.inAspect = inAspect; // ATAJ: add a munger to add the aspectOf(..) to the @AJ aspects if (inAspect.isAnnotationStyleAspect() && !inAspect.isAbstract()) { // TODO will those change be ok if we add a serializable aspect ? // dig: // "can't be Serializable/Cloneable unless -XserializableAspects" if (getKind() == SINGLETON) { // pr149560 inAspect.crosscuttingMembers.addTypeMunger(world.getWeavingSupport().makePerClauseAspect(inAspect, getKind())); } else { inAspect.crosscuttingMembers.addLateTypeMunger(world.getWeavingSupport().makePerClauseAspect(inAspect, getKind())); } } // ATAJ inline around advice support if (inAspect.isAnnotationStyleAspect() && !inAspect.getWorld().isXnoInline()) { inAspect.crosscuttingMembers.addTypeMunger(world.getWeavingSupport().createAccessForInlineMunger(inAspect)); } return ret; }
public PerClause concretize(ResolvedType inAspect) { PerObject ret = new PerObject(entry, isThis); ret.inAspect = inAspect; if (inAspect.isAbstract()) { return ret; } World world = inAspect.getWorld(); Pointcut concreteEntry = entry.concretize(inAspect, inAspect, 0, null); // concreteEntry = new AndPointcut(this, concreteEntry); // concreteEntry.state = Pointcut.CONCRETE; inAspect.crosscuttingMembers.addConcreteShadowMunger(Advice.makePerObjectEntry(world, concreteEntry, isThis, inAspect)); // FIXME AV - don't use lateMunger here due to test // "inheritance, around advice and abstract pointcuts" // see #75442 thread. Issue with weaving order. ResolvedTypeMunger munger = new PerObjectInterfaceTypeMunger(inAspect, concreteEntry); inAspect.crosscuttingMembers.addLateTypeMunger(world.getWeavingSupport().concreteTypeMunger(munger, inAspect)); // ATAJ: add a munger to add the aspectOf(..) to the @AJ aspects if (inAspect.isAnnotationStyleAspect() && !inAspect.isAbstract()) { inAspect.crosscuttingMembers.addLateTypeMunger(inAspect.getWorld().getWeavingSupport().makePerClauseAspect(inAspect, getKind())); } // ATAJ inline around advice support - don't use a late munger to allow // around inling for itself if (inAspect.isAnnotationStyleAspect() && !inAspect.getWorld().isXnoInline()) { inAspect.crosscuttingMembers.addTypeMunger(world.getWeavingSupport().createAccessForInlineMunger(inAspect)); } return ret; }
/** * @param fromType is guaranteed to be a non-abstract aspect * @param clause has been concretized at a higher level */ @Override public ShadowMunger concretize(ResolvedType fromType, World world, PerClause clause) { // assert !fromType.isAbstract(); Pointcut p = pointcut.concretize(fromType, getDeclaringType(), signature.getArity(), this); if (clause != null) { Pointcut oldP = p; p = new AndPointcut(clause, p); p.copyLocationFrom(oldP); p.state = Pointcut.CONCRETE; // FIXME ? ATAJ copy unbound bindings to ignore p.m_ignoreUnboundBindingForNames = oldP.m_ignoreUnboundBindingForNames; } Advice munger = world.getWeavingSupport().createAdviceMunger(attribute, p, signature, fromType); munger.bindingParameterTypes = bindingParameterTypes; munger.setDeclaringType(getDeclaringType()); // System.err.println("concretizing here " + p + " with clause " + // clause); return munger; }
inAspect.crosscuttingMembers.addTypeMunger(world.getWeavingSupport().concreteTypeMunger(munger, inAspect)); inAspect.crosscuttingMembers.addLateTypeMunger(world.getWeavingSupport().makePerClauseAspect(inAspect, getKind())); inAspect.crosscuttingMembers.addTypeMunger(world.getWeavingSupport().createAccessForInlineMunger(inAspect));
inAspect.crosscuttingMembers.addLateTypeMunger(inAspect.getWorld().getWeavingSupport() .makePerClauseAspect(inAspect, getKind())); inAspect.crosscuttingMembers.addTypeMunger(inAspect.getWorld().getWeavingSupport() .createAccessForInlineMunger(inAspect));
public void addPrivilegedAccesses(Collection<ResolvedMember> accessedMembers) { int version = inAspect.getCompilerVersion(); for (ResolvedMember member : accessedMembers) { // Looking it up ensures we get the annotations - the accessedMembers are just retrieved from the attribute and // don't have that information ResolvedMember resolvedMember = world.resolve(member); // pr333469 // If the member is for an ITD (e.g. serialVersionUID) then during resolution we may resolve it on // a supertype because it doesn't yet exist on the target. // For example: MyList extends ArrayList<String> and the ITD is on MyList - after resolution it may be: // ArrayList<String>.serialVersionUID, we need to avoid that happening if (resolvedMember == null) { // can happen for ITDs - are there many privileged access ITDs?? resolvedMember = member; if (resolvedMember.hasBackingGenericMember()) { resolvedMember = resolvedMember.getBackingGenericMember(); } } else { UnresolvedType unresolvedDeclaringType = member.getDeclaringType().getRawType(); UnresolvedType resolvedDeclaringType = resolvedMember.getDeclaringType().getRawType(); if (!unresolvedDeclaringType.equals(resolvedDeclaringType)) { resolvedMember = member; } } PrivilegedAccessMunger privilegedAccessMunger = new PrivilegedAccessMunger(resolvedMember, version >= WeaverVersionInfo.WEAVER_VERSION_AJ169); ConcreteTypeMunger concreteTypeMunger = world.getWeavingSupport().concreteTypeMunger(privilegedAccessMunger, inAspect); addTypeMunger(concreteTypeMunger); } }
concreteAspect.crosscuttingMembers.addTypeMunger(world.getWeavingSupport().makeCflowCounterFieldAdder( localCflowField)); localCflowField, freeVars.length, innerCflowEntries, inAspect)); concreteAspect.crosscuttingMembers.addTypeMunger(world.getWeavingSupport() .makeCflowStackFieldAdder(localCflowField)); putCflowfield(xcut, concreteEntry, concreteAspect, localCflowField, "stack");