You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2021/04/08 20:34:51 UTC
[maven-dependency-analyzer] 02/02: [MDEP-679] Should not include
string literals when parsing references
This is an automated email from the ASF dual-hosted git repository.
slachiewicz pushed a commit to branch MDEP-679
in repository https://gitbox.apache.org/repos/asf/maven-dependency-analyzer.git
commit 947f293902e80f19c8b8a8818cd4bb2982660be1
Author: John Lin <jo...@gmail.com>
AuthorDate: Sat Mar 21 10:01:11 2020 +0800
[MDEP-679] Should not include string literals when parsing references
Closes #7
---
.../analyzer/asm/ConstantPoolParser.java | 9 ++++-
.../DefaultProjectDependencyAnalyzerTest.java | 41 ++++++++++++++++++++--
.../resources/jarWithClassInUnnamedPackage/pom.xml | 37 +++++++++++++++++++
.../jarWithClassInUnnamedPackage/project1/pom.xml | 32 +++++++++++++++++
.../project1/src/main/java/coffee.java | 26 ++++++++++++++
.../jarWithClassInUnnamedPackage/project2/pom.xml | 40 +++++++++++++++++++++
.../project2/src/main/java/project2/Project.java | 28 +++++++++++++++
7 files changed, 209 insertions(+), 4 deletions(-)
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 0489a1a..77ff1f6 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
@@ -126,7 +126,6 @@ public class ConstantPoolParser
stringConstants.put( ix, decodeString( buf ) );
continue;
case CONSTANT_CLASS:
- case CONSTANT_STRING:
case CONSTANT_METHOD_TYPE:
classes.add( (int) buf.getChar() );
break;
@@ -150,6 +149,9 @@ public class ConstantPoolParser
consumeLong( buf );
ix++;
break;
+ case CONSTANT_STRING:
+ consumeString( buf );
+ break;
case CONSTANT_METHODHANDLE:
consumeMethodHandle( buf );
break;
@@ -231,6 +233,11 @@ public class ConstantPoolParser
buf.getLong();
}
+ private static void consumeString( ByteBuffer buf )
+ {
+ buf.getChar();
+ }
+
private static void consumeMethodHandle( ByteBuffer buf )
{
buf.get();
diff --git a/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzerTest.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzerTest.java
index cefd20e..6f6d532 100644
--- a/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzerTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzerTest.java
@@ -32,6 +32,10 @@ import org.apache.maven.shared.test.plugin.ProjectTool;
import org.apache.maven.shared.test.plugin.RepositoryTool;
import org.apache.maven.shared.test.plugin.TestToolsException;
import org.codehaus.plexus.PlexusTestCase;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
import java.io.File;
import java.util.Arrays;
@@ -49,6 +53,7 @@ import static org.apache.commons.lang3.SystemUtils.isJavaVersionAtLeast;
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
* @see DefaultProjectDependencyAnalyzer
*/
+@RunWith( JUnit4.class )
public class DefaultProjectDependencyAnalyzerTest
extends PlexusTestCase
{
@@ -63,7 +68,8 @@ public class DefaultProjectDependencyAnalyzerTest
/*
* @see org.codehaus.plexus.PlexusTestCase#setUp()
*/
- protected void setUp()
+ @Before
+ public void setUp()
throws Exception
{
super.setUp();
@@ -82,8 +88,7 @@ public class DefaultProjectDependencyAnalyzerTest
analyzer = (ProjectDependencyAnalyzer) lookup( ProjectDependencyAnalyzer.ROLE );
}
- // tests ------------------------------------------------------------------
-
+ @Test
public void testPom()
throws TestToolsException, ProjectDependencyAnalyzerException
{
@@ -98,6 +103,7 @@ public class DefaultProjectDependencyAnalyzerTest
assertEquals( expectedAnalysis, actualAnalysis );
}
+ @Test
public void testJarWithNoDependencies()
throws TestToolsException, ProjectDependencyAnalyzerException
{
@@ -112,6 +118,7 @@ public class DefaultProjectDependencyAnalyzerTest
assertEquals( expectedAnalysis, actualAnalysis );
}
+ @Test
public void testJava8methodRefs()
throws TestToolsException, ProjectDependencyAnalyzerException
{
@@ -138,6 +145,7 @@ public class DefaultProjectDependencyAnalyzerTest
assertEquals( expectedAnalysis, actualAnalysis );
}
+ @Test
public void testInlinedStaticReference()
throws TestToolsException, ProjectDependencyAnalyzerException
{
@@ -163,6 +171,7 @@ public class DefaultProjectDependencyAnalyzerTest
assertEquals( expectedAnalysis, actualAnalysis );
}
+ @Test
public void testJarWithCompileDependency()
throws TestToolsException, ProjectDependencyAnalyzerException
{
@@ -188,6 +197,7 @@ public class DefaultProjectDependencyAnalyzerTest
assertEquals( expectedAnalysis, actualAnalysis );
}
+ @Test
public void testForceDeclaredDependenciesUsage()
throws TestToolsException, ProjectDependencyAnalyzerException
{
@@ -222,6 +232,7 @@ public class DefaultProjectDependencyAnalyzerTest
}
}
+ @Test
public void testJarWithTestDependency()
throws TestToolsException, ProjectDependencyAnalyzerException
{
@@ -253,6 +264,7 @@ public class DefaultProjectDependencyAnalyzerTest
assertEquals( expectedAnalysis, actualAnalysis );
}
+ @Test
public void testJarWithXmlTransitiveDependency()
throws TestToolsException, ProjectDependencyAnalyzerException
{
@@ -272,6 +284,7 @@ public class DefaultProjectDependencyAnalyzerTest
// assertEquals( expectedAnalysis, actualAnalysis );
}
+ @Test
public void testJarWithCompileScopedTestDependency()
throws TestToolsException, ProjectDependencyAnalyzerException
{
@@ -305,6 +318,7 @@ public class DefaultProjectDependencyAnalyzerTest
assertEquals( expectedAnalysis, actualAnalysis );
}
+ @Test
public void testJarWithRuntimeScopedTestDependency() throws TestToolsException, ProjectDependencyAnalyzerException
{
// We can't effectively analyze runtime dependencies at this time
@@ -337,6 +351,7 @@ public class DefaultProjectDependencyAnalyzerTest
assertEquals( expectedAnalysis, actualAnalysis );
}
+ @Test
public void testMultimoduleProject()
throws TestToolsException, ProjectDependencyAnalyzerException
{
@@ -367,6 +382,7 @@ public class DefaultProjectDependencyAnalyzerTest
assertEquals( expectedAnalysis, actualAnalysis );
}
+ @Test
public void testTypeUseAnnotationDependency()
throws TestToolsException, ProjectDependencyAnalyzerException
{
@@ -394,6 +410,7 @@ public class DefaultProjectDependencyAnalyzerTest
assertEquals( expectedAnalysis, actualAnalysis );
}
+ @Test
public void testTypeUseAnnotationDependencyOnLocalVariable()
throws TestToolsException, ProjectDependencyAnalyzerException
{
@@ -421,6 +438,24 @@ public class DefaultProjectDependencyAnalyzerTest
assertEquals( expectedAnalysis, actualAnalysis );
}
+ @Test
+ public void testJarWithClassInUnnamedPackage()
+ throws TestToolsException, ProjectDependencyAnalyzerException
+ {
+ compileProject( "jarWithClassInUnnamedPackage/pom.xml" );
+
+ MavenProject project2 = getProject( "jarWithClassInUnnamedPackage/project2/pom.xml" );
+
+ ProjectDependencyAnalysis actualAnalysis = analyzer.analyze( project2 );
+
+ Artifact project1 = createArtifact( "org.apache.maven.shared.dependency-analyzer.tests",
+ "jarWithClassInUnnamedPackage1", "jar", "1.0", "compile" );
+ Set<Artifact> unusedDeclaredArtifacts = Collections.singleton( project1 );
+ ProjectDependencyAnalysis expectedAnalysis = new ProjectDependencyAnalysis( null, null, unusedDeclaredArtifacts );
+
+ assertEquals( expectedAnalysis, actualAnalysis );
+ }
+
// private methods --------------------------------------------------------
private void compileProject( String pomPath )
diff --git a/src/test/resources/jarWithClassInUnnamedPackage/pom.xml b/src/test/resources/jarWithClassInUnnamedPackage/pom.xml
new file mode 100644
index 0000000..6fc1f26
--- /dev/null
+++ b/src/test/resources/jarWithClassInUnnamedPackage/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ 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.
+ -->
+
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.shared.dependency-analyzer.tests</groupId>
+ <artifactId>jarWithClassInUnnamedPackage</artifactId>
+ <packaging>pom</packaging>
+ <version>1.0</version>
+
+ <modules>
+ <module>project1</module>
+ <module>project2</module>
+ </modules>
+</project>
diff --git a/src/test/resources/jarWithClassInUnnamedPackage/project1/pom.xml b/src/test/resources/jarWithClassInUnnamedPackage/project1/pom.xml
new file mode 100644
index 0000000..a95a372
--- /dev/null
+++ b/src/test/resources/jarWithClassInUnnamedPackage/project1/pom.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ 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.
+ -->
+
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.shared.dependency-analyzer.tests</groupId>
+ <artifactId>jarWithClassInUnnamedPackage1</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project>
diff --git a/src/test/resources/jarWithClassInUnnamedPackage/project1/src/main/java/coffee.java b/src/test/resources/jarWithClassInUnnamedPackage/project1/src/main/java/coffee.java
new file mode 100644
index 0000000..3649938
--- /dev/null
+++ b/src/test/resources/jarWithClassInUnnamedPackage/project1/src/main/java/coffee.java
@@ -0,0 +1,26 @@
+/*
+ * 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 coffee
+{
+ public coffee()
+ {
+ // no-op
+ }
+}
diff --git a/src/test/resources/jarWithClassInUnnamedPackage/project2/pom.xml b/src/test/resources/jarWithClassInUnnamedPackage/project2/pom.xml
new file mode 100644
index 0000000..c2aad12
--- /dev/null
+++ b/src/test/resources/jarWithClassInUnnamedPackage/project2/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ 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.
+ -->
+
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.shared.dependency-analyzer.tests</groupId>
+ <artifactId>jarWithClassInUnnamedPackage2</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.shared.dependency-analyzer.tests</groupId>
+ <artifactId>jarWithClassInUnnamedPackage1</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/src/test/resources/jarWithClassInUnnamedPackage/project2/src/main/java/project2/Project.java b/src/test/resources/jarWithClassInUnnamedPackage/project2/src/main/java/project2/Project.java
new file mode 100644
index 0000000..daea53a
--- /dev/null
+++ b/src/test/resources/jarWithClassInUnnamedPackage/project2/src/main/java/project2/Project.java
@@ -0,0 +1,28 @@
+package project2;
+
+/*
+ * 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 Project
+{
+ public Project()
+ {
+ String drink = "coffee";
+ }
+}