]> source.dussan.org Git - aspectj.git/commitdiff
changed the serialized form of a WildTypePattern to remember generic info... standby...
authoracolyer <acolyer>
Fri, 22 Jul 2005 15:34:14 +0000 (15:34 +0000)
committeracolyer <acolyer>
Fri, 22 Jul 2005 15:34:14 +0000 (15:34 +0000)
38 files changed:
ajde/testdata/DuplicateManifestTest/aspectjar.jar
ajde/testdata/DuplicateManifestTest/injar.jar
ajde/testdata/WeaveInfoMessagesTest/AspectAdvice.jar
ajde/testdata/WeaveInfoMessagesTest/AspectAdvice_nodebug.jar
ajde/testdata/WeaveInfoMessagesTest/AspectDeclare.jar
ajde/testdata/WeaveInfoMessagesTest/AspectDeclareSoft.jar
ajde/testdata/WeaveInfoMessagesTest/AspectDeclareSoft_nodebug.jar
ajde/testdata/WeaveInfoMessagesTest/AspectDeclare_nodebug.jar
ajde/testdata/WeaveInfoMessagesTest/AspectITD.jar
ajde/testdata/WeaveInfoMessagesTest/AspectITD_nodebug.jar
ajde/testdata/WeaveInfoMessagesTest/Simple.jar
org.aspectj.ajdt.core/testdata/OutjarTest/aspects.jar
org.aspectj.ajdt.core/testdata/OutjarTest/child.jar
org.aspectj.ajdt.core/testdata/OutjarTest/parent.jar
tests/bugs/StringToString/helloworld.jar
tests/bugs/serialVersionUID/injar.jar
tests/new/options11/aspectlib1.jar
tests/new/options11/aspectlib2.jar
tests/new/options11/injar.jar
weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java
weaver/testdata/AfterReturningFancyHelloWorld.txt
weaver/testdata/AfterReturningHelloWorld.txt
weaver/testdata/BeforeFancyHelloWorld.txt
weaver/testdata/BeforeHelloWorld.txt
weaver/testdata/dummyAspect.jar
weaver/testdata/ltw-acaspects.jar
weaver/testdata/ltw-aspects.jar
weaver/testdata/ltw-classes.jar
weaver/testdata/ltw-deaspects.jar
weaver/testdata/ltw-dwaspects.jar
weaver/testdata/ltw-itdaspects.jar
weaver/testdata/ltw-peraspects.jar
weaver/testdata/ltw-woven.jar
weaver/testdata/megatrace.jar
weaver/testdata/megatrace0easy.jar
weaver/testdata/megatrace0hard.jar
weaver/testdata/megatraceNoweave.jar
weaver/testdata/tracing.jar

