]> source.dussan.org Git - aspectj.git/commitdiff
312839: smaller class files
authoraclement <aclement>
Wed, 19 May 2010 15:13:18 +0000 (15:13 +0000)
committeraclement <aclement>
Wed, 19 May 2010 15:13:18 +0000 (15:13 +0000)
tests/src/org/aspectj/systemtest/ajc160/SanityTests.java
tests/src/org/aspectj/systemtest/ajc169/Ajc169Tests.java
tests/src/org/aspectj/systemtest/ajc169/ajc169.xml
tests/src/org/aspectj/systemtest/incremental/tools/MultiProjectIncrementalTests.java

index bda9989792c5078985ca42037c72063ef5b01bf3..6bcc9625c92d5f5b4d583ca0d97502be76c652fb 100644 (file)
@@ -30,106 +30,146 @@ import org.aspectj.testing.XMLBasedAjcTestCase;
  */
 public class SanityTests extends org.aspectj.testing.XMLBasedAjcTestCase {
 
-  // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
-  public void testSimpleJava_A() { runTest("simple - a");}
-  public void testSimpleJava_B() { runTest("simple - b");}
-  public void testSimpleCode_C() { runTest("simple - c");}
-  public void testSimpleCode_D() { runTest("simple - d");}
-  public void testSimpleCode_E() { runTest("simple - e");}
-  public void testSimpleCode_F() { runTest("simple - f");}
-  public void testSimpleCode_G() { runTest("simple - g");}
-  
-  public void testSimpleCode_H() { runTest("simple - h");}
-  public void testSimpleCode_I() { runTest("simple - i");}
-  
-  // Check the version number in the classfiles is correct when Java6 options specified
-  public void testVersionCorrect1() throws ClassNotFoundException {
-         runTest("simple - j");
-         checkVersion("A",50,0);
-  }
-  public void testVersionCorrect2() throws ClassNotFoundException {
-         runTest("simple - k");
-         checkVersion("A",50,0);
-  }
-  public void testVersionCorrect3() throws ClassNotFoundException {
-         runTest("simple - l");
-         checkVersion("A",50,0);
-  }
-  public void testVersionCorrect4() throws ClassNotFoundException {// check it is 49.0 when -1.5 is specified
-         runTest("simple - m");
-         checkVersion("A",49,0);
-  }
-         
-  // Check the stackmap stuff appears for methods in a Java6 file
-//  public void testStackMapAttributesAppear() throws ClassNotFoundException {
-//       runTest("simple - n");
-//       checkStackMapExistence("A","<init>_<clinit>");
-//       checkStackMapExistence("X","<init>_<clinit>_ajc$pointcut$$complicatedPointcut$1fe");
-//  }
-
-  /* For the specified class, check that each method has a stackmap attribute */
-  private void checkStackMapExistence(String classname,String toIgnore) throws ClassNotFoundException {
-         toIgnore="_"+(toIgnore==null?"":toIgnore)+"_";
-         JavaClass jc = getClassFrom(ajc.getSandboxDirectory(),classname);
-         Method[] methods = jc.getMethods();
-         for (int i = 0; i < methods.length; i++) {
-               Method method = methods[i];
-               if (toIgnore.contains("_"+method.getName()+"_")) continue;
-               boolean hasStackMapAttribute = findAttribute(method.getAttributes(),"StackMapTable");
-               if (!hasStackMapAttribute) fail("Could not find StackMap attribute for method "+method.getName());
-       }
-  }
-  
-  private boolean findAttribute(Attribute[] attrs,String attributeName) {
-         if (attrs==null) return false;
-         for (int i = 0; i < attrs.length; i++) {
-               Attribute attribute = attrs[i];
-               if (attribute.getName().equals(attributeName)) return true;
-               //System.out.println(attribute.getName());
-               if (attribute.getName().equals("Code")) {
-                       Code c = (Code)attribute;
-                       Attribute[] codeAttributes = c.getAttributes();
-                       for (int j = 0; j < codeAttributes.length; j++) {
-                               Attribute codeAttribute = codeAttributes[j];
-                               if (codeAttribute.getName().equals(attributeName)) return true;
-                               //System.out.println(codeAttribute.getName());
+       // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug)
+       public void testSimpleJava_A() {
+               runTest("simple - a");
+       }
+
+       public void testSimpleJava_B() {
+               runTest("simple - b");
+       }
+
+       public void testSimpleCode_C() {
+               runTest("simple - c");
+       }
+
+       public void testSimpleCode_D() {
+               runTest("simple - d");
+       }
+
+       public void testSimpleCode_E() {
+               runTest("simple - e");
+       }
+
+       public void testSimpleCode_F() {
+               runTest("simple - f");
+       }
+
+       public void testSimpleCode_G() {
+               runTest("simple - g");
+       }
+
+       public void testSimpleCode_H() {
+               runTest("simple - h", true);
+       }
+
+       public void testSimpleCode_I() {
+               runTest("simple - i");
+       }
+
+       // Check the version number in the classfiles is correct when Java6 options specified
+       public void testVersionCorrect1() throws ClassNotFoundException {
+               runTest("simple - j");
+               checkVersion("A", 50, 0);
+       }
+
+       public void testVersionCorrect2() throws ClassNotFoundException {
+               runTest("simple - k");
+               checkVersion("A", 50, 0);
+       }
+
+       public void testVersionCorrect3() throws ClassNotFoundException {
+               runTest("simple - l");
+               checkVersion("A", 50, 0);
+       }
+
+       public void testVersionCorrect4() throws ClassNotFoundException {// check it is 49.0 when -1.5 is specified
+               runTest("simple - m");
+               checkVersion("A", 49, 0);
+       }
+
+       // Check the stackmap stuff appears for methods in a Java6 file
+       // public void testStackMapAttributesAppear() throws ClassNotFoundException {
+       // runTest("simple - n");
+       // checkStackMapExistence("A","<init>_<clinit>");
+       // checkStackMapExistence("X","<init>_<clinit>_ajc$pointcut$$complicatedPointcut$1fe");
+       // }
+
+       /* For the specified class, check that each method has a stackmap attribute */
+       private void checkStackMapExistence(String classname, String toIgnore) throws ClassNotFoundException {
+               toIgnore = "_" + (toIgnore == null ? "" : toIgnore) + "_";
+               JavaClass jc = getClassFrom(ajc.getSandboxDirectory(), classname);
+               Method[] methods = jc.getMethods();
+               for (int i = 0; i < methods.length; i++) {
+                       Method method = methods[i];
+                       if (toIgnore.contains("_" + method.getName() + "_")) {
+                               continue;
+                       }
+                       boolean hasStackMapAttribute = findAttribute(method.getAttributes(), "StackMapTable");
+                       if (!hasStackMapAttribute) {
+                               fail("Could not find StackMap attribute for method " + method.getName());
+                       }
+               }
+       }
+
+       private boolean findAttribute(Attribute[] attrs, String attributeName) {
+               if (attrs == null) {
+                       return false;
+               }
+               for (int i = 0; i < attrs.length; i++) {
+                       Attribute attribute = attrs[i];
+                       if (attribute.getName().equals(attributeName)) {
+                               return true;
+                       }
+                       // System.out.println(attribute.getName());
+                       if (attribute.getName().equals("Code")) {
+                               Code c = (Code) attribute;
+                               Attribute[] codeAttributes = c.getAttributes();
+                               for (int j = 0; j < codeAttributes.length; j++) {
+                                       Attribute codeAttribute = codeAttributes[j];
+                                       if (codeAttribute.getName().equals(attributeName)) {
+                                               return true;
+                                               // System.out.println(codeAttribute.getName());
+                                       }
+                               }
                        }
                }
-         }
-         return false;
-  }
-  
-  private void checkVersion(String classname,int major,int minor) throws ClassNotFoundException {
-      JavaClass jc = getClassFrom(ajc.getSandboxDirectory(),classname);
-      if (jc.getMajor()!=major) fail("Expected major version to be "+major+" but was "+jc.getMajor());
-      if (jc.getMinor()!=minor) fail("Expected minor version to be "+minor+" but was "+jc.getMinor());
-  }
-  
-  // Check the stackmap stuff is removed when a method gets woven (for now...)
-//  public void testStackMapAttributesDeletedInWovenCode() {
-//       fail("Not implemented");
-//  }
-  
-
-  /////////////////////////////////////////
-  public SyntheticRepository createRepos(File cpentry) {
-       ClassPath cp = new ClassPath(cpentry+File.pathSeparator+System.getProperty("java.class.path"));
-       return SyntheticRepository.getInstance(cp);
-  }
-  
-  protected JavaClass getClassFrom(File where,String clazzname) throws ClassNotFoundException {
-       SyntheticRepository repos = createRepos(where);
-       return repos.loadClass(clazzname);
-  }
-
-  /////////////////////////////////////////
-  public static Test suite() {
-    return XMLBasedAjcTestCase.loadSuite(SanityTests.class);
-  }
-
-  protected File getSpecFile() {
-    return new File("../tests/src/org/aspectj/systemtest/ajc160/sanity-tests.xml");
-  }
-
-  
+               return false;
+       }
+
+       private void checkVersion(String classname, int major, int minor) throws ClassNotFoundException {
+               JavaClass jc = getClassFrom(ajc.getSandboxDirectory(), classname);
+               if (jc.getMajor() != major) {
+                       fail("Expected major version to be " + major + " but was " + jc.getMajor());
+               }
+               if (jc.getMinor() != minor) {
+                       fail("Expected minor version to be " + minor + " but was " + jc.getMinor());
+               }
+       }
+
+       // Check the stackmap stuff is removed when a method gets woven (for now...)
+       // public void testStackMapAttributesDeletedInWovenCode() {
+       // fail("Not implemented");
+       // }
+
+       // ///////////////////////////////////////
+       public SyntheticRepository createRepos(File cpentry) {
+               ClassPath cp = new ClassPath(cpentry + File.pathSeparator + System.getProperty("java.class.path"));
+               return SyntheticRepository.getInstance(cp);
+       }
+
+       protected JavaClass getClassFrom(File where, String clazzname) throws ClassNotFoundException {
+               SyntheticRepository repos = createRepos(where);
+               return repos.loadClass(clazzname);
+       }
+
+       // ///////////////////////////////////////
+       public static Test suite() {
+               return XMLBasedAjcTestCase.loadSuite(SanityTests.class);
+       }
+
+       protected File getSpecFile() {
+               return new File("../tests/src/org/aspectj/systemtest/ajc160/sanity-tests.xml");
+       }
+
 }
index 151108e7a42528a00965b00ec6b4e74fd6a5936b..25e323f1bfe9601bc3a9ec64dc42dfef941eb67e 100644 (file)
@@ -18,6 +18,24 @@ import org.aspectj.testing.XMLBasedAjcTestCase;
 
 public class Ajc169Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
 
+       public void testClassFileSize_312839_1() {
+               runTest("class file size - 1");
+               // 2531 (0x404): 1.6.9.M2 size of Class.class
+               // 2494 (0x3DF): first little stab, compressing aspectnames attached to type mungers
+               // 2370 (0x363): changed read/write sourcelocation to write path rather than File object:
+               // 2358 (0x357): aspects affecting type compressed (weaverstate reweavable info)
+               // 2102 (0x257): changed read/write sourcelocation in type munger to NOT use object streams
+               // 2053 (0x1EF): changed path in sourcelocation read/write to be constant pool (so shared between both mungers)
+               // 2019: changed resolvedMemberImpl name/signature to be compressed refs
+               // 1954 (0x18C)
+
+               // Aspect size (X.class) down from 6459 to 4722
+               // 4551: changed exact type pattern writing to use constant pool, and
+               // changed typepatternlist to not both writing/reading location
+               
+               // TODO actually test something :)
+       }
+
        // control test - weaves everything
        public void testScopingLTW_122460_1() {
                runTest("scoping ltw - 1");
index 63fadedaf54055d3f44c7a2c5af625a2c2f6424b..b76de13b72fe4f5fe182c74833956d2202c7f280 100644 (file)
@@ -2,6 +2,15 @@
 
 <suite>
 
+  <ajc-test dir="bugs169/pr312839/one" title="class file size - 1">
+     <compile files="Class.java X.aj" options="-1.5"/>
+     <run class="com.wibble.foo.Class">
+       <stdout>
+         <line text="Hello Andy"/>
+       </stdout>
+     </run>
+  </ajc-test>
+  
   <ajc-test dir="bugs169/pr122460/one" title="scoping ltw - 3">
      <compile files="A.java" options="-1.5 -Xlint:ignore" outjar="aspects.jar"/>
      <compile files="Code.java Runner.java"/>
index b37a2f79d123615c892e4dcb0353a8103956c57e..831b61462a6624b09029559318cb24a9d4e0f336 100644 (file)
@@ -482,7 +482,8 @@ public class MultiProjectIncrementalTests extends AbstractMultiProjectIncrementa
                alter(p, "inc1");
                build(p);
                // error is: inter-type declaration from X conflicts with existing member: void A.<init>()
-               List ms = getErrorMessages(p);
+               // List ms =
+               getErrorMessages(p);
                assertEquals(4, getErrorMessages(p).size());
                // Why 4 errors? I believe the problem is:
                // 2 errors are reported when there is a clash - one against the aspect, one against the affected target type.