From dbe1024f852c600d2752e5f39eb31ca4f5d72de9 Mon Sep 17 00:00:00 2001 From: aclement Date: Thu, 19 Aug 2004 16:38:16 +0000 Subject: [PATCH] Fix and testcase for Bugzilla Bug 49657 Weaver results in rt error if affected base class not exposed --- .../testdata/partialHierarchy/base.jar | Bin 0 -> 1005 bytes .../testdata/partialHierarchy/build.cmd | 8 +++ .../testdata/partialHierarchy/fullBase.jar | Bin 0 -> 1250 bytes .../partialHierarchy/sample/Base.java | 9 +++ .../partialHierarchy/sample/Derived.java | 15 +++++ .../partialHierarchy/sample/Iface.java | 4 ++ .../testdata/partialHierarchy/sample/Trace.aj | 22 +++++++ .../testdata/partialHierarchy/woven.jar | Bin 0 -> 3202 bytes .../compiler/batch/AjdtBatchTests.java | 1 + .../PartiallyExposedHierarchyTestCase.java | 54 +++++++++++++++ .../src/org/aspectj/weaver/ResolvedTypeX.java | 19 ++++++ .../org/aspectj/weaver/WeaverMessages.java | 1 + .../aspectj/weaver/bcel/BcelTypeMunger.java | 62 ++++++++++++------ .../aspectj/weaver/weaver-messages.properties | 1 + 14 files changed, 176 insertions(+), 20 deletions(-) create mode 100644 org.aspectj.ajdt.core/testdata/partialHierarchy/base.jar create mode 100644 org.aspectj.ajdt.core/testdata/partialHierarchy/build.cmd create mode 100644 org.aspectj.ajdt.core/testdata/partialHierarchy/fullBase.jar create mode 100644 org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Base.java create mode 100644 org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Derived.java create mode 100644 org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Iface.java create mode 100644 org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Trace.aj create mode 100644 org.aspectj.ajdt.core/testdata/partialHierarchy/woven.jar create mode 100644 org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/PartiallyExposedHierarchyTestCase.java diff --git a/org.aspectj.ajdt.core/testdata/partialHierarchy/base.jar b/org.aspectj.ajdt.core/testdata/partialHierarchy/base.jar new file mode 100644 index 0000000000000000000000000000000000000000..59bb33304b870165f3e85fed6208a5fa6ea802ce GIT binary patch literal 1005 zcmWIWW@Zs#-~htV4k1GZB*4kQ!r%L$ z$roa(+8HdWI>X-0Xvc(=QKwh( zDutB1_t9C>E7Um8Vjagdhof1QUK(4im76N(`7C9Zj@I+pA$MwnjKl|ytpP_rRhi14 z{^Hi7?3vMW(#1u2;;J>*e2XjBi?vk!DDSqjzN5-{{<+i9mayMuH3Hd!E=u!Q52vnr z6uIBH=;rCv2_ES>m;SIj7qp+$ntQ@~>dnfi{nHr>kCaUQ-)K=$d`@-W=WGk>7~YC` zXYagYo0|8N^=kS$o*#2+k2P7UJ(f+ovg6afiz||?!*l;=$YzUcvFPyXbu8)Rn|0&j z5n;Q{Gyk$BH{WfVXDhp6Q_p|zLvGyFJFnFB+5BJvC4tJun=BTL3=FS;7E<^XS2Hjo+?Ap8%cZ-D&{09bZ4jQ{`u literal 0 HcmV?d00001 diff --git a/org.aspectj.ajdt.core/testdata/partialHierarchy/build.cmd b/org.aspectj.ajdt.core/testdata/partialHierarchy/build.cmd new file mode 100644 index 000000000..74788b061 --- /dev/null +++ b/org.aspectj.ajdt.core/testdata/partialHierarchy/build.cmd @@ -0,0 +1,8 @@ +call ajc -outjar fullBase.jar sample\Base.java sample\Derived.java sample\Iface.java +jar xf fullBase.jar +jar cf base.jar sample\Derived.class sample\Iface.class +set XCLASSPATH=%CLASSPATH% +set CLASSPATH=fullBase.jar;%CLASSPATH% +call ajc -injars base.jar -outjar woven.jar sample\Trace.aj +java -classpath woven.jar;%CLASSPATH% sample.Derived +set CLASSPATH=%XCLASSPATH% diff --git a/org.aspectj.ajdt.core/testdata/partialHierarchy/fullBase.jar b/org.aspectj.ajdt.core/testdata/partialHierarchy/fullBase.jar new file mode 100644 index 0000000000000000000000000000000000000000..6231415bbfa663b499ebc7419c97b3a87cd4f548 GIT binary patch literal 1250 zcmWIWW@Zs#-~hsq4k1GZBp|}T!r-O&y1H)(EGpBvL zb@eXtdh2SPJ9B<>kiiw>2TzOiynJ;$eJ_@-+7eWtqvzqP_c5s8+|) zi6Ow7onzCL@GeWBMdm;pfYW+GploqsZb43}zEfgxs$OzVVsWvr-)_Id4gzy}^$pAB zus;mF?AY~#xkJOjsVl{i(W~A}e8-866W=P-X|p;ldcgcc<4BB$YevUJ62j=NkZ@I>b~Mwo1^6~FQxSI`wP6y+1z^WMK<@7UQ^+cW!pBK zU3$RUdOr7+(w`YhEF8`nE`l|0STh#tOQ>u!*#0^+YZd$4XKn^wr+l6l$3`A6Uz9a3 zSNDbL|4FeQ{w&gAeOSA5ol$Y}T;qbpou^m({d8)~j3}`0)D{N3=J^erwv|m40m(_1Dh?KW+;X5R+bjE& z^2hW_1C?1nnEwPG%e))mYjft!xijBq-0eSqy_~^TM(9uL40|`D9TQeYonFbS6jJiu zM`uZ|P~$v{bsX0mj%HPQX>7GtZmOK;vy@#rTF+;P+^G#R5+69W1|0oVWh#IAi(8Mf zXGY6O7Z>G;tJYleEv{TI)>8GOyxY$DjwD?g{UyH!Gv|PiHJVQZo5}qeVsWIn{livn{M+cq`_ez4MN3 zYTi%QtLf`_e$1&o)?}&nST^m-j!*k8u1K~H&;6qzn=P)zqQk4#v80o4){TotgzYxZ z{L7Zye79+yt?Y_TJ^#HAxp7zTyi(U^^MeT#@|BG@SuB8|{t9o%3n4<@Gc7S0np~~F z=3lpCV`H;rD|2I;_vpx-ra2+C=eHbr5>m$I=El~z=Ex?OzjKc4DXIOxWX+W)LS<}e zZfxrw{JFH~Nyzpyb3zo@*F^Cznb142v9qz2kx4=_qESVdSsI*+cu%YeiU8W01jGT} zj7%a7h-{3U!$8>>72wL$=%yg2IZ$pyfO;SkBX6Q>M-Dhp!bE`0z@UU`M@gpWCLnte f6u=0e%M3RGDYyf?S=m5pSb&fnXva~YDh37s(uA@Z literal 0 HcmV?d00001 diff --git a/org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Base.java b/org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Base.java new file mode 100644 index 000000000..f126f668a --- /dev/null +++ b/org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Base.java @@ -0,0 +1,9 @@ +package sample; + +public abstract class Base implements Iface { + int x; + Base() { + x=1; + } + abstract void foo(); +} diff --git a/org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Derived.java b/org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Derived.java new file mode 100644 index 000000000..cc79957a4 --- /dev/null +++ b/org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Derived.java @@ -0,0 +1,15 @@ +package sample; + +public class Derived extends Base { + int y; + public Derived() { + super(); + y = 2; + } + + public void foo() {} + + public static void main(String args[]) { + new Derived(); + } +} diff --git a/org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Iface.java b/org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Iface.java new file mode 100644 index 000000000..a295b5f6b --- /dev/null +++ b/org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Iface.java @@ -0,0 +1,4 @@ +package sample; + +public interface Iface { +} diff --git a/org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Trace.aj b/org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Trace.aj new file mode 100644 index 000000000..a55778256 --- /dev/null +++ b/org.aspectj.ajdt.core/testdata/partialHierarchy/sample/Trace.aj @@ -0,0 +1,22 @@ +package sample; + +import java.util.logging.Logger; + +public aspect Trace { + public interface Traced {} + declare parents: (sample.* && !Trace) extends Traced; + +// private Logger Traced.logger; + before(Traced current) : + execution(Traced+.new(..)) && !execution(Traced.new()) && this(current) { + current.getLogger().severe("entering ctor for "+thisJoinPoint); + } + + public Logger Traced.getLogger() { + // if (logger == null) { +// logger = Logger.getLogger(getClass().toString()); + // } +// return logger; +return null; + } +} diff --git a/org.aspectj.ajdt.core/testdata/partialHierarchy/woven.jar b/org.aspectj.ajdt.core/testdata/partialHierarchy/woven.jar new file mode 100644 index 0000000000000000000000000000000000000000..035e2b2c67f3292d99e3ec3f615c3d3e12d6855d GIT binary patch literal 3202 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 M`!fpeiz@)|Z%A%cmjD0& literal 0 HcmV?d00001 diff --git a/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/AjdtBatchTests.java b/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/AjdtBatchTests.java index 5f9d266a9..5dcc167df 100644 --- a/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/AjdtBatchTests.java +++ b/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/AjdtBatchTests.java @@ -30,6 +30,7 @@ public class AjdtBatchTests extends TestCase { suite.addTestSuite(ImageTestCase.class); suite.addTestSuite(MultipleCompileTestCase.class); suite.addTestSuite(JavadocTest.class); + suite.addTestSuite(PartiallyExposedHierarchyTestCase.class); // XXX suite.addTestSuite(VerifyWeaveTestCase.class); //suite.addTestSuite(WorkingCommandTestCase.class); //$JUnit-END$ diff --git a/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/PartiallyExposedHierarchyTestCase.java b/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/PartiallyExposedHierarchyTestCase.java new file mode 100644 index 000000000..de45e9ea5 --- /dev/null +++ b/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/internal/compiler/batch/PartiallyExposedHierarchyTestCase.java @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * Matthew Webster - initial implementation + *******************************************************************************/ +package org.aspectj.ajdt.internal.compiler.batch; + +import java.io.File; + +import org.aspectj.tools.ajc.AjcTestCase; +import org.aspectj.tools.ajc.CompilationResult; + +/** + * If you need to rebuild the components for this test, I'm afraid you will have + * to run build.cmd in the testdata/partialHierarchy directory which calls ajc and + * does some jar manipulation. + */ +public class PartiallyExposedHierarchyTestCase extends AjcTestCase { + + public static final String PROJECT_DIR = "partialHierarchy"; + + private File baseDir; + + protected void setUp() throws Exception { + super.setUp(); + baseDir = new File("../org.aspectj.ajdt.core/testdata",PROJECT_DIR); + } + + /** + * This test verifies that AspectJ behaves correctly when parts of an object + * hierarchy are exposed to it for weaving. See pr49657 for all the details. + */ + public void testPartiallyExposedHierarchy () { + Message warning = new Message(11,"no interface constructor-execution join point"); + //TODO This line number will change to 15 (from 5) when type mungers remember where they came from! + Message error = new Message(5, "type sample.Base must be accessible for weaving interface inter type declaration from aspect sample.Trace"); + CompilationResult result = ajc(baseDir, + new String[]{"-classpath","fullBase.jar", + "-injars","base.jar", + "sample"+File.separator+"Trace.aj"}); +// System.err.println(result.getWarningMessages()); +// System.err.println(result.getErrorMessages()); +// System.err.println(result.getStandardOutput()); + MessageSpec spec = new MessageSpec(null,newMessageList(warning),newMessageList(error)); + assertMessages(result,spec); + } + + +} diff --git a/weaver/src/org/aspectj/weaver/ResolvedTypeX.java b/weaver/src/org/aspectj/weaver/ResolvedTypeX.java index 3fbf7d588..c9e95c5f3 100644 --- a/weaver/src/org/aspectj/weaver/ResolvedTypeX.java +++ b/weaver/src/org/aspectj/weaver/ResolvedTypeX.java @@ -1307,6 +1307,25 @@ public abstract class ResolvedTypeX extends TypeX { return true; } + public ResolvedTypeX getTopmostImplementor(ResolvedTypeX interfaceType) { + if (isInterface()) return null; + if (!interfaceType.isAssignableFrom(this)) return null; + // Check if my super class is an implementor? + ResolvedTypeX higherType = this.getSuperclass().getTopmostImplementor(interfaceType); + if (higherType!=null) return higherType; + return this; + } + + private ResolvedTypeX findHigher(ResolvedTypeX other) { + if (this == other) return this; + for(Iterator i = other.getDirectSupertypes(); i.hasNext(); ) { + ResolvedTypeX rtx = (ResolvedTypeX)i.next(); + boolean b = this.isAssignableFrom(rtx); + if (b) return rtx; + } + return null; + } + public List getExposedPointcuts() { List ret = new ArrayList(); if (getSuperclass() != null) ret.addAll(getSuperclass().getExposedPointcuts()); diff --git a/weaver/src/org/aspectj/weaver/WeaverMessages.java b/weaver/src/org/aspectj/weaver/WeaverMessages.java index ae03329d3..8fe792f9b 100644 --- a/weaver/src/org/aspectj/weaver/WeaverMessages.java +++ b/weaver/src/org/aspectj/weaver/WeaverMessages.java @@ -52,6 +52,7 @@ public class WeaverMessages { public static final String ITD_OVERIDDING_STATIC = "overridingStatic"; public static final String ITD_CONFLICT = "itdConflict"; public static final String ITD_MEMBER_CONFLICT = "itdMemberConflict"; + public static final String ITD_NON_EXPOSED_IMPLEMENTOR = "itdNonExposedImplementor"; public static final String NON_VOID_RETURN = "nonVoidReturn"; diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java b/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java index b490e3d21..83b179643 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java @@ -24,6 +24,8 @@ import org.aspectj.apache.bcel.generic.InstructionFactory; import org.aspectj.apache.bcel.generic.InstructionList; import org.aspectj.apache.bcel.generic.Type; import org.aspectj.bridge.IMessage; +import org.aspectj.bridge.ISourceLocation; +import org.aspectj.bridge.MessageUtil; import org.aspectj.bridge.WeaveMessage; import org.aspectj.weaver.AjcMemberMaker; import org.aspectj.weaver.AsmRelationshipProvider; @@ -40,6 +42,7 @@ import org.aspectj.weaver.ResolvedMember; import org.aspectj.weaver.ResolvedTypeMunger; import org.aspectj.weaver.ResolvedTypeX; import org.aspectj.weaver.TypeX; +import org.aspectj.weaver.WeaverMessages; import org.aspectj.weaver.WeaverStateInfo; import org.aspectj.weaver.patterns.Pointcut; @@ -414,39 +417,58 @@ public class BcelTypeMunger extends ConcreteTypeMunger { addNeededSuperCallMethods(weaver, onType, munger.getSuperMethodsCalled()); return true; - } else if (onInterface && gen.getType().isTopmostImplementor(onType) && - !Modifier.isAbstract(signature.getModifiers())) - { - ResolvedMember introMethod = + + } else if (onInterface && !Modifier.isAbstract(signature.getModifiers())) { + + // This means the 'gen' should be the top most implementor + // - if it is *not* then something went wrong after we worked + // out that it was the top most implementor (see pr49657) + if (!gen.getType().isTopmostImplementor(onType)) { + ResolvedTypeX rtx = gen.getType().getTopmostImplementor(onType); + if (!rtx.isExposedToWeaver()) { + ISourceLocation sLoc = munger.getSourceLocation(); + weaver.getWorld().getMessageHandler().handleMessage(MessageUtil.error( + WeaverMessages.format(WeaverMessages.ITD_NON_EXPOSED_IMPLEMENTOR,rtx,getAspectType().getName()), + (sLoc==null?getAspectType().getSourceLocation():sLoc))); + } else { + // XXX what does this state mean? + // We have incorrectly identified what is the top most implementor and its not because + // a type wasn't exposed to the weaver + } + return false; + } else { + + ResolvedMember introMethod = AjcMemberMaker.interMethod(signature, aspectType, false); - LazyMethodGen mg = makeMethodGen(gen, introMethod); + LazyMethodGen mg = makeMethodGen(gen, introMethod); - Type[] paramTypes = BcelWorld.makeBcelTypes(introMethod.getParameterTypes()); - Type returnType = BcelWorld.makeBcelType(introMethod.getReturnType()); + Type[] paramTypes = BcelWorld.makeBcelTypes(introMethod.getParameterTypes()); + Type returnType = BcelWorld.makeBcelType(introMethod.getReturnType()); - InstructionList body = mg.getBody(); - InstructionFactory fact = gen.getFactory(); - int pos = 0; + InstructionList body = mg.getBody(); + InstructionFactory fact = gen.getFactory(); + int pos = 0; - if (!introMethod.isStatic()) { + if (!introMethod.isStatic()) { body.append(InstructionFactory.createThis()); pos++; - } - for (int i = 0, len = paramTypes.length; i < len; i++) { + } + for (int i = 0, len = paramTypes.length; i < len; i++) { Type paramType = paramTypes[i]; body.append(InstructionFactory.createLoad(paramType, pos)); pos+=paramType.getSize(); - } - body.append(Utility.createInvoke(fact, weaver.getWorld(), dispatchMethod)); - body.append(InstructionFactory.createReturn(returnType)); - mg.definingType = onType; + } + body.append(Utility.createInvoke(fact, weaver.getWorld(), dispatchMethod)); + body.append(InstructionFactory.createReturn(returnType)); + mg.definingType = onType; - weaver.addOrReplaceLazyMethodGen(mg); + weaver.addOrReplaceLazyMethodGen(mg); - addNeededSuperCallMethods(weaver, onType, munger.getSuperMethodsCalled()); + addNeededSuperCallMethods(weaver, onType, munger.getSuperMethodsCalled()); - return true; + return true; + } } else { return false; } diff --git a/weaver/src/org/aspectj/weaver/weaver-messages.properties b/weaver/src/org/aspectj/weaver/weaver-messages.properties index 5052d27ce..c731fb965 100644 --- a/weaver/src/org/aspectj/weaver/weaver-messages.properties +++ b/weaver/src/org/aspectj/weaver/weaver-messages.properties @@ -51,6 +51,7 @@ overriddenStatic={0} cannot override {1}; overridden method is static overridingStatic={0} cannot override {1}; overriding method is static itdConflict=intertype declaration from {0} conflicts with intertype declaration: {1} from {2} itdMemberConflict=inter-type declaration from {0} conflicts with existing member: {1} +itdNonExposedImplementor=type {0} must be accessible for weaving interface inter type declaration from aspect {1} # advice messages... nonVoidReturn=applying to join point that doesn't return void: {0} -- 2.39.5