aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Clement <aclement@gopivotal.com>2014-11-17 18:32:25 -0800
committerAndy Clement <aclement@gopivotal.com>2014-11-17 18:32:25 -0800
commitec91e93ac09fa9a347a8e8d0f99db3585dd93060 (patch)
treecb10973d67f2cf852ac4d4a0cea7546f1e5e2fd4
parent934f0b86c5543737d4859131024cf73995fdc347 (diff)
downloadaspectj-ec91e93ac09fa9a347a8e8d0f99db3585dd93060.tar.gz
aspectj-ec91e93ac09fa9a347a8e8d0f99db3585dd93060.zip
Further 451966: privileged aspect and ITDs
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/messages.properties2
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/InterTypeMethodBinding.java14
-rw-r--r--tests/bugs185/451966/Code2.java31
-rw-r--r--tests/src/org/aspectj/systemtest/ajc185/Ajc185Tests.java7
-rw-r--r--tests/src/org/aspectj/systemtest/ajc185/ajc185.xml7
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>