diff options
-rw-r--r-- | ajde/testdata/bug-36071a/input1.jar | bin | 1489 -> 1895 bytes | |||
-rw-r--r-- | ajde/testdata/bug-36071a/input2.jar | bin | 153 -> 162 bytes | |||
-rw-r--r-- | ajde/testsrc/org/aspectj/ajde/ResourceCopyTestCase.java | 45 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java | 22 |
4 files changed, 29 insertions, 38 deletions
diff --git a/ajde/testdata/bug-36071a/input1.jar b/ajde/testdata/bug-36071a/input1.jar Binary files differindex 83abbbaa1..cc7183fdd 100644 --- a/ajde/testdata/bug-36071a/input1.jar +++ b/ajde/testdata/bug-36071a/input1.jar diff --git a/ajde/testdata/bug-36071a/input2.jar b/ajde/testdata/bug-36071a/input2.jar Binary files differindex d55b84dfe..ff8b20a65 100644 --- a/ajde/testdata/bug-36071a/input2.jar +++ b/ajde/testdata/bug-36071a/input2.jar diff --git a/ajde/testsrc/org/aspectj/ajde/ResourceCopyTestCase.java b/ajde/testsrc/org/aspectj/ajde/ResourceCopyTestCase.java index 016ebef92..bd02c18db 100644 --- a/ajde/testsrc/org/aspectj/ajde/ResourceCopyTestCase.java +++ b/ajde/testsrc/org/aspectj/ajde/ResourceCopyTestCase.java @@ -61,9 +61,7 @@ public class ResourceCopyTestCase extends AjdeTestCase { File outjar = openFile(outjarName); ideManager.getProjectProperties().setOutJar(outjar.getAbsolutePath()); assertTrue("Build failed",doSynchronousBuild("config2.lst")); - assertFalse("No build warnings",ideManager.getCompilationSourceLineTasks().isEmpty()); - List msgs = NullIdeManager.getIdeManager().getCompilationSourceLineTasks(); - assertTrue("Wrong message",((NullIdeTaskListManager.SourceLineTask)msgs.get(0)).message.getMessage().startsWith("manifest not copied: ")); + assertTrue("Build warnings",ideManager.getCompilationSourceLineTasks().isEmpty()); compareJars(injar1,"src",outjar); } @@ -76,10 +74,11 @@ public class ResourceCopyTestCase extends AjdeTestCase { ideManager.getProjectProperties().setInJars(injars); File outjar = openFile(outjarName); ideManager.getProjectProperties().setOutJar(outjar.getAbsolutePath()); - assertFalse("Build should have failed",doSynchronousBuild("config2.lst")); - assertFalse("No build errors",ideManager.getCompilationSourceLineTasks().isEmpty()); + assertTrue("Build should have suceeded",doSynchronousBuild("config2.lst")); + assertFalse("Build warnings for duplicate resource expected",ideManager.getCompilationSourceLineTasks().isEmpty()); List msgs = NullIdeManager.getIdeManager().getCompilationSourceLineTasks(); - assertTrue("Wrong message",((NullIdeTaskListManager.SourceLineTask)msgs.get(1)).message.getMessage().startsWith("duplicate resource: ")); + assertTrue("Wrong message",((NullIdeTaskListManager.SourceLineTask)msgs.get(0)).message.getMessage().startsWith("duplicate resource: ")); + compareJars(injar1,"src",outjar); } public void testSrcToOutjar () { @@ -95,9 +94,7 @@ public class ResourceCopyTestCase extends AjdeTestCase { injars.add(injar1); ideManager.getProjectProperties().setInJars(injars); assertTrue("Build failed",doSynchronousBuild("config2.lst")); - assertFalse("No build warnings",ideManager.getCompilationSourceLineTasks().isEmpty()); - List msgs = NullIdeManager.getIdeManager().getCompilationSourceLineTasks(); - assertTrue("Wrong message",((NullIdeTaskListManager.SourceLineTask)msgs.get(0)).message.getMessage().startsWith("manifest not copied: ")); + assertTrue("Build warnings",ideManager.getCompilationSourceLineTasks().isEmpty()); compareInjarsToBin(injar1,"src","bin"); } @@ -114,10 +111,10 @@ public class ResourceCopyTestCase extends AjdeTestCase { for (int i = 0; i < toResources.length; i++) { String fileName = FileUtil.normalizedPath(toResources[i],binBase); boolean b = resources.remove(fileName); - assertTrue("Extraneous resoures:" + fileName,b); + assertTrue("Extraneous resources: " + fileName,b); } - assertTrue("Missing resources:" + resources.toString(), resources.isEmpty()); + assertTrue("Missing resources: " + resources.toString(), resources.isEmpty()); } /* @@ -138,10 +135,10 @@ public class ResourceCopyTestCase extends AjdeTestCase { String fileName = entry.getName(); if (!fileName.endsWith(".class")) { - /* Ensure we didn't copy any JAR manifests */ - if (fileName.toLowerCase().startsWith("meta-inf")) { + /* Ensure we copied right JAR manifest */ + if (fileName.equalsIgnoreCase("meta-inf/Manifest.mf")) { byte[] outManifest = FileUtil.readAsByteArray(outjar); - assertFalse("Manifest has been copied",Arrays.equals(inManifest,outManifest)); + assertTrue("Wrong manifest has been copied",Arrays.equals(inManifest,outManifest)); } boolean b = resources.remove(fileName); @@ -179,7 +176,7 @@ public class ResourceCopyTestCase extends AjdeTestCase { } outjar.close(); - assertTrue("Missing resources:" + resources.toString(), resources.isEmpty()); + assertTrue("Missing resources: " + resources.toString(), resources.isEmpty()); } catch (IOException ex) { fail(ex.toString()); @@ -202,16 +199,16 @@ public class ResourceCopyTestCase extends AjdeTestCase { for (int i = 0; i < toResources.length; i++) { String fileName = FileUtil.normalizedPath(toResources[i],binBase); - /* Ensure we didn't copy any JAR manifests */ - if (fileName.toLowerCase().startsWith("meta-inf")) { + /* Ensure we copied the right JAR manifest */ + if (fileName.equalsIgnoreCase("meta-inf/Manifest.mf")) { byte[] outManifest = FileUtil.readAsByteArray(toResources[i]); - assertFalse("Manifest has been copied",Arrays.equals(inManifest,outManifest)); + assertTrue("Wrong manifest has been copied",Arrays.equals(inManifest,outManifest)); } boolean b = resources.remove(fileName); - assertTrue("Extraneous resoures:" + fileName,b); + assertTrue("Extraneous resources: " + fileName,b); } - assertTrue("Missing resources:" + resources.toString(), resources.isEmpty()); + assertTrue("Missing resources: " + resources.toString(), resources.isEmpty()); } catch (IOException ex) { fail(ex.toString()); @@ -237,15 +234,13 @@ public class ResourceCopyTestCase extends AjdeTestCase { ZipEntry entry; while (null != (entry = injar.getNextEntry())) { String fileName = entry.getName(); - if (!fileName.endsWith(".class")) { + if (!entry.isDirectory() && !fileName.endsWith(".class")) { /* JAR manifests shouldn't be copied */ - if (fileName.toLowerCase().startsWith("meta-inf")) { + if (fileName.equalsIgnoreCase("meta-inf/Manifest.mf")) { manifest = FileUtil.readAsByteArray(injar); } - else { - resources.add(fileName); - } + resources.add(fileName); } injar.closeEntry(); } diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java b/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java index 9730bbdec..51b5333ed 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java @@ -128,16 +128,9 @@ public class BcelWeaver implements IWeaver { this.addClassFile(classFile); } else if (!entry.isDirectory()) { -// System.err.println("? addJarFile() filename='" + filename + "'"); - - /* Don't copy JAR manifests */ - if (filename.toLowerCase().startsWith("meta-inf")) { - world.showMessage(IMessage.WARNING, "manifest not copied: '" + filename + - "' in JAR '" + inFile + "'", null, null); - } - else { - addResource(filename,classFile); - } + + /* bug-44190 Copy meta-data */ + addResource(filename,classFile); } inStream.closeEntry(); @@ -179,9 +172,12 @@ public class BcelWeaver implements IWeaver { } public void addResource (String name, UnwovenClassFile resourceFile) { - Object previous = resources.put(name, resourceFile); - if (null != previous) { - world.showMessage(IMessage.ERROR, "duplicate resource: '" + name + "'", + /* bug-44190 Change error to warning and copy first resource */ + if (!resources.containsKey(name)) { + resources.put(name, resourceFile); + } + else { + world.showMessage(IMessage.WARNING, "duplicate resource: '" + name + "'", null, null); } } |