private void generatePerClauseMembers(LazyClassGen classGen) { // FIXME Alex handle when field already there - or handle it with / similar to isAnnotationDefinedAspect() // for that use aspectType and iterate on the fields. // FIXME Alex percflowX is not using this one but AJ code style does generate it so.. ResolvedMember failureFieldInfo = AjcMemberMaker.initFailureCauseField(aspectType); if (kind == PerClause.SINGLETON) { classGen.addField(makeFieldGen(classGen, failureFieldInfo), null); } if (kind == PerClause.SINGLETON) { ResolvedMember perSingletonFieldInfo = AjcMemberMaker.perSingletonField(aspectType); classGen.addField(makeFieldGen(classGen, perSingletonFieldInfo), null); // pr144602 - don't need to do this, PerObjectInterface munger will do it // } else if (kind == PerClause.PEROBJECT) { // ResolvedMember perObjectFieldInfo = AjcMemberMaker.perObjectField(aspectType, aspectType); // classGen.addField(makeFieldGen(classGen, perObjectFieldInfo).(), null); // // if lazy generation of the inner interface MayHaveAspect works on LTW (see previous note) // // it should be done here. } else if (kind == PerClause.PERCFLOW) { ResolvedMember perCflowFieldInfo = AjcMemberMaker.perCflowField(aspectType); classGen.addField(makeFieldGen(classGen, perCflowFieldInfo), null); } else if (kind == PerClause.PERTYPEWITHIN) { ResolvedMember perTypeWithinForField = AjcMemberMaker.perTypeWithinWithinTypeField(aspectType, aspectType); classGen.addField(makeFieldGen(classGen, perTypeWithinForField), null); } }
private void generatePerSingletonAspectOfMethod(LazyClassGen classGen) { InstructionFactory factory = classGen.getFactory(); LazyMethodGen method = makeMethodGen(classGen, AjcMemberMaker.perSingletonAspectOfMethod(aspectType)); flagAsSynthetic(method, false); classGen.addMethodGen(method); InstructionList il = method.getBody(); il.append(Utility.createGet(factory, AjcMemberMaker.perSingletonField(aspectType))); InstructionBranch ifNotNull = InstructionFactory.createBranchInstruction(Constants.IFNONNULL, null); il.append(ifNotNull); il.append(factory.createNew(AjcMemberMaker.NO_ASPECT_BOUND_EXCEPTION.getName())); il.append(InstructionConstants.DUP); il.append(InstructionFactory.PUSH(classGen.getConstantPool(), aspectType.getName())); il.append(Utility.createGet(factory, AjcMemberMaker.initFailureCauseField(aspectType))); il.append(factory.createInvoke(AjcMemberMaker.NO_ASPECT_BOUND_EXCEPTION.getName(), "<init>", Type.VOID, new Type[] { Type.STRING, new ObjectType("java.lang.Throwable") }, Constants.INVOKESPECIAL)); il.append(InstructionConstants.ATHROW); InstructionHandle ifElse = il.append(Utility.createGet(factory, AjcMemberMaker.perSingletonField(aspectType))); il.append(InstructionFactory.createReturn(Type.OBJECT)); ifNotNull.setTarget(ifElse); }
InstructionHandle handler = il.append(InstructionConstants.ASTORE_0); il.append(InstructionConstants.ALOAD_0); il.append(Utility.createSet(factory, AjcMemberMaker.initFailureCauseField(aspectType))); il.append(InstructionFactory.createReturn(Type.VOID)); tryEnd.setTarget(il.getEnd());