You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by ja...@apache.org on 2018/05/12 13:06:20 UTC

ant git commit: Fix parsing of module-info.class, when being analyzed by "depend" task

Repository: ant
Updated Branches:
  refs/heads/master cb92815cb -> d0f9c2e12


Fix parsing of module-info.class, when being analyzed by "depend" task


Project: http://git-wip-us.apache.org/repos/asf/ant/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/d0f9c2e1
Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/d0f9c2e1
Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/d0f9c2e1

Branch: refs/heads/master
Commit: d0f9c2e121e2b3a18b679705c2f2164426e7e6fb
Parents: cb92815
Author: Jaikiran Pai <ja...@apache.org>
Authored: Sat May 12 18:35:55 2018 +0530
Committer: Jaikiran Pai <ja...@apache.org>
Committed: Sat May 12 18:35:55 2018 +0530

----------------------------------------------------------------------
 WHATSNEW                                        |  5 +++
 .../taskdefs/optional/depend/depend.xml         | 11 +++++++
 .../taskdefs/optional/depend/src6/Foo.java      | 22 +++++++++++++
 .../optional/depend/src6/module-info.java       |  3 ++
 .../depend/constantpool/ConstantPoolEntry.java  |  6 ++++
 .../depend/constantpool/ModuleCPInfo.java       | 34 ++++++++++++++++++++
 .../taskdefs/optional/depend/DependTest.java    | 14 ++++++++
 7 files changed, 95 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant/blob/d0f9c2e1/WHATSNEW
----------------------------------------------------------------------
diff --git a/WHATSNEW b/WHATSNEW
index e5baae1..1b78144 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -31,6 +31,11 @@ Fixed bugs:
  * <cab> died with a NullPointerException since Ant 1.10.2.
    Bugzilla Report 62335
 
+ * The <depend> task would fail with 
+   "java.lang.ClassFormatError: Invalid Constant Pool entry Type 19" while
+   parsing a module-info.class. This is now fixed.
+   Bug reported by Simon IJskes https://issues.apache.org/jira/browse/NETBEANS-781
+
 Other changes:
 --------------
 

http://git-wip-us.apache.org/repos/asf/ant/blob/d0f9c2e1/src/etc/testcases/taskdefs/optional/depend/depend.xml
----------------------------------------------------------------------
diff --git a/src/etc/testcases/taskdefs/optional/depend/depend.xml b/src/etc/testcases/taskdefs/optional/depend/depend.xml
index 8465bb0..26260a7 100644
--- a/src/etc/testcases/taskdefs/optional/depend/depend.xml
+++ b/src/etc/testcases/taskdefs/optional/depend/depend.xml
@@ -33,6 +33,11 @@
   <property name="src3.dir" value="src3"/>
   <property name="src4.dir" value="src4"/>
   <property name="src5.dir" value="src5"/>
+  <property name="src6.dir" value="src6"/>
+
+  <condition property="atleast.java9">
+    <javaversion atleast="9"/>
+  </condition>
 
   <target name="help">
     <echo>This buildfile is used as part of Ant's test suite.</echo>
@@ -193,4 +198,10 @@
     <depend srcdir="${tempsrc.dir}" destdir="${classes.dir}" closure="yes"/>
     <fileset id="result" dir="${classes.dir}"/>
   </target>
+
+  <target name="testmoduleinfo" if="${atleast.java9}">
+    <mkdir dir="${output}/java9"/>
+    <javac srcdir="${src6.dir}" destdir="${output}/java9" source="9" target="9"/>
+    <depend srcdir="${src6.dir}" destdir="${output}/java9"/>
+  </target>
 </project>

