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

slachiewicz pushed a commit to branch MDEP-679v2
in repository https://gitbox.apache.org/repos/asf/maven-dependency-analyzer.git

commit f83f64e6c24d84948a0069ea00323a2e186a8627
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 1e30726..7bb2748 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;
@@ -243,6 +245,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 884d734..0ef7ec7 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
@@ -33,6 +33,10 @@ import org.apache.maven.shared.test.plugin.RepositoryTool;
 import org.apache.maven.shared.test.plugin.TestToolsException;
 import org.codehaus.plexus.PlexusTestCase;
 import org.junit.Assume;
+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;
@@ -50,6 +54,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
 {
@@ -64,7 +69,8 @@ public class DefaultProjectDependencyAnalyzerTest
     /*
      * @see org.codehaus.plexus.PlexusTestCase#setUp()
      */
-    protected void setUp()
+    @Before
+    public void setUp()
         throws Exception
     {
         super.setUp();
@@ -83,8 +89,7 @@ public class DefaultProjectDependencyAnalyzerTest
         analyzer = (ProjectDependencyAnalyzer) lookup( 
ProjectDependencyAnalyzer.ROLE );
     }
 
-    // tests ------------------------------------------------------------------
-
+    @Test
     public void testPom()
         throws TestToolsException, ProjectDependencyAnalyzerException
     {
@@ -99,6 +104,7 @@ public class DefaultProjectDependencyAnalyzerTest
         assertEquals( expectedAnalysis, actualAnalysis );
     }
 
+    @Test
     public void testJarWithNoDependencies()
         throws TestToolsException, ProjectDependencyAnalyzerException
     {
@@ -113,6 +119,7 @@ public class DefaultProjectDependencyAnalyzerTest
         assertEquals( expectedAnalysis, actualAnalysis );
     }
 
+    @Test
     public void testJava8methodRefs()
         throws TestToolsException, ProjectDependencyAnalyzerException
     {
@@ -139,6 +146,7 @@ public class DefaultProjectDependencyAnalyzerTest
         assertEquals( expectedAnalysis, actualAnalysis );
     }
 
+    @Test
     public void testInlinedStaticReference()
         throws TestToolsException, ProjectDependencyAnalyzerException
     {
@@ -164,6 +172,7 @@ public class DefaultProjectDependencyAnalyzerTest
         assertEquals( expectedAnalysis, actualAnalysis );
     }
 
+    @Test
     public void testJarWithCompileDependency()
         throws TestToolsException, ProjectDependencyAnalyzerException
     {
@@ -189,6 +198,7 @@ public class DefaultProjectDependencyAnalyzerTest
         assertEquals( expectedAnalysis, actualAnalysis );
     }
 
+    @Test
     public void testForceDeclaredDependenciesUsage()
         throws TestToolsException, ProjectDependencyAnalyzerException
     {
@@ -223,6 +233,7 @@ public class DefaultProjectDependencyAnalyzerTest
         }
     }
 
+    @Test
     public void testJarWithTestDependency()
         throws TestToolsException, ProjectDependencyAnalyzerException
     {
@@ -254,6 +265,7 @@ public class DefaultProjectDependencyAnalyzerTest
         assertEquals( expectedAnalysis, actualAnalysis );
     }
 
+    @Test
     public void testJarWithXmlTransitiveDependency()
         throws TestToolsException, ProjectDependencyAnalyzerException
     {
@@ -273,6 +285,7 @@ public class DefaultProjectDependencyAnalyzerTest
         // assertEquals( expectedAnalysis, actualAnalysis );
     }
 
+    @Test
     public void testJarWithCompileScopedTestDependency()
             throws TestToolsException, ProjectDependencyAnalyzerException
     {
@@ -306,6 +319,7 @@ public class DefaultProjectDependencyAnalyzerTest
         assertEquals( expectedAnalysis, actualAnalysis );
     }
 
+    @Test
     public void testJarWithRuntimeScopedTestDependency() throws 
TestToolsException, ProjectDependencyAnalyzerException
     {
         // We can't effectively analyze runtime dependencies at this time
@@ -338,6 +352,7 @@ public class DefaultProjectDependencyAnalyzerTest
         assertEquals( expectedAnalysis, actualAnalysis );
     }
 
+    @Test
     public void testMultimoduleProject()
         throws TestToolsException, ProjectDependencyAnalyzerException
     {
@@ -368,6 +383,7 @@ public class DefaultProjectDependencyAnalyzerTest
         assertEquals( expectedAnalysis, actualAnalysis );
     }
 
+    @Test
     public void testTypeUseAnnotationDependency()
             throws TestToolsException, ProjectDependencyAnalyzerException
     {
@@ -395,6 +411,7 @@ public class DefaultProjectDependencyAnalyzerTest
         assertEquals( expectedAnalysis, actualAnalysis );
     }
 
+    @Test
     public void testTypeUseAnnotationDependencyOnLocalVariable()
             throws TestToolsException, ProjectDependencyAnalyzerException
     {
@@ -445,6 +462,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";
+    }
+}

Reply via email to