aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoracolyer <acolyer>2005-08-31 15:44:22 +0000
committeracolyer <acolyer>2005-08-31 15:44:22 +0000
commit7e0c3cdc37b974ef2bba01e19fa90cb9c752f288 (patch)
treed22ab831215e0e6143e2f1da7ddd816be17e2200
parent6c8747b590e9e9092ae256f2c7af0db169a6e2e4 (diff)
downloadaspectj-7e0c3cdc37b974ef2bba01e19fa90cb9c752f288.tar.gz
aspectj-7e0c3cdc37b974ef2bba01e19fa90cb9c752f288.zip
tests and fix for pr71159, visibility not taken into account when determining matching signatures with overrides
-rw-r--r--tests/bugs150/pr71159/PrivateITD.aj34
-rw-r--r--tests/bugs150/pr71159/pkg1/A.java7
-rw-r--r--tests/bugs150/pr71159/pkg1/B.java3
-rw-r--r--tests/bugs150/pr71159/pkg1/C.java7
-rw-r--r--tests/bugs150/pr71159/pkg2/ITDInDiffPackage.aj17
-rw-r--r--tests/bugs150/pr71159/pr71159.aj32
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java12
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/ajc150.xml18
-rw-r--r--weaver/src/org/aspectj/weaver/ResolvedMemberImpl.java18
9 files changed, 147 insertions, 1 deletions
diff --git a/tests/bugs150/pr71159/PrivateITD.aj b/tests/bugs150/pr71159/PrivateITD.aj
new file mode 100644
index 000000000..e4649d015
--- /dev/null
+++ b/tests/bugs150/pr71159/PrivateITD.aj
@@ -0,0 +1,34 @@
+class A {
+
+
+
+}
+
+class B extends A {
+
+ protected void foo() {}
+
+}
+
+class C extends B {}
+
+
+class D extends C {
+
+ public void foo() {}
+
+}
+
+aspect X {
+
+ private void A.foo() {}
+
+ void bar() {
+ D d = new D();
+ d.foo();
+ }
+
+ declare warning : call(* B.foo()) : "should match";
+ declare warning : call(* A.foo()) : "should not match";
+
+} \ No newline at end of file
diff --git a/tests/bugs150/pr71159/pkg1/A.java b/tests/bugs150/pr71159/pkg1/A.java
new file mode 100644
index 000000000..f07afe231
--- /dev/null
+++ b/tests/bugs150/pr71159/pkg1/A.java
@@ -0,0 +1,7 @@
+package pkg1;
+
+public class A {
+
+ //public void foo() {}
+
+} \ No newline at end of file
diff --git a/tests/bugs150/pr71159/pkg1/B.java b/tests/bugs150/pr71159/pkg1/B.java
new file mode 100644
index 000000000..e931fe8c9
--- /dev/null
+++ b/tests/bugs150/pr71159/pkg1/B.java
@@ -0,0 +1,3 @@
+package pkg1;
+
+public class B {} \ No newline at end of file
diff --git a/tests/bugs150/pr71159/pkg1/C.java b/tests/bugs150/pr71159/pkg1/C.java
new file mode 100644
index 000000000..48840a420
--- /dev/null
+++ b/tests/bugs150/pr71159/pkg1/C.java
@@ -0,0 +1,7 @@
+package pkg1;
+
+public class C {
+
+ public void foo() {}
+
+} \ No newline at end of file
diff --git a/tests/bugs150/pr71159/pkg2/ITDInDiffPackage.aj b/tests/bugs150/pr71159/pkg2/ITDInDiffPackage.aj
new file mode 100644
index 000000000..fa44cbf82
--- /dev/null
+++ b/tests/bugs150/pr71159/pkg2/ITDInDiffPackage.aj
@@ -0,0 +1,17 @@
+package pkg2;
+import pkg1.*;
+
+public aspect ITDInDiffPackage {
+
+ void B.foo() {}
+
+ void bar() {
+ C c = new C();
+ c.foo();
+ }
+
+ declare warning : call(* B.foo()) : "should not match";
+ declare warning : call(* C.foo()) : "should match";
+
+
+} \ No newline at end of file
diff --git a/tests/bugs150/pr71159/pr71159.aj b/tests/bugs150/pr71159/pr71159.aj
new file mode 100644
index 000000000..d332b4a4d
--- /dev/null
+++ b/tests/bugs150/pr71159/pr71159.aj
@@ -0,0 +1,32 @@
+class A {
+
+ private void foo() {}
+
+}
+
+class B extends A {
+
+ protected void foo() {}
+
+}
+
+class C extends B {}
+
+
+class D extends C {
+
+ public void foo() {}
+
+}
+
+aspect X {
+
+ void bar() {
+ D d = new D();
+ d.foo();
+ }
+
+ declare warning : call(* B.foo()) : "should match";
+ declare warning : call(* A.foo()) : "should not match";
+
+} \ No newline at end of file
diff --git a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
index 864acd233..de828818f 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
@@ -334,6 +334,18 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
runTest("inlined field access in proceed call");
}
+ public void testVisibiltyInSignatureMatchingWithOverridesPart1() {
+ runTest("visibility in signature matching with overrides - 1");
+ }
+
+ public void testVisibiltyInSignatureMatchingWithOverridesPart2() {
+ runTest("visibility in signature matching with overrides - 2");
+ }
+
+ public void testVisibiltyInSignatureMatchingWithOverridesPart3() {
+ runTest("visibility in signature matching with overrides - 3");
+ }
+
// helper methods.....
public SyntheticRepository createRepos(File cpentry) {
diff --git a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
index a5cdcfdc1..b1f4a2354 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
+++ b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
@@ -397,6 +397,24 @@
</compile>
</ajc-test>
+ <ajc-test dir="bugs150/pr71159" pr="71159" title="visibility in signature matching with overrides - 1">
+ <compile files="pr71159.aj">
+ <message kind="warning" line="26" text="should match"/>
+ </compile>
+ </ajc-test>
+
+ <ajc-test dir="bugs150/pr71159" pr="71159" title="visibility in signature matching with overrides - 2">
+ <compile files="PrivateITD.aj">
+ <message kind="warning" line="28" text="should match"/>
+ </compile>
+ </ajc-test>
+
+ <ajc-test dir="bugs150/pr71159" pr="71159" title="visibility in signature matching with overrides - 3">
+ <compile files="pkg1/A.java,pkg1/B.java,pkg1/C.java,pkg2/ITDInDiffPackage.aj">
+ <message kind="warning" line="10" text="should match"/>
+ </compile>
+ </ajc-test>
+
<!-- ============================================================================ -->
<!-- ============================================================================ -->
diff --git a/weaver/src/org/aspectj/weaver/ResolvedMemberImpl.java b/weaver/src/org/aspectj/weaver/ResolvedMemberImpl.java
index d94d3db12..85837fe1e 100644
--- a/weaver/src/org/aspectj/weaver/ResolvedMemberImpl.java
+++ b/weaver/src/org/aspectj/weaver/ResolvedMemberImpl.java
@@ -210,7 +210,7 @@ public class ResolvedMemberImpl extends MemberImpl implements IHasPosition, Anno
if (!typesAlreadyVisited.contains(toLookIn)) {
typesAlreadyVisited.add(toLookIn);
ResolvedMemberImpl foundMember = (ResolvedMemberImpl) toLookIn.lookupResolvedMember(memberToMatch);
- if (foundMember != null) {
+ if (foundMember != null && isVisibleTo(memberToMatch,foundMember)) {
List declaringTypes = new ArrayList();
// declaring type can be unresolved if the member can from an ITD...
ResolvedType resolvedDeclaringType = foundMember.getDeclaringType().resolve(toLookIn.getWorld());
@@ -231,6 +231,22 @@ public class ResolvedMemberImpl extends MemberImpl implements IHasPosition, Anno
}
}
+ /**
+ * Returns true if the parent member is visible to the child member
+ * In the same declaring type this is always true, otherwise if parent is private
+ * it is false.
+ * @param childMember
+ * @param parentMember
+ * @return
+ */
+ private static boolean isVisibleTo(ResolvedMember childMember, ResolvedMember parentMember) {
+ if (childMember.getDeclaringType().equals(parentMember.getDeclaringType())) return true;
+ if (Modifier.isPrivate(parentMember.getModifiers())) {
+ return false;
+ } else {
+ return true;
+ }
+ }
// ----