http://git-wip-us.apache.org/repos/asf/ant/blob/d0f9c2e1/src/etc/testcases/taskdefs/optional/depend/src6/Foo.java
----------------------------------------------------------------------
diff --git a/src/etc/testcases/taskdefs/optional/depend/src6/Foo.java b/src/etc/testcases/taskdefs/optional/depend/src6/Foo.java
new file mode 100644
index 0000000..a305cb0
--- /dev/null
+++ b/src/etc/testcases/taskdefs/optional/depend/src6/Foo.java
@@ -0,0 +1,22 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+public class Foo {
+    public static void main(final String[] args) {
+        System.out.println("foo");
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant/blob/d0f9c2e1/src/etc/testcases/taskdefs/optional/depend/src6/module-info.java
----------------------------------------------------------------------
diff --git a/src/etc/testcases/taskdefs/optional/depend/src6/module-info.java b/src/etc/testcases/taskdefs/optional/depend/src6/module-info.java
new file mode 100644
index 0000000..24e075d
--- /dev/null
+++ b/src/etc/testcases/taskdefs/optional/depend/src6/module-info.java
@@ -0,0 +1,3 @@
+module dummy {
+    requires java.base;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant/blob/d0f9c2e1/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPoolEntry.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPoolEntry.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPoolEntry.java
index b639fa9..ab66215 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPoolEntry.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPoolEntry.java
@@ -71,6 +71,9 @@ public abstract class ConstantPoolEntry {
     /** Tag value for InvokeDynamic entries*/
     public static final int CONSTANT_INVOKEDYNAMIC = 18;
 
+    /** Tag value for CONSTANT_Module_info entry */
+    public static final int CONSTANT_MODULEINFO = 19;
+
     /**
      * This entry's tag which identifies the type of this constant pool
      * entry.
@@ -162,6 +165,9 @@ public abstract class ConstantPoolEntry {
             case CONSTANT_INVOKEDYNAMIC:
                 cpInfo = new InvokeDynamicCPInfo();
                 break;
+            case CONSTANT_MODULEINFO:
+                cpInfo = new ModuleCPInfo();
+                break;
             default:
                 throw new ClassFormatError("Invalid Constant Pool entry Type "
                      + cpTag);

http://git-wip-us.apache.org/repos/asf/ant/blob/d0f9c2e1/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ModuleCPInfo.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ModuleCPInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ModuleCPInfo.java
new file mode 100644
index 0000000..f24bae2
--- /dev/null
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ModuleCPInfo.java
@@ -0,0 +1,34 @@
+package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
+
+import java.io.DataInputStream;
+import java.io.IOException;
+
+/**
+ * Represents the module info constant pool entry
+ */
+public class ModuleCPInfo extends ConstantCPInfo {
+
+    private int moduleNameIndex;
+    private String moduleName;
+
+    public ModuleCPInfo() {
+        super(CONSTANT_MODULEINFO, 1);
+    }
+
+    @Override
+    public void read(final DataInputStream cpStream) throws IOException {
+        this.moduleNameIndex = cpStream.readUnsignedShort();
+    }
+
+    @Override
+    public void resolve(final ConstantPool constantPool) {
+        this.moduleName = ((Utf8CPInfo) constantPool.getEntry(this.moduleNameIndex)).getValue();
+
+        super.resolve(constantPool);
+    }
+
+    @Override
+    public String toString() {
+        return "Module info Constant Pool Entry for " + this.moduleName + "[" + this.moduleNameIndex + "]";
+    }
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/d0f9c2e1/src/tests/junit/org/apache/tools/ant/taskdefs/optional/depend/DependTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/depend/DependTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/depend/DependTest.java
index 023c36b..e3919c1 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/depend/DependTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/depend/DependTest.java
@@ -27,7 +27,9 @@ import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.BuildFileRule;
 import org.apache.tools.ant.DirectoryScanner;
 import org.apache.tools.ant.FileUtilities;
+import org.apache.tools.ant.taskdefs.condition.JavaVersion;
 import org.apache.tools.ant.types.FileSet;
+import org.junit.Assume;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -194,4 +196,16 @@ public class DependTest {
                         .and(containsString("but has not been deleted because its source file could not be determined")));
     }
 
+    /**
+     * Tests that the depend task when run against a path containing a module-info.class (Java 9+ construct)
+     * doesn't run into error
+     */
+    @Test
+    public void testModuleInfo() {
+        final JavaVersion atLeastJava9 = new JavaVersion();
+        atLeastJava9.setAtLeast("9");
+        Assume.assumeTrue("Skipping test execution since Java version is lesser than 9", atLeastJava9.eval());
+        buildRule.executeTarget("testmoduleinfo");
+    }
+
 }