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 <[email protected]> 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:[email protected]">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"; + } +}
