From 724823aa185922c9d2fd13a0c56049862d3ec0bb Mon Sep 17 00:00:00 2001 From: Andy Clement Date: Wed, 11 Apr 2012 17:33:59 -0700 Subject: declare annotation on type XML support --- .../weaver/loadtime/ConcreteAspectCodeGen.java | 37 ++++++++++++++-------- 1 file changed, 23 insertions(+), 14 deletions(-) (limited to 'loadtime') diff --git a/loadtime/src/org/aspectj/weaver/loadtime/ConcreteAspectCodeGen.java b/loadtime/src/org/aspectj/weaver/loadtime/ConcreteAspectCodeGen.java index bc6695e3e..620b84874 100644 --- a/loadtime/src/org/aspectj/weaver/loadtime/ConcreteAspectCodeGen.java +++ b/loadtime/src/org/aspectj/weaver/loadtime/ConcreteAspectCodeGen.java @@ -63,6 +63,7 @@ import org.aspectj.weaver.patterns.NamePattern; import org.aspectj.weaver.patterns.PatternParser; import org.aspectj.weaver.patterns.PerClause; import org.aspectj.weaver.patterns.PerSingleton; +import org.aspectj.weaver.patterns.TypePattern; /** * Generates bytecode for concrete-aspect. @@ -551,23 +552,31 @@ public class ConcreteAspectCodeGen { if (constructedAnnotation==null) { return; // error occurred (and was reported), do not continue } + + String nameComponent = da.declareAnnotationKind.name().toLowerCase(); + String declareName = new StringBuilder("ajc$declare_at_").append(nameComponent).append("_").append(decCounter).toString(); + LazyMethodGen declareMethod = new LazyMethodGen(Modifier.PUBLIC, Type.VOID, declareName, Type.NO_ARGS, EMPTY_STRINGS, cg); + InstructionList declareMethodBody = declareMethod.getBody(); + declareMethodBody.append(InstructionFactory.RETURN); + declareMethod.addAnnotation(constructedAnnotation); + + DeclareAnnotation deca = null; + ITokenSource tokenSource = BasicTokenSource.makeTokenSource(da.pattern,null); + PatternParser pp = new PatternParser(tokenSource); + if (da.declareAnnotationKind==DeclareAnnotationKind.Method || da.declareAnnotationKind==DeclareAnnotationKind.Field) { - String declareName = new StringBuilder("ajc$declare_at_").append(da.declareAnnotationKind==DeclareAnnotationKind.Method?"method":"field").append("_").append(decCounter).toString(); - LazyMethodGen declareMethod = new LazyMethodGen(Modifier.PUBLIC, Type.VOID, declareName, Type.NO_ARGS, EMPTY_STRINGS, cg); - InstructionList declareMethodBody = declareMethod.getBody(); - declareMethodBody.append(InstructionFactory.RETURN); - declareMethod.addAnnotation(constructedAnnotation); - - ITokenSource tokenSource = BasicTokenSource.makeTokenSource(da.pattern,null); - PatternParser pp = new PatternParser(tokenSource); ISignaturePattern isp = (da.declareAnnotationKind==DeclareAnnotationKind.Method?pp.parseCompoundMethodOrConstructorSignaturePattern(true):pp.parseCompoundFieldSignaturePattern()); - DeclareAnnotation deca = new DeclareAnnotation(da.declareAnnotationKind==DeclareAnnotationKind.Method?DeclareAnnotation.AT_METHOD:DeclareAnnotation.AT_FIELD, isp); - deca.setAnnotationMethod(declareName); - deca.setAnnotationString(da.annotation); - AjAttribute attribute = new AjAttribute.DeclareAttribute(deca); - cg.addAttribute(attribute); - cg.addMethodGen(declareMethod); + deca = new DeclareAnnotation(da.declareAnnotationKind==DeclareAnnotationKind.Method?DeclareAnnotation.AT_METHOD:DeclareAnnotation.AT_FIELD, isp); + } else if (da.declareAnnotationKind==DeclareAnnotationKind.Type) { + TypePattern tp = pp.parseTypePattern(); + deca = new DeclareAnnotation(DeclareAnnotation.AT_TYPE,tp); } + + deca.setAnnotationMethod(declareName); + deca.setAnnotationString(da.annotation); + AjAttribute attribute = new AjAttribute.DeclareAttribute(deca); + cg.addAttribute(attribute); + cg.addMethodGen(declareMethod); } /** -- cgit v1.2.3