From deaa590e83b2e7707fecd5281f342d13246b36d0 Mon Sep 17 00:00:00 2001 From: aclement Date: Mon, 30 Jan 2006 10:25:59 +0000 Subject: [PATCH] fixes for 125475/125480 - matches nothing @AJ support. Definetly *NOT* as clean as it could be, but works. --- .../ast/ValidateAtAspectJAnnotationsVisitor.java | 13 ++++++++----- .../src/org/aspectj/weaver/bcel/AtAjAttributes.java | 10 +++++++--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor.java index ab320a187..e16e73d51 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/ValidateAtAspectJAnnotationsVisitor.java @@ -493,6 +493,7 @@ public class ValidateAtAspectJAnnotationsVisitor extends ASTVisitor { methodDeclaration.scope.problemReporter().disallowedTargetForAnnotation(ajAnnotations.adviceNameAnnotation); } + boolean noValueSupplied=true; boolean containsIfPcd = false; int[] pcLocation = new int[2]; String pointcutExpression = getStringLiteralFor("value",ajAnnotations.pointcutAnnotation,pcLocation); @@ -500,8 +501,9 @@ public class ValidateAtAspectJAnnotationsVisitor extends ASTVisitor { ISourceContext context = new EclipseSourceContext(unit.compilationResult,pcLocation[0]); Pointcut pc = null;//abstract if (pointcutExpression == null || pointcutExpression.length() == 0) { - ;//will have to ensure abstract ()V method + noValueSupplied=true; // matches nothing pointcut } else { + noValueSupplied=false; pc = new PatternParser(pointcutExpression,context).parsePointcut(); } pcDecl.pointcutDesignator = (pc==null)?null:new PointcutDesignator(pc); @@ -561,16 +563,17 @@ public class ValidateAtAspectJAnnotationsVisitor extends ASTVisitor { } if (pcDecl.pointcutDesignator == null) { - if (Modifier.isAbstract(methodDeclaration.modifiers) + if (Modifier.isAbstract(methodDeclaration.modifiers) + || noValueSupplied // this is a matches nothing pointcut //those 2 checks makes sense for aop.xml concretization but NOT for regular abstraction of pointcut //&& returnsVoid //&& (methodDeclaration.arguments == null || methodDeclaration.arguments.length == 0)) { ) { ;//fine } else { - methodDeclaration.scope.problemReporter().signalError(methodDeclaration.returnType.sourceStart, - methodDeclaration.returnType.sourceEnd, - "Method annotated with @Pointcut() for abstract pointcut must be abstract"); + methodDeclaration.scope.problemReporter().signalError(methodDeclaration.returnType.sourceStart, + methodDeclaration.returnType.sourceEnd, + "Method annotated with @Pointcut() for abstract pointcut must be abstract"); } } else if (Modifier.isAbstract(methodDeclaration.modifiers)) { methodDeclaration.scope.problemReporter().signalError(methodDeclaration.returnType.sourceStart, diff --git a/weaver/src/org/aspectj/weaver/bcel/AtAjAttributes.java b/weaver/src/org/aspectj/weaver/bcel/AtAjAttributes.java index e49374dab..f09b0f8bb 100644 --- a/weaver/src/org/aspectj/weaver/bcel/AtAjAttributes.java +++ b/weaver/src/org/aspectj/weaver/bcel/AtAjAttributes.java @@ -1186,16 +1186,20 @@ public class AtAjAttributes { return;//stop } } else { - if (pointcutExpr != null) { + if (pointcutExpr==null || (pointcutExpr != null && isNullOrEmpty(pointcutExpr.getValue().stringifyValue()))) { + // the matches nothing pointcut (125475/125480) - perhaps not as cleanly supported as it could be. + } else { + if (pointcutExpr != null) { // use a LazyResolvedPointcutDefinition so that the pointcut is resolved lazily // since for it to be resolved, we will need other pointcuts to be registered as well pc = parsePointcut(pointcutExpr.getValue().stringifyValue(), struct, true); if (pc == null) return;//parse error pc.setLocation(struct.context, -1, -1);//FIXME AVASM !! bMethod is null here.. - } else { + } else { reportError("Found undefined @Pointcut on a non-abstract method", struct); return; - } + } + } } // do not resolve binding now but lazily struct.ajAttributes.add( -- 2.39.5