diff options
author | acolyer <acolyer> | 2005-08-31 15:44:22 +0000 |
---|---|---|
committer | acolyer <acolyer> | 2005-08-31 15:44:22 +0000 |
commit | 7e0c3cdc37b974ef2bba01e19fa90cb9c752f288 (patch) | |
tree | d22ab831215e0e6143e2f1da7ddd816be17e2200 | |
parent | 6c8747b590e9e9092ae256f2c7af0db169a6e2e4 (diff) | |
download | aspectj-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.aj | 34 | ||||
-rw-r--r-- | tests/bugs150/pr71159/pkg1/A.java | 7 | ||||
-rw-r--r-- | tests/bugs150/pr71159/pkg1/B.java | 3 | ||||
-rw-r--r-- | tests/bugs150/pr71159/pkg1/C.java | 7 | ||||
-rw-r--r-- | tests/bugs150/pr71159/pkg2/ITDInDiffPackage.aj | 17 | ||||
-rw-r--r-- | tests/bugs150/pr71159/pr71159.aj | 32 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java | 12 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc150/ajc150.xml | 18 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/ResolvedMemberImpl.java | 18 |
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; + } + } // ---- |