This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-dependency-analyzer.git


The following commit(s) were added to refs/heads/master by this push:
     new a9be307  [MSHARED-1247] java.lang.RuntimeException: Unknown constant 
pool type '17'
a9be307 is described below

commit a9be30788abbd413a02d42ff3bcf6df6b96ec4e6
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Fri Apr 28 08:47:48 2023 -0400

    [MSHARED-1247] java.lang.RuntimeException: Unknown constant pool type
    '17'
    
    [MSHARED-1247] java.lang.RuntimeException: Unknown constant pool type
    '17'
---
 .../dependency/analyzer/ClassFileVisitorUtils.java |   8 +++++-
 .../analyzer/asm/ConstantPoolParser.java           |  11 ++++++++
 .../analyzer/asm/ResultCollectorTest.java          |  14 +++++++++++
 .../analyzer/commons-bcel-issue362/Bcel362.class   | Bin 0 -> 903 bytes
 .../analyzer/commons-bcel-issue362/Bcel362.java    |  28 +++++++++++++++++++++
 5 files changed, 60 insertions(+), 1 deletion(-)

diff --git 
a/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtils.java
 
b/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtils.java
index 29cd9b5..b2211c3 100644
--- 
a/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtils.java
+++ 
b/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtils.java
@@ -94,7 +94,13 @@ public final class ClassFileVisitorUtils {
 
         for (Path path : classFiles) {
             try (InputStream in = Files.newInputStream(path)) {
-                visitClass(directory, path, in, visitor);
+                try {
+                    visitClass(directory, path, in, visitor);
+                } catch (RuntimeException e) {
+                    // visitClass throws RuntimeException
+                    throw new RuntimeException(
+                            String.format("%s from directory = %s, path = %s", 
e.getMessage(), directory, path), e);
+                }
             }
         }
     }
diff --git 
a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ConstantPoolParser.java
 
b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ConstantPoolParser.java
index 3c53701..1b7f0c6 100644
--- 
a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ConstantPoolParser.java
+++ 
b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ConstantPoolParser.java
@@ -85,6 +85,9 @@ public class ConstantPoolParser {
     /** Constant <code>CONSTANT_METHOD_TYPE=16</code> */
     public static final byte CONSTANT_METHOD_TYPE = 16;
 
+    /** Constant <code>CONSTANT_INVOKE=17</code> */
+    public static final byte CONSTANT_INVOKE = 17;
+
     /** Constant <code>CONSTANT_INVOKE_DYNAMIC=18</code> */
     public static final byte CONSTANT_INVOKE_DYNAMIC = 18;
 
@@ -156,6 +159,9 @@ public class ConstantPoolParser {
                 case CONSTANT_METHODHANDLE:
                     consumeMethodHandle(buf);
                     break;
+                case CONSTANT_INVOKE:
+                    consumeDynamic(buf);
+                    break;
                 case CONSTANT_INVOKE_DYNAMIC:
                     consumeInvokeDynamic(buf);
                     break;
@@ -260,6 +266,11 @@ public class ConstantPoolParser {
         buf.getChar();
     }
 
+    private static void consumeDynamic(ByteBuffer buf) {
+        buf.getChar(); // u2 bootstrap_method_attr_index;
+        buf.getChar(); // u2 name_and_type_index;
+    }
+
     private static void consumeInvokeDynamic(ByteBuffer buf) {
         buf.getChar();
         buf.getChar();
diff --git 
a/src/test/java/org/apache/maven/shared/dependency/analyzer/asm/ResultCollectorTest.java
 
b/src/test/java/org/apache/maven/shared/dependency/analyzer/asm/ResultCollectorTest.java
index 1796679..7cb376e 100644
--- 
a/src/test/java/org/apache/maven/shared/dependency/analyzer/asm/ResultCollectorTest.java
+++ 
b/src/test/java/org/apache/maven/shared/dependency/analyzer/asm/ResultCollectorTest.java
@@ -20,6 +20,9 @@ package org.apache.maven.shared.dependency.analyzer.asm;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.Set;
 
 import org.apache.maven.shared.dependency.analyzer.testcases.ArrayCases;
@@ -40,6 +43,17 @@ public class ResultCollectorTest {
         return visitor.getDependencies();
     }
 
+    @Test
+    public void testJava11Invoke() throws IOException {
+        String className = "issue362.Bcel362";
+        Path path = Paths.get(
+                
"src/test/resources/org/apache/maven/shared/dependency/analyzer/commons-bcel-issue362/Bcel362.class");
+        DependencyClassFileVisitor visitor = new DependencyClassFileVisitor();
+        try (InputStream is = Files.newInputStream(path)) {
+            visitor.visitClass(className, is);
+        }
+    }
+
     @Test
     public void testArrayCases() throws IOException {
         Set<String> dependencies = getDependencies(ArrayCases.class);
diff --git 
a/src/test/resources/org/apache/maven/shared/dependency/analyzer/commons-bcel-issue362/Bcel362.class
 
b/src/test/resources/org/apache/maven/shared/dependency/analyzer/commons-bcel-issue362/Bcel362.class
new file mode 100644
index 0000000..b1e1415
Binary files /dev/null and 
b/src/test/resources/org/apache/maven/shared/dependency/analyzer/commons-bcel-issue362/Bcel362.class
 differ
diff --git 
a/src/test/resources/org/apache/maven/shared/dependency/analyzer/commons-bcel-issue362/Bcel362.java
 
b/src/test/resources/org/apache/maven/shared/dependency/analyzer/commons-bcel-issue362/Bcel362.java
new file mode 100644
index 0000000..736dd6c
--- /dev/null
+++ 
b/src/test/resources/org/apache/maven/shared/dependency/analyzer/commons-bcel-issue362/Bcel362.java
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+
+package issue362;
+
+/**
+ * Compile to Java 11 byte code, then instrument with JaCoCo in order to add
+ * condy (constant dynamic) instructions
+ */
+public class Bcel362 {
+  public static void main(String[] args) {
+    System.out.println("Hello world!");
+  }
+}

Reply via email to