java.lang.IllegalArgumentException in SignatureReader for method return an Optional Stream
Following exception stack trace
java.lang.IllegalArgumentException at org.objectweb.asm.signature.SignatureReader.parseType(SignatureReader.java:249) at org.objectweb.asm.signature.SignatureReader.accept(SignatureReader.java:114) at org.apache.maven.shared.dependency.analyzer.asm.DefaultClassVisitor.addSignature(DefaultClassVisitor.java:153) at org.apache.maven.shared.dependency.analyzer.asm.DefaultClassVisitor.visitMethod(DefaultClassVisitor.java:133) at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1353) at org.objectweb.asm.ClassReader.accept(ClassReader.java:744) at org.objectweb.asm.ClassReader.accept(ClassReader.java:424) at org.apache.maven.shared.dependency.analyzer.asm.DependencyClassFileVisitor.visitClass(DependencyClassFileVisitor.java:71) at org.apache.maven.shared.dependency.analyzer.asm.ResultCollectorTest.getDependencies(ResultCollectorTest.java:38) at org.apache.maven.shared.dependency.analyzer.asm.ResultCollectorTest.testClassWithStreamAndOptional(ResultCollectorTest.java:69)
is thrown for class
` package pkg;
import java.io.Serializable; import java.util.Optional; import java.util.stream.Stream;
public class CUnderTest {
public Stream<Serializable> doMyStuff() {
Stream<Serializable> s = Stream.empty();
return Optional.ofNullable(s).orElseGet(Stream::of);
}
} `
Expected Behavior
no exception is thrown and signature for '()+Ljava/util/stream/Stream<Ljava/io/Serializable;>;' parsing works
Current Behavior
IllegalArgumentException is thrown. The signature '()+Ljava/util/stream/Stream<Ljava/io/Serializable;>;' contains a + which is not handled correctly in the method org.objectweb.asm.signature.SignatureReader.parseType(String, int, SignatureVisitor)
Steps to Reproduce
Extend the test class in org.apache.maven.shared.dependency.analyzer.asm.ResultCollectorTest of https://github.com/apache/maven-dependency-analyzer.git with following test:
@Test public void testClassWithStreamAndOptional() throws IOException { Set<String> dependencies = getDependencies(CUnderTest.class); assertThat(dependencies).contains("java.util.stream.Stream"); }