diff options
author | Andy Clement <aclement@gopivotal.com> | 2014-04-04 12:33:45 -0700 |
---|---|---|
committer | Andy Clement <aclement@gopivotal.com> | 2014-04-04 12:33:45 -0700 |
commit | 331399f82b33cc4cff8239aab18e405dfe0dd2b9 (patch) | |
tree | 4ccddf5fe4e75a25ca48d53ad7d1d55aed935081 | |
parent | 4ffb0fd285609fa955450964e54fc3f8fd2996ad (diff) | |
download | aspectj-331399f82b33cc4cff8239aab18e405dfe0dd2b9.tar.gz aspectj-331399f82b33cc4cff8239aab18e405dfe0dd2b9.zip |
Fix 431976: thisJoinPoint considered uninitialized variable
4 files changed, 31 insertions, 0 deletions
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java index 31d9d149a..4f0dc27e0 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java @@ -21,6 +21,7 @@ import java.util.Iterator; import java.util.List; import java.util.Set; +import org.aspectj.ajdt.internal.compiler.ast.AdviceDeclaration; import org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration; import org.aspectj.ajdt.internal.compiler.ast.DeclareAnnotationDeclaration; import org.aspectj.ajdt.internal.compiler.ast.PointcutDeclaration; @@ -48,6 +49,7 @@ import org.aspectj.org.eclipse.jdt.internal.compiler.impl.CompilerOptions; import org.aspectj.org.eclipse.jdt.internal.compiler.impl.ReferenceContext; import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ArrayBinding; import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.IPrivilegedHandler; +import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LocalVariableBinding; import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding; import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ParameterizedMethodBinding; import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding; @@ -506,6 +508,17 @@ public class AjProblemReporter extends ProblemReporter { } super.unusedPrivateType(typeDecl); } + private final static char[] thisJoinPointName = "thisJoinPoint".toCharArray(); + + public void uninitializedLocalVariable(LocalVariableBinding binding, ASTNode location) { + if (CharOperation.equals(binding.name,thisJoinPointName)) { + // If in advice, this is not a problem + if (binding.declaringScope!=null && binding.declaringScope.referenceContext() instanceof AdviceDeclaration) { + return; + } + } + super.uninitializedLocalVariable(binding, location); + } public void abstractMethodInConcreteClass(SourceTypeBinding type) { if (type.scope!=null && type.scope.referenceContext instanceof AspectDeclaration) { diff --git a/tests/bugs180/pr431976/Code.java b/tests/bugs180/pr431976/Code.java new file mode 100644 index 000000000..a58ea4ecc --- /dev/null +++ b/tests/bugs180/pr431976/Code.java @@ -0,0 +1,10 @@ +import org.aspectj.lang.annotation.SuppressAjWarnings; + +privileged aspect BugThisJoinPoint { + + @SuppressAjWarnings("adviceDidNotMatch") + void around(): execution(boolean forceFocus ()) { + thisJoinPoint.getThis(); + } +} + diff --git a/tests/src/org/aspectj/systemtest/ajc180/Ajc180Tests.java b/tests/src/org/aspectj/systemtest/ajc180/Ajc180Tests.java index ea5d1c845..3da1f12b6 100644 --- a/tests/src/org/aspectj/systemtest/ajc180/Ajc180Tests.java +++ b/tests/src/org/aspectj/systemtest/ajc180/Ajc180Tests.java @@ -21,6 +21,10 @@ import org.aspectj.testing.XMLBasedAjcTestCase; */ public class Ajc180Tests extends org.aspectj.testing.XMLBasedAjcTestCase { + public void testThisJoinPointNotInitialized_431976() { + runTest("thisJoinPoint not initialized"); + } + public void testNullAnnotationMatching_431541() { runTest("NullAnnotationMatching exception"); } diff --git a/tests/src/org/aspectj/systemtest/ajc180/ajc180.xml b/tests/src/org/aspectj/systemtest/ajc180/ajc180.xml index 0d1132de6..6f7b0c586 100644 --- a/tests/src/org/aspectj/systemtest/ajc180/ajc180.xml +++ b/tests/src/org/aspectj/systemtest/ajc180/ajc180.xml @@ -2,6 +2,10 @@ <suite> + <ajc-test dir="bugs180/pr431976" title="thisJoinPoint not initialized"> + <compile options="-1.8" files="Code.java"/> + </ajc-test> + <ajc-test dir="bugs180/pr431541" title="NullAnnotationMatching exception"> <compile options="-1.8" files="Test.aj"/> </ajc-test> |