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");
+ }
+
}