index d6137caa2e4234dcfa686a3c99e9b008abd379ac..e5b2b9c35eaa84b09526b8034f6ca4a2e667839c 100644 (file)
Binary files a/ajde/testdata/DuplicateManifestTest/aspectjar.jar and b/ajde/testdata/DuplicateManifestTest/aspectjar.jar differ
index f04d007f6d0c03abcd4da9153f5a03fd197c0d7e..c2c1326a78563ec4950e3d171d62441e44c13aae 100644 (file)
Binary files a/ajde/testdata/DuplicateManifestTest/injar.jar and b/ajde/testdata/DuplicateManifestTest/injar.jar differ
index c279f98557fccb842f20c6e385c21a802f669b9c..5fdde02e1b62459ca5d970df94c0ac8f7f8ba768 100644 (file)
Binary files a/ajde/testdata/WeaveInfoMessagesTest/AspectAdvice.jar and b/ajde/testdata/WeaveInfoMessagesTest/AspectAdvice.jar differ
index 5cedfb19ba4c3458d90ceb144cc36e1f110fe867..5fdde02e1b62459ca5d970df94c0ac8f7f8ba768 100644 (file)
Binary files a/ajde/testdata/WeaveInfoMessagesTest/AspectAdvice_nodebug.jar and b/ajde/testdata/WeaveInfoMessagesTest/AspectAdvice_nodebug.jar differ
index 7a3e7e3c1f1be6976e580a5c270c015962a482be..21811a56dd442d738832f91d14efc86d069efeae 100644 (file)
Binary files a/ajde/testdata/WeaveInfoMessagesTest/AspectDeclare.jar and b/ajde/testdata/WeaveInfoMessagesTest/AspectDeclare.jar differ
index 8cfc58e2b121927b3d312075d550b5c769a5f637..10e68750cb0d02999a1099c42a3e84c0d3b0c8cc 100644 (file)
Binary files a/ajde/testdata/WeaveInfoMessagesTest/AspectDeclareSoft.jar and b/ajde/testdata/WeaveInfoMessagesTest/AspectDeclareSoft.jar differ
index 8cfc58e2b121927b3d312075d550b5c769a5f637..10e68750cb0d02999a1099c42a3e84c0d3b0c8cc 100644 (file)
Binary files a/ajde/testdata/WeaveInfoMessagesTest/AspectDeclareSoft_nodebug.jar and b/ajde/testdata/WeaveInfoMessagesTest/AspectDeclareSoft_nodebug.jar differ
index e8a6753f681267e64ab3cb9ee1859eddd70418c6..21811a56dd442d738832f91d14efc86d069efeae 100644 (file)
Binary files a/ajde/testdata/WeaveInfoMessagesTest/AspectDeclare_nodebug.jar and b/ajde/testdata/WeaveInfoMessagesTest/AspectDeclare_nodebug.jar differ
index 101180b066facef3347b784fa264dff8d47d7648..f03c54b6bf4973effcb9742961c6e8701a1cf847 100644 (file)
Binary files a/ajde/testdata/WeaveInfoMessagesTest/AspectITD.jar and b/ajde/testdata/WeaveInfoMessagesTest/AspectITD.jar differ
index 101180b066facef3347b784fa264dff8d47d7648..e4a938a618c2e9440e5276122ce9926619024f10 100644 (file)
Binary files a/ajde/testdata/WeaveInfoMessagesTest/AspectITD_nodebug.jar and b/ajde/testdata/WeaveInfoMessagesTest/AspectITD_nodebug.jar differ
index aa612925887b2124eb5b9d14708162866e7f387c..596257ca880c2a22531fb061aa14f6b3a3735779 100644 (file)
Binary files a/ajde/testdata/WeaveInfoMessagesTest/Simple.jar and b/ajde/testdata/WeaveInfoMessagesTest/Simple.jar differ
index 955795b30b42c9af2b5a3dc3caca28037d7813a8..966f8dc1e9e4e6c4f57e336d3f3030e4fd969650 100644 (file)
Binary files a/org.aspectj.ajdt.core/testdata/OutjarTest/aspects.jar and b/org.aspectj.ajdt.core/testdata/OutjarTest/aspects.jar differ
index db375005f21990fd07a9bc0461e66a8e5a831725..5b0b23450647106e4fbff2c78bd0b967f1e03664 100644 (file)
Binary files a/org.aspectj.ajdt.core/testdata/OutjarTest/child.jar and b/org.aspectj.ajdt.core/testdata/OutjarTest/child.jar differ
index 93628a6b380ec84cd523e8f566eb373fe6ac6461..d921175b2fd3aeb749445141d49e5a1867fc6a42 100644 (file)
Binary files a/org.aspectj.ajdt.core/testdata/OutjarTest/parent.jar and b/org.aspectj.ajdt.core/testdata/OutjarTest/parent.jar differ
index 4c588d84e24ae595b4a481f2450477982842cf02..2112135d412574f305fe06599f71ed6f7bf80bb7 100644 (file)
Binary files a/tests/bugs/StringToString/helloworld.jar and b/tests/bugs/StringToString/helloworld.jar differ
index ca9170c2ca55acf8b010b56d6091db6a830b23b0..27c6d742bba064871455b98bdf06d67f2f573c0a 100644 (file)
Binary files a/tests/bugs/serialVersionUID/injar.jar and b/tests/bugs/serialVersionUID/injar.jar differ
index c0a824e752eda262a9ec3a61f5173c2c58026df8..2f832f0e30a7aad5927a902402c7d3ded3bf4e06 100644 (file)
Binary files a/tests/new/options11/aspectlib1.jar and b/tests/new/options11/aspectlib1.jar differ
index 3a1f8b2ba6fd869bdc75cdf4d857c7602802cf8e..c0de74f5302b9a35a90dc9b2de3e9b7d546c5e85 100644 (file)
Binary files a/tests/new/options11/aspectlib2.jar and b/tests/new/options11/aspectlib2.jar differ
index a70a43a12765440515d8221bcac300563a4af4de..53c0a14072781460a9722c708be23afccff52561 100644 (file)
Binary files a/tests/new/options11/injar.jar and b/tests/new/options11/injar.jar differ
index a4234982ff2fec22e7dd7f4982948766be09684b..b1fbba5ed474b56fdea11d37506cb6616633c64a 100644 (file)
@@ -36,6 +36,102 @@ import org.aspectj.weaver.VersionedDataInputStream;
 import org.aspectj.weaver.WeaverMessages;
 
 //XXX need to use dim in matching
+/**
+ * The PatternParser always creates WildTypePatterns for type patterns in pointcut
+ * expressions (apart from *, which is sometimes directly turned into TypePattern.ANY).
+ * resolveBindings() tries to work out what we've really got and turn it into a type
+ * pattern that we can use for matching. This will normally be either an ExactTypePattern
+ * or a WildTypePattern.
+ * 
+ * Here's how the process pans out for various generic and parameterized patterns:
+ * (see GenericsWildTypePatternResolvingTestCase)
+ * 
+ * Foo where Foo exists and is generic
+ *    Parser creates WildTypePattern namePatterns={Foo}
+ *    resolveBindings resolves Foo to RT(Foo - raw)
+ *                    return ExactTypePattern(LFoo;)
+ * 
+ * <E>... Foo<E>    where Foo exists and has one unbound type var
+ *    Parser creates WildTypePattern namePatterns = {Foo}, typeParameters=WTP{E}
+ *    resolveBindings requireExactType = true | false
+ *                    resolves typeParameters to ExactTypePattern(TVRT(E))
+ *                    resolves Foo to RT(Foo - raw)
+ *                    returns ExactTypePattern(<1:>LFoo; - generic)  1=E
+ * 
+ * <E>... Foo<E>    where Foo exists and is not generic (or has different bounds)
+ *    Parser creates WildTypePattern namePatterns = {Foo}, typeParameters=WTP{E}
+ *    resolveBindings resolves typeParameters to ExactTypePattern(TVRT(E))
+ *                    resolves Foo to RT(Foo)
+ *                    finds that Foo is not generic / type var mismatch
+ *                    requireExactType = true ->returns TypePattern.NO (and issues error)
+ *                                     = false -> XLint then return ExactTypePattern(<1:>LFoo;)
+ *                    
+ * <E>... Foo<E extends Number> where Foo exists and bounds match
+ *    Parser creates WildTypePattern namePatterns = {Foo}, typeParameters=WTP{E},uB=WTP{Number}
+ *    resolveBindings resolves typeParameters to ExactTypePattern(TVRT(E extends Number))
+ *                    resolves Foo to RT(Foo)
+ *                    returns ExactTypePattern(<1:Ljava/lang/Number;>LFoo;)  1=E
+ *                    
+ * Foo<String> where Foo exists and String meets the bounds
+ *    Parser creates WildTypePattern namePatterns = {Foo}, typeParameters=WTP{String}
+ *    resolveBindings resolves typeParameters to ExactTypePattern(String)
+ *                    resolves Foo to RT(Foo)
+ *                    returns ExactTypePattern(PFoo<String>; - parameterized)
+ *                    
+ * Foo<Str*> where Foo exists and takes one bound
+ *    Parser creates WildTypePattern namePatterns = {Foo}, typeParameters=WTP{Str*}
+ *    resolveBindings resolves typeParameters to WTP{Str*}
+ *                    resolves Foo to RT(Foo)
+ *                    returns WildTypePattern(name = Foo, typeParameters = WTP{Str*} isGeneric=false)                    
+ * 
+ * Fo*<String> 
+ *    Parser creates WildTypePattern namePatterns = {Fo*}, typeParameters=WTP{String}
+ *    resolveBindings resolves typeParameters to ETP{String}
+ *                    returns WildTypePattern(name = Fo*, typeParameters = ETP{String} isGeneric=false)                    
+ *
+ * <E>... Fo*<E>                        
+ *    Parser creates WildTypePattern namePatterns = {Fo*}, typeParameters=WTP{E}
+ *    resolveBindings resolves typeParameters to ETP{TVRT(E)}
+ *                    returns WildTypePattern(name = Fo*, typeParameters = ETP{TVRT(E)} isGeneric=true)
+ *                    
+ * <E>... Fo*<E extends Number>
+ *    Parser creates WildTypePattern namePatterns = {Fo*}, typeParameters=WTP{E,uB=WTP(Number)}
+ *    resolveBindings resolves typeParameters to ETP{TVRT(E extends Number)}
+ *                    returns WildTypePattern(name = Fo*, typeParameters = ETP{TVRT(E extends Number)} isGeneric=true)
+ *                    
+ * <E>... Foo<E extends Number+> where Foo exists and takes one bound
+ *    Parser creates WildTypePattern namePatterns = {Foo}, typeParameters=WTP{E,uB=WTP(Number+)}
+ *    resolveBindings resolves typeParameters to WildTypeVariableReferencePattern{TVP(name="E",uB=Number+)}
+ *                   resolves Foo to RT(Foo)
+ *                    if requireExactType (but this doesn't allow + ? )
+ *                       if typeParameters.matches(RT(Foo - generic).getTypeVariables()
+ *                           return ETP(<1:Ljava/lang/Number;>LFoo;)
+ *                       else return TypePattern.NO and issue warning
+ *                    else 
+ *                       if !typeParameters.matches(RT(Foo - generic).getTypeVariables()
+ *                           issue warning (XLint?)
+ *                       return WildTypePattern(name=Foo, typeParameters=WTVRP{TVP(E,Number+)} isGeneric=true
+ * 
+ * <E>... Fo*<E extends Number+>                                         
+ *    Parser creates WildTypePattern namePatterns = {Fo*}, typeParameters=WTP{E,uB=WTP(Number+)}
+ *    resolveBindings resolves typeParameters to WildTypeVariableReferencePattern{TVP(name="E",uB=Number+)}
+ *                    returns WildTypePattern(name=Fo*, typeParamters = WTVRP{TVP(name="E" ub=Number+)} isGeneric=true)
+ * 
+ * TODO:
+ * 
+ * <E>... Foo<E,String>
+ * 
+ * <S,T>... Foo<S,T extends S>
+ * 
+ * Foo<?>
+ * 
+ * Foo<? extends Number>
+ * 
+ * Foo<? extends Number+>
+ * 
+ * Foo<? super Number>
+ * 
+ */
 public class WildTypePattern extends TypePattern {
        private NamePattern[] namePatterns;
        int ellipsisCount;
@@ -168,10 +264,25 @@ public class WildTypePattern extends TypePattern {
                annotationPattern.resolve(type.getWorld());
                
                return matchesExactlyByName(targetTypeName) &&
+                      // matchesParameters(type) &&
                       annotationPattern.matches(annotatedType).alwaysTrue();
        }
        
        
+       // we've matched against the base (or raw) type, but if this type pattern specifies parameters or
+       // type variables we need to make sure we match against them too
+       private boolean matchesParameters(ResolvedType aType) {
+               if (isGeneric) {
+                       if (!aType.isGenericType()) return false;
+                       // we have to match type variables
+                       
+               } else if (typeParameters.size() > 0) {
+                       if(!aType.isParameterizedType()) return false;
+                       // we have to match type parameters
+               }
+               return true;
+       }
+       
        /**
         * Used in conjunction with checks on 'isStar()' to tell you if this pattern represents '*' or '*[]' which are 
         * different !
@@ -479,7 +590,7 @@ public class WildTypePattern extends TypePattern {
            // use a special variant of Any TypePattern called
            // AnyWithAnnotation
                if (annotationPattern == AnnotationTypePattern.ANY) {
-                 if (dim == 0 && !isVarArgs) { // pr72531
+                 if (dim == 0 && !isVarArgs && upperBound == null && lowerBound == null && (additionalInterfaceBounds == null || additionalInterfaceBounds.length==0)) { // pr72531
                        return TypePattern.ANY;  //??? loses source location
                  } 
                } else {
@@ -889,6 +1000,18 @@ public class WildTypePattern extends TypePattern {
                FileUtil.writeStringArray(importedPrefixes, s);
                writeLocation(s);
                annotationPattern.write(s);
+               // generics info, new in M3
+               s.writeBoolean(isGeneric);
+               s.writeBoolean(upperBound != null);
+               if (upperBound != null) upperBound.write(s);
+               s.writeBoolean(lowerBound != null);
+               if (lowerBound != null) lowerBound.write(s);
+               s.writeInt(additionalInterfaceBounds == null ? 0 : additionalInterfaceBounds.length);
+               if (additionalInterfaceBounds != null) {
+                       for (int i = 0; i < additionalInterfaceBounds.length; i++) {
+                               additionalInterfaceBounds[i].write(s);
+                       }
+               }
        }
        
        public static TypePattern read(VersionedDataInputStream s, ISourceContext context) throws IOException {
@@ -918,6 +1041,21 @@ public class WildTypePattern extends TypePattern {
          ret.importedPrefixes = FileUtil.readStringArray(s);
          ret.readLocation(context, s);
          ret.setAnnotationTypePattern(AnnotationTypePattern.read(s,context));
+         // generics info, new in M3
+         ret.isGeneric = s.readBoolean();
+         if (s.readBoolean()) {
+                 ret.upperBound = TypePattern.read(s,context);
+         }
+         if (s.readBoolean()) {
+                 ret.lowerBound = TypePattern.read(s,context);
+         }
+         int numIfBounds = s.readInt();
+         if (numIfBounds > 0) {
+                 ret.additionalInterfaceBounds = new TypePattern[numIfBounds];
+                 for (int i = 0; i < numIfBounds; i++) {
+                       ret.additionalInterfaceBounds[i] = TypePattern.read(s,context);
+               }
+         }
          return ret;
        }
     
index 1bcdad132d800fca28989efc0257bc9d9bb8cd51..f2447b509ff9aaf6517ec89092d4d00ba3e27a18 100644 (file)
@@ -98,4 +98,5 @@ public abstract class FancyHelloWorld extends java.lang.Object:
     |               ARETURN
     method-execution(java.lang.String FancyHelloWorld.getName())
   end public static String getName()
+
 end public abstract class FancyHelloWorld
index 271a34b38bf1f28a08a91ac3cf01d1275e1ac63b..6f58d2f3d68f5c86c7bd4af3cd2e07305e7a79ff 100644 (file)
@@ -27,4 +27,5 @@ public class HelloWorld extends java.lang.Object:
     |               RETURN
     method-execution(void HelloWorld.main(java.lang.String[]))
   end public static void main(String[])
+
 end public class HelloWorld
index 18136b6934c9be671546b6319a5b50ffcded74bc..bc2ef49bac39e19a87761c0fb789c32c7aff8a6e 100644 (file)
@@ -87,4 +87,5 @@ public abstract class FancyHelloWorld extends java.lang.Object:
     |               ARETURN
     method-execution(java.lang.String FancyHelloWorld.getName())
   end public static String getName()
+
 end public abstract class FancyHelloWorld
index 3fc3fa818d04e205c94be1e24bcb971b7d38f73a..d89b5acd97af4cf4d6d1d812f22c8f413f2ead6b 100644 (file)
@@ -23,4 +23,5 @@ public class HelloWorld extends java.lang.Object:
     |               RETURN   (line 11)
     method-execution(void HelloWorld.main(java.lang.String[]))
   end public static void main(String[])
+
 end public class HelloWorld
index 8095fddf44927b6f85f2680aaafde67359522034..bc1212450b6971c9cb219e6a046458189d019531 100644 (file)
Binary files a/weaver/testdata/dummyAspect.jar and b/weaver/testdata/dummyAspect.jar differ
index ed55e51bc5afeefc1ab482b55a16f128cb619e24..27c112671c021bbfdf9beaf69d442ce5fe5e1bbf 100644 (file)
Binary files a/weaver/testdata/ltw-acaspects.jar and b/weaver/testdata/ltw-acaspects.jar differ
index 2e1e86fb1fdc6c7af66288016516cfd7e6c6ed02..436e5a22509182dedede94a1dbd3a4647bc34da4 100644 (file)
Binary files a/weaver/testdata/ltw-aspects.jar and b/weaver/testdata/ltw-aspects.jar differ
index 014510d57abc4f6f031cbc3a13ef0fef5bc618e2..b79e963fc765e03c4fea5642afed9ead12a0018e 100644 (file)
Binary files a/weaver/testdata/ltw-classes.jar and b/weaver/testdata/ltw-classes.jar differ
index 853e7147b11f826352d2e4061706773eb990f82c..6dd510a5ad95753f833e13d8aa1d2e7efd944565 100644 (file)
Binary files a/weaver/testdata/ltw-deaspects.jar and b/weaver/testdata/ltw-deaspects.jar differ
index 7ca214cf3bc8256d45db5e06611690fab1bd02c9..5e9d88bd8a45883650ef209efad68f46eb0996b4 100644 (file)
Binary files a/weaver/testdata/ltw-dwaspects.jar and b/weaver/testdata/ltw-dwaspects.jar differ
index 6144a3f6f89b6c7701a8cfdc3bdba5e117bd580b..cf998df733fb61d910783b7e97c58869e362dfb0 100644 (file)
Binary files a/weaver/testdata/ltw-itdaspects.jar and b/weaver/testdata/ltw-itdaspects.jar differ
index 2c37baeb7f2b726267ef13febed033b685f8b252..25ad702c78d6216c344034d1b7db521a51a465df 100644 (file)
Binary files a/weaver/testdata/ltw-peraspects.jar and b/weaver/testdata/ltw-peraspects.jar differ
index d4f117eeac1edee8c24da76a9d0288e81efda129..6db485722566ca7b9eb014096c7fadcfeb7dd4fa 100644 (file)
Binary files a/weaver/testdata/ltw-woven.jar and b/weaver/testdata/ltw-woven.jar differ
index 8735641c59b60d6fc48d3231d3cfd83181346eb6..39c09bf9009f38c1a466288ab975e80689c07bde 100644 (file)
Binary files a/weaver/testdata/megatrace.jar and b/weaver/testdata/megatrace.jar differ
index 11deb555cd7c6c2f050e11ffea447b6f498e2e0f..7f39269ca37324cdf2bdfba5d3b758d827343a5f 100644 (file)
Binary files a/weaver/testdata/megatrace0easy.jar and b/weaver/testdata/megatrace0easy.jar differ
index 84f4a7b1ee50384ba0a048b52c1a3ce3b74d0bd3..cac0d6b18fece4d8cca4bbe31c4d0bcbf5cbb9e6 100644 (file)
Binary files a/weaver/testdata/megatrace0hard.jar and b/weaver/testdata/megatrace0hard.jar differ
index 4f8d26a4a442df172d37717a4daf42bd09855d71..6ee827fc1f40e1c46c74c81200d73d2e5648fbdb 100644 (file)
Binary files a/weaver/testdata/megatraceNoweave.jar and b/weaver/testdata/megatraceNoweave.jar differ
index 1a50581b17b510c9a8a36da1b477fd07eec2dca7..ebd414b1cbd2b763a8b45dabf3ee3a45b65516b8 100644 (file)
Binary files a/weaver/testdata/tracing.jar and b/weaver/testdata/tracing.jar differ