diff options
author | Andy Clement <aclement@gopivotal.com> | 2014-11-17 18:32:25 -0800 |
---|---|---|
committer | Andy Clement <aclement@gopivotal.com> | 2014-11-17 18:32:25 -0800 |
commit | ec91e93ac09fa9a347a8e8d0f99db3585dd93060 (patch) | |
tree | cb10973d67f2cf852ac4d4a0cea7546f1e5e2fd4 | |
parent | 934f0b86c5543737d4859131024cf73995fdc347 (diff) | |
download | aspectj-ec91e93ac09fa9a347a8e8d0f99db3585dd93060.tar.gz aspectj-ec91e93ac09fa9a347a8e8d0f99db3585dd93060.zip |
Further 451966: privileged aspect and ITDs
5 files changed, 57 insertions, 4 deletions
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/messages.properties b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/messages.properties index 94637ffc6..94dd63e27 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/messages.properties +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/messages.properties @@ -4,7 +4,7 @@ The -Xlintfile:lint.properties allows fine-grained control. In tools.jar, see org/aspectj/weaver/XlintDefault.properties for the default behavior and a template to copy. ### AspectJ-specific messages -compiler.name = AspectJ Compiler 1.8.4 +compiler.name = AspectJ Compiler 1.8.5 compiler.version = Eclipse Compiler BETA_JAVA8_2b07958, 3.11 compiler.copyright = diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/InterTypeMethodBinding.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/InterTypeMethodBinding.java index 5d17dd357..953e7d9ee 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/InterTypeMethodBinding.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/InterTypeMethodBinding.java @@ -104,13 +104,25 @@ public class InterTypeMethodBinding extends MethodBinding { // it is a privileged aspect return true; } - + if (isProtected()) { throw new RuntimeException("unimplemented"); } // XXX make sure this walks correctly if (isPrivate()) { + // Possibly the call is made from an inner type within the privileged aspect + // TODO should check the first outer aspect we come across and stop at that point? + if (invocationType.isNestedType()) { + TypeBinding enclosingType = invocationType.enclosingType(); + while (enclosingType != null) { + if ((enclosingType instanceof SourceTypeBinding) && ((SourceTypeBinding)enclosingType).privilegedHandler != null) { + return true; + } + enclosingType = enclosingType.enclosingType(); + } + } + // answer true if the receiverType is the declaringClass // AND the invocationType and the declaringClass have a common enclosingType // if (receiverType != declaringClass) return false; diff --git a/tests/bugs185/451966/Code2.java b/tests/bugs185/451966/Code2.java new file mode 100644 index 000000000..d40211725 --- /dev/null +++ b/tests/bugs185/451966/Code2.java @@ -0,0 +1,31 @@ + +public class Code2 { + public static void main(String []argv) { + new Bar().foo(); + } +} +interface Common { } + +interface Allergies extends Common { + default public void foo() { + } +} + +class Bar implements Allergies { } + +aspect Y { + private boolean Common.instancesInvariant() { + return false; + } +} + +privileged aspect AspectJMLRac_allergies_Allergies { + before(final Allergies object$rac): execution(* Allergies+.*(..)) && this(object$rac) { + Runnable r = new Runnable() { + public void run() { + boolean b = object$rac.instancesInvariant(); + } + }; + boolean b = object$rac.instancesInvariant(); + } +} diff --git a/tests/src/org/aspectj/systemtest/ajc185/Ajc185Tests.java b/tests/src/org/aspectj/systemtest/ajc185/Ajc185Tests.java index 9fefaa5eb..135eb8464 100644 --- a/tests/src/org/aspectj/systemtest/ajc185/Ajc185Tests.java +++ b/tests/src/org/aspectj/systemtest/ajc185/Ajc185Tests.java @@ -24,7 +24,12 @@ public class Ajc185Tests extends org.aspectj.testing.XMLBasedAjcTestCase { public void testITDInterface_451966() throws Exception { runTest("itd interface"); } - + + public void testITDInterface_451966_2() throws Exception { + // call made from inner type + runTest("itd interface - 2"); + } + // --- public static Test suite() { diff --git a/tests/src/org/aspectj/systemtest/ajc185/ajc185.xml b/tests/src/org/aspectj/systemtest/ajc185/ajc185.xml index 5e8f8dc8a..7c30d7bf4 100644 --- a/tests/src/org/aspectj/systemtest/ajc185/ajc185.xml +++ b/tests/src/org/aspectj/systemtest/ajc185/ajc185.xml @@ -2,11 +2,16 @@ <suite> - <ajc-test dir="bugs185/451966" title="itd interface"> <compile files="Code.java" options="-1.8"/> <run class="Code"> </run> </ajc-test> +<ajc-test dir="bugs185/451966" title="itd interface - 2"> +<compile files="Code2.java" options="-1.8"/> +<run class="Code2"> +</run> +</ajc-test> + </suite> |