New Upstream Release - maven-dependency-analyzer
Ready changes
Summary
Merged new upstream version: 1.13.2 (was: 1.13.0).
Diff
diff --git a/.asf.yaml b/.asf.yaml
index 1f485c3..58bbfcd 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -23,3 +23,14 @@ github:
- build-management
- maven-shared
- maven
+ enabled_merge_buttons:
+ squash: true
+ merge: false
+ rebase: true
+ autolink_jira:
+ - MSHARED
+notifications:
+ commits: commits@maven.apache.org
+ issues: issues@maven.apache.org
+ pullrequests: issues@maven.apache.org
+ jira_options: link label comment
diff --git a/.github/workflows/maven-verify.yml b/.github/workflows/maven-verify.yml
index 0041346..dd80d36 100644
--- a/.github/workflows/maven-verify.yml
+++ b/.github/workflows/maven-verify.yml
@@ -25,5 +25,7 @@ jobs:
name: Verify
uses: apache/maven-gh-actions-shared/.github/workflows/maven-verify.yml@v3
with:
- maven-matrix: '[ "3.2.5", "3.8.6" ]'
- ff-maven: "3.8.6"
+ maven-matrix: '[ "3.2.5", "3.9.1" ]'
+ jdk-matrix: '[ "8", "11", "17", "20" ]'
+ ff-maven: '3.9.1'
+ ff-jdk: '17'
diff --git a/README.md b/README.md
index 7771b0c..297ed4f 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ Contributing to [Apache Maven Dependency Analyzer](https://maven.apache.org/shar
[![ASF Jira](https://img.shields.io/endpoint?url=https%3A%2F%2Fmaven.apache.org%2Fbadges%2Fasf_jira-MSHARED.json)][jira]
[![Apache License, Version 2.0, January 2004](https://img.shields.io/github/license/apache/maven.svg?label=License)][license]
[![Maven Central](https://img.shields.io/maven-central/v/org.apache.maven.shared/maven-dependency-analyzer.svg?label=Maven%20Central)](https://search.maven.org/artifact/org.apache.maven.shared/maven-dependency-analyzer)
-[![Reproducible Builds](https://img.shields.io/badge/Reproducible_Builds-ok-green?labelColor=blue)](https://github.com/jvm-repo-rebuild/reproducible-central#org.apache.maven.shared:maven-dependency-analyzer)
+[![Reproducible Builds](https://img.shields.io/badge/Reproducible_Builds-ok-green?labelColor=blue)](https://github.com/jvm-repo-rebuild/reproducible-central/blob/master/content/org/apache/maven/shared/maven-dependency-analyzer/README.md)
[![Jenkins Status](https://img.shields.io/jenkins/s/https/ci-maven.apache.org/job/Maven/job/maven-box/job/maven-dependency-analyzer/job/master.svg)][build]
[![Jenkins tests](https://img.shields.io/jenkins/t/https/ci-maven.apache.org/job/Maven/job/maven-box/job/maven-dependency-analyzer/job/master.svg)][test-results]
diff --git a/debian/changelog b/debian/changelog
index ee0b51c..a4fefbb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+maven-dependency-analyzer (1.13.2-1) UNRELEASED; urgency=low
+
+ * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk> Fri, 09 Jun 2023 15:43:00 -0000
+
maven-dependency-analyzer (1.13.0-1) unstable; urgency=medium
* Team upload.
diff --git a/pom.xml b/pom.xml
index b33ae85..36dd41b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,5 +1,5 @@
-<?xml version='1.0' encoding='UTF-8'?>
- <!--
+<?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
@@ -24,24 +24,22 @@
<parent>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-shared-components</artifactId>
- <version>37</version>
+ <version>39</version>
<relativePath />
</parent>
<artifactId>maven-dependency-analyzer</artifactId>
+ <version>1.13.2</version>
<packaging>jar</packaging>
- <version>1.13.0</version>
<name>Apache Maven Dependency Analyzer</name>
- <description>
- Analyzes the dependencies of a project for undeclared or unused artifacts.
- </description>
+ <description>Analyzes the dependencies of a project for undeclared or unused artifacts.</description>
<scm>
<connection>scm:git:https://gitbox.apache.org/repos/asf/maven-dependency-analyzer.git</connection>
<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/maven-dependency-analyzer.git</developerConnection>
+ <tag>maven-dependency-analyzer-1.13.2</tag>
<url>https://github.com/apache/maven-dependency-analyzer/tree/${project.scm.tag}</url>
- <tag>maven-dependency-analyzer-1.13.0</tag>
</scm>
<issueManagement>
<system>jira</system>
@@ -60,8 +58,11 @@
<properties>
<mavenVersion>3.2.5</mavenVersion>
+ <slf4jVersion>1.7.36</slf4jVersion>
<javaVersion>8</javaVersion>
- <project.build.outputTimestamp>2022-08-20T15:25:20Z</project.build.outputTimestamp>
+ <project.build.outputTimestamp>2023-04-30T22:19:36Z</project.build.outputTimestamp>
+ <!-- TODO check with next parent -->
+ <maven.plugin.tools.version>3.8.1</maven.plugin.tools.version>
</properties>
<dependencies>
@@ -76,6 +77,11 @@
<artifactId>maven-artifact</artifactId>
<version>${mavenVersion}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>${mavenVersion}</version>
+ </dependency>
<dependency>
<groupId>javax.inject</groupId>
@@ -83,36 +89,41 @@
<version>1</version>
</dependency>
- <dependency>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-utils</artifactId>
- <version>3.4.2</version>
- </dependency>
-
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
- <version>9.3</version>
+ <version>9.5</version>
</dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${slf4jVersion}</version>
+ </dependency>
- <!-- testing support -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
- <scope>test</scope>
</dependency>
+
+ <!-- testing support -->
<dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.13.2</version>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-api</artifactId>
+ <version>5.9.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
- <version>3.23.1</version>
+ <version>3.24.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <version>${slf4jVersion}</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -123,6 +134,16 @@
<groupId>org.eclipse.sisu</groupId>
<artifactId>sisu-maven-plugin</artifactId>
</plugin>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes combine.children="append">
+ <!-- binary class for unit test -->
+ <exclude>**/*.classx</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
</plugins>
</build>
@@ -134,15 +155,8 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-invoker-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>install</goal>
- <goal>integration-test</goal>
- <goal>verify</goal>
- </goals>
- </execution>
- </executions>
+ <!-- TODO check with next parent -->
+ <version>3.5.1</version>
<configuration>
<cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
<localRepositoryPath>target/local-repo</localRepositoryPath>
@@ -157,6 +171,15 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>install</goal>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
</plugin>
</plugins>
</build>
diff --git a/src/it/checkingNameWithTypeReferencesRequired/consumer/pom.xml b/src/it/checkingNameWithTypeReferencesRequired/consumer/pom.xml
new file mode 100644
index 0000000..bd64c28
--- /dev/null
+++ b/src/it/checkingNameWithTypeReferencesRequired/consumer/pom.xml
@@ -0,0 +1,38 @@
+<!--
+ ~ 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>example</groupId>
+ <artifactId>root</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>consumer</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>example</groupId>
+ <artifactId>provider</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>example</groupId>
+ <artifactId>library</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
diff --git a/src/it/checkingNameWithTypeReferencesRequired/consumer/src/main/java/consumer/ActualImplementationClass.java b/src/it/checkingNameWithTypeReferencesRequired/consumer/src/main/java/consumer/ActualImplementationClass.java
new file mode 100644
index 0000000..ffc3671
--- /dev/null
+++ b/src/it/checkingNameWithTypeReferencesRequired/consumer/src/main/java/consumer/ActualImplementationClass.java
@@ -0,0 +1,27 @@
+/*
+ * 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 consumer;
+
+import provider.AbstractBaseClass;
+
+public class ActualImplementationClass extends AbstractBaseClass
+{
+ private void doSomething() {
+ this.getObject();
+ }
+}
diff --git a/src/it/checkingNameWithTypeReferencesRequired/consumer/src/test/java/consumer/ActualImplementationClassTest.java b/src/it/checkingNameWithTypeReferencesRequired/consumer/src/test/java/consumer/ActualImplementationClassTest.java
new file mode 100644
index 0000000..8b3735a
--- /dev/null
+++ b/src/it/checkingNameWithTypeReferencesRequired/consumer/src/test/java/consumer/ActualImplementationClassTest.java
@@ -0,0 +1,27 @@
+/*
+ * 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 consumer;
+
+import library.LibraryObject;
+
+public class ActualImplementationClassTest
+{
+ void someTest() {
+ new LibraryObject();
+ }
+}
diff --git a/src/it/checkingNameWithTypeReferencesRequired/library/pom.xml b/src/it/checkingNameWithTypeReferencesRequired/library/pom.xml
new file mode 100644
index 0000000..3870152
--- /dev/null
+++ b/src/it/checkingNameWithTypeReferencesRequired/library/pom.xml
@@ -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.
+ --><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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>example</groupId>
+ <artifactId>root</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>library</artifactId>
+</project>
\ No newline at end of file
diff --git a/src/it/checkingNameWithTypeReferencesRequired/library/src/main/java/library/LibraryObject.java b/src/it/checkingNameWithTypeReferencesRequired/library/src/main/java/library/LibraryObject.java
new file mode 100644
index 0000000..a8dd277
--- /dev/null
+++ b/src/it/checkingNameWithTypeReferencesRequired/library/src/main/java/library/LibraryObject.java
@@ -0,0 +1,23 @@
+/*
+ * 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 library;
+
+public class LibraryObject
+{
+
+}
diff --git a/src/it/checkingNameWithTypeReferencesRequired/pom.xml b/src/it/checkingNameWithTypeReferencesRequired/pom.xml
new file mode 100644
index 0000000..63f9376
--- /dev/null
+++ b/src/it/checkingNameWithTypeReferencesRequired/pom.xml
@@ -0,0 +1,53 @@
+<!--
+ ~ 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>example</groupId>
+ <artifactId>root</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <properties>
+ <maven.compiler.target>1.8</maven.compiler.target>
+ <maven.compiler.source>1.8</maven.compiler.source>
+ </properties>
+
+ <modules>
+ <module>consumer</module>
+ <module>provider</module>
+ <module>library</module>
+ </modules>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.shared.dependency-analyzer.tests</groupId>
+ <artifactId>maven-mock-plugin</artifactId>
+ <version>1.0</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>mock-analyze</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file
diff --git a/src/it/checkingNameWithTypeReferencesRequired/provider/pom.xml b/src/it/checkingNameWithTypeReferencesRequired/provider/pom.xml
new file mode 100644
index 0000000..6bb550a
--- /dev/null
+++ b/src/it/checkingNameWithTypeReferencesRequired/provider/pom.xml
@@ -0,0 +1,33 @@
+<!--
+ ~ 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>example</groupId>
+ <artifactId>root</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>provider</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>example</groupId>
+ <artifactId>library</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
diff --git a/src/it/checkingNameWithTypeReferencesRequired/provider/src/main/java/provider/AbstractBaseClass.java b/src/it/checkingNameWithTypeReferencesRequired/provider/src/main/java/provider/AbstractBaseClass.java
new file mode 100644
index 0000000..62e307e
--- /dev/null
+++ b/src/it/checkingNameWithTypeReferencesRequired/provider/src/main/java/provider/AbstractBaseClass.java
@@ -0,0 +1,27 @@
+/*
+ * 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 provider;
+
+import library.LibraryObject;
+
+public abstract class AbstractBaseClass
+{
+ protected LibraryObject getObject() {
+ return new LibraryObject();
+ }
+}
diff --git a/src/it/checkingNameWithTypeReferencesRequired/verify.groovy b/src/it/checkingNameWithTypeReferencesRequired/verify.groovy
new file mode 100644
index 0000000..0a0f57e
--- /dev/null
+++ b/src/it/checkingNameWithTypeReferencesRequired/verify.groovy
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+
+def analysis = new File( basedir, 'consumer/target/analysis.txt' ).text
+
+def expected = '''
+UsedDeclaredArtifacts:
+ example:provider:jar:0.0.1-SNAPSHOT:compile
+ example:library:jar:0.0.1-SNAPSHOT:compile
+
+UsedUndeclaredArtifactsWithClasses:
+
+UnusedDeclaredArtifacts:
+
+TestArtifactsWithNonTestScope:
+'''
+
+assert analysis == expected
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassAnalyzer.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassAnalyzer.java
index 0ba08df..679b4d6 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassAnalyzer.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassAnalyzer.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer;
import java.io.IOException;
import java.net.URL;
@@ -28,8 +27,7 @@ import java.util.Set;
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
-public interface ClassAnalyzer
-{
+public interface ClassAnalyzer {
/**
* <p>analyze.</p>
@@ -38,6 +36,5 @@ public interface ClassAnalyzer
* @return a {@link java.util.Set} object
* @throws java.io.IOException if any
*/
- Set<String> analyze( URL url )
- throws IOException;
+ Set<String> analyze(URL url) throws IOException;
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitor.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitor.java
index ffa87d5..27d1d1b 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitor.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitor.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer;
import java.io.InputStream;
@@ -26,13 +25,12 @@ import java.io.InputStream;
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
-public interface ClassFileVisitor
-{
+public interface ClassFileVisitor {
/**
* <p>visitClass.</p>
*
* @param className a {@link java.lang.String} object.
* @param in a {@link java.io.InputStream} object.
*/
- void visitClass( String className, InputStream in );
+ void visitClass(String className, InputStream in);
}
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 412b02a..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
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,134 +16,107 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
-
-import org.codehaus.plexus.util.DirectoryScanner;
+package org.apache.maven.shared.dependency.analyzer;
import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
* Utility to visit classes in a library given either as a jar file or an exploded directory.
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
-public final class ClassFileVisitorUtils
-{
+public final class ClassFileVisitorUtils {
- private ClassFileVisitorUtils()
- {
+ private ClassFileVisitorUtils() {
// private constructor for utility class
}
/**
- * <p>accept.</p>
- *
- * @param url a {@link java.net.URL} object.
- * @param visitor a {@link org.apache.maven.shared.dependency.analyzer.ClassFileVisitor} object.
- * @throws java.io.IOException if any.
+ * @param url a {@link java.net.URL} object
+ * @param visitor a {@link org.apache.maven.shared.dependency.analyzer.ClassFileVisitor} object
+ * @throws java.io.IOException if any
*/
- public static void accept( URL url, ClassFileVisitor visitor )
- throws IOException
- {
- if ( url.getPath().endsWith( ".jar" ) )
- {
- acceptJar( url, visitor );
- }
- else if ( url.getProtocol().equalsIgnoreCase( "file" ) )
- {
- try
- {
- File file = new File( new URI( url.toString() ) );
-
- if ( file.isDirectory() )
- {
- acceptDirectory( file, visitor );
- }
- else if ( file.exists() )
- {
- throw new IllegalArgumentException( "Cannot accept visitor on URL: " + url );
+ public static void accept(URL url, ClassFileVisitor visitor) throws IOException {
+ if (url.getPath().endsWith(".jar")) {
+ acceptJar(url, visitor);
+ } else if (url.getProtocol().equalsIgnoreCase("file")) {
+ try {
+ File file = new File(new URI(url.toString()));
+
+ if (file.isDirectory()) {
+ acceptDirectory(file, visitor);
+ } else if (file.exists()) {
+ throw new IllegalArgumentException("Cannot accept visitor on URL: " + url);
}
+ } catch (URISyntaxException exception) {
+ throw new IllegalArgumentException("Cannot accept visitor on URL: " + url, exception);
}
- catch ( URISyntaxException exception )
- {
- throw new IllegalArgumentException( "Cannot accept visitor on URL: " + url,
- exception );
- }
- }
- else
- {
- throw new IllegalArgumentException( "Cannot accept visitor on URL: " + url );
+ } else {
+ throw new IllegalArgumentException("Cannot accept visitor on URL: " + url);
}
}
// private methods --------------------------------------------------------
- private static void acceptJar( URL url, ClassFileVisitor visitor )
- throws IOException
- {
- try ( JarInputStream in = new JarInputStream( url.openStream() ) )
- {
+ private static void acceptJar(URL url, ClassFileVisitor visitor) throws IOException {
+ try (JarInputStream in = new JarInputStream(url.openStream())) {
JarEntry entry;
- while ( ( entry = in.getNextJarEntry() ) != null )
- {
+ while ((entry = in.getNextJarEntry()) != null) {
String name = entry.getName();
// ignore files like package-info.class and module-info.class
- if ( name.endsWith( ".class" ) && name.indexOf( '-' ) == -1 )
- {
- visitClass( name, in, visitor );
+ if (name.endsWith(".class") && name.indexOf('-') == -1) {
+ // Jars(ZIP) always use / as the separator character
+ visitClass(name, in, visitor, '/');
}
}
}
}
- private static void acceptDirectory( File directory, ClassFileVisitor visitor )
- throws IOException
- {
- if ( !directory.isDirectory() )
- {
- throw new IllegalArgumentException( "File is not a directory" );
- }
+ private static void acceptDirectory(File directory, ClassFileVisitor visitor) throws IOException {
- DirectoryScanner scanner = new DirectoryScanner();
-
- scanner.setBasedir( directory );
- scanner.setIncludes( new String[] { "**/*.class" } );
-
- scanner.scan();
-
- String[] paths = scanner.getIncludedFiles();
-
- for ( String path : paths )
- {
- path = path.replace( File.separatorChar, '/' );
-
- File file = new File( directory, path );
+ List<Path> classFiles;
+ try (Stream<Path> walk = Files.walk(directory.toPath())) {
+ classFiles = walk.filter(path -> path.getFileName().toString().endsWith(".class"))
+ .collect(Collectors.toList());
+ }
- try ( InputStream in = new FileInputStream( file ) )
- {
- visitClass( path, in, visitor );
+ for (Path path : classFiles) {
+ try (InputStream in = Files.newInputStream(path)) {
+ 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);
+ }
}
}
}
- private static void visitClass( String path, InputStream in, ClassFileVisitor visitor )
- {
- if ( !path.endsWith( ".class" ) )
- {
- throw new IllegalArgumentException( "Path is not a class" );
- }
+ private static void visitClass(File baseDirectory, Path path, InputStream in, ClassFileVisitor visitor) {
+ // getPath() returns a String, not a java.nio.file.Path
+ String stringPath =
+ path.toFile().getPath().substring(baseDirectory.getPath().length() + 1);
+ visitClass(stringPath, in, visitor, File.separatorChar);
+ }
- String className = path.substring( 0, path.length() - 6 );
+ private static void visitClass(String stringPath, InputStream in, ClassFileVisitor visitor, char separator) {
+ String className = stringPath.substring(0, stringPath.length() - 6);
- className = className.replace( '/', '.' );
+ className = className.replace(separator, '.');
- visitor.visitClass( className, in );
+ visitor.visitClass(className, in);
}
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/CollectorClassFileVisitor.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/CollectorClassFileVisitor.java
index d9226a8..bdbd3c7 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/CollectorClassFileVisitor.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/CollectorClassFileVisitor.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer;
import java.io.InputStream;
import java.util.HashSet;
@@ -29,26 +28,21 @@ import java.util.Set;
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
* @see #getClasses()
*/
-public class CollectorClassFileVisitor
- implements ClassFileVisitor
-{
+public class CollectorClassFileVisitor implements ClassFileVisitor {
private final Set<String> classes;
/**
* <p>Constructor for CollectorClassFileVisitor.</p>
*/
- public CollectorClassFileVisitor()
- {
+ public CollectorClassFileVisitor() {
classes = new HashSet<>();
}
/** {@inheritDoc} */
- public void visitClass( String className, InputStream in )
- {
+ public void visitClass(String className, InputStream in) {
// inner classes have equivalent compilation requirement as container class
- if ( className.indexOf( '$' ) < 0 )
- {
- classes.add( className );
+ if (className.indexOf('$') < 0) {
+ classes.add(className);
}
}
@@ -57,8 +51,7 @@ public class CollectorClassFileVisitor
*
* @return a {@link java.util.Set} object.
*/
- public Set<String> getClasses()
- {
+ public Set<String> getClasses() {
return classes;
}
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultClassAnalyzer.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultClassAnalyzer.java
index 6a79d4d..21e7afa 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultClassAnalyzer.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultClassAnalyzer.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer;
import javax.inject.Named;
import javax.inject.Singleton;
@@ -34,27 +33,19 @@ import java.util.zip.ZipException;
*/
@Named
@Singleton
-public class DefaultClassAnalyzer
- implements ClassAnalyzer
-{
+public class DefaultClassAnalyzer implements ClassAnalyzer {
/** {@inheritDoc} */
- public Set<String> analyze( URL url )
- throws IOException
- {
+ public Set<String> analyze(URL url) throws IOException {
CollectorClassFileVisitor visitor = new CollectorClassFileVisitor();
- try
- {
- ClassFileVisitorUtils.accept( url, visitor );
- }
- catch ( ZipException e )
- {
+ try {
+ ClassFileVisitorUtils.accept(url, visitor);
+ } catch (ZipException e) {
// since the current ZipException gives no indication what jar file is corrupted
// we prefer to wrap another ZipException for better error visibility
- ZipException ze =
- new ZipException( "Cannot process Jar entry on URL: " + url + " due to " + e.getMessage() );
- ze.initCause( e );
+ ZipException ze = new ZipException("Cannot process Jar entry on URL: " + url + " due to " + e.getMessage());
+ ze.initCause(e);
throw ze;
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java
index 6115334..4578842 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer;
import javax.inject.Inject;
import javax.inject.Named;
@@ -47,9 +46,7 @@ import org.apache.maven.project.MavenProject;
*/
@Named
@Singleton
-public class DefaultProjectDependencyAnalyzer
- implements ProjectDependencyAnalyzer
-{
+public class DefaultProjectDependencyAnalyzer implements ProjectDependencyAnalyzer {
/**
* ClassAnalyzer
*/
@@ -63,49 +60,47 @@ public class DefaultProjectDependencyAnalyzer
private DependencyAnalyzer dependencyAnalyzer;
/** {@inheritDoc} */
- public ProjectDependencyAnalysis analyze( MavenProject project )
- throws ProjectDependencyAnalyzerException
- {
- try
- {
- Map<Artifact, Set<String>> artifactClassMap = buildArtifactClassMap( project );
+ public ProjectDependencyAnalysis analyze(MavenProject project) throws ProjectDependencyAnalyzerException {
+ try {
+ Map<Artifact, Set<String>> artifactClassMap = buildArtifactClassMap(project);
- Set<String> mainDependencyClasses = buildMainDependencyClasses( project );
- Set<String> testDependencyClasses = buildTestDependencyClasses( project );
+ Set<String> mainDependencyClasses = buildMainDependencyClasses(project);
+ Set<String> testDependencyClasses = buildTestDependencyClasses(project);
Set<String> dependencyClasses = new HashSet<>();
- dependencyClasses.addAll( mainDependencyClasses );
- dependencyClasses.addAll( testDependencyClasses );
+ dependencyClasses.addAll(mainDependencyClasses);
+ dependencyClasses.addAll(testDependencyClasses);
- Set<String> testOnlyDependencyClasses = buildTestOnlyDependencyClasses( mainDependencyClasses,
- testDependencyClasses );
+ Set<String> testOnlyDependencyClasses =
+ buildTestOnlyDependencyClasses(mainDependencyClasses, testDependencyClasses);
- Map<Artifact, Set<String>> usedArtifacts = buildUsedArtifacts( artifactClassMap, dependencyClasses );
- Set<Artifact> mainUsedArtifacts = buildUsedArtifacts( artifactClassMap, mainDependencyClasses ).keySet();
+ Map<Artifact, Set<String>> usedArtifacts = buildUsedArtifacts(artifactClassMap, dependencyClasses);
+ Set<Artifact> mainUsedArtifacts =
+ buildUsedArtifacts(artifactClassMap, mainDependencyClasses).keySet();
- Set<Artifact> testArtifacts = buildUsedArtifacts( artifactClassMap, testOnlyDependencyClasses ).keySet();
- Set<Artifact> testOnlyArtifacts = removeAll( testArtifacts, mainUsedArtifacts );
+ Set<Artifact> testArtifacts = buildUsedArtifacts(artifactClassMap, testOnlyDependencyClasses)
+ .keySet();
+ Set<Artifact> testOnlyArtifacts = removeAll(testArtifacts, mainUsedArtifacts);
- Set<Artifact> declaredArtifacts = buildDeclaredArtifacts( project );
- Set<Artifact> usedDeclaredArtifacts = new LinkedHashSet<>( declaredArtifacts );
- usedDeclaredArtifacts.retainAll( usedArtifacts.keySet() );
+ Set<Artifact> declaredArtifacts = buildDeclaredArtifacts(project);
+ Set<Artifact> usedDeclaredArtifacts = new LinkedHashSet<>(declaredArtifacts);
+ usedDeclaredArtifacts.retainAll(usedArtifacts.keySet());
- Map<Artifact, Set<String>> usedUndeclaredArtifactsWithClasses = new LinkedHashMap<>( usedArtifacts );
- Set<Artifact> usedUndeclaredArtifacts = removeAll(
- usedUndeclaredArtifactsWithClasses.keySet(), declaredArtifacts );
- usedUndeclaredArtifactsWithClasses.keySet().retainAll( usedUndeclaredArtifacts );
+ Map<Artifact, Set<String>> usedUndeclaredArtifactsWithClasses = new LinkedHashMap<>(usedArtifacts);
+ Set<Artifact> usedUndeclaredArtifacts =
+ removeAll(usedUndeclaredArtifactsWithClasses.keySet(), declaredArtifacts);
+ usedUndeclaredArtifactsWithClasses.keySet().retainAll(usedUndeclaredArtifacts);
- Set<Artifact> unusedDeclaredArtifacts = new LinkedHashSet<>( declaredArtifacts );
- unusedDeclaredArtifacts = removeAll( unusedDeclaredArtifacts, usedArtifacts.keySet() );
+ Set<Artifact> unusedDeclaredArtifacts = new LinkedHashSet<>(declaredArtifacts);
+ unusedDeclaredArtifacts = removeAll(unusedDeclaredArtifacts, usedArtifacts.keySet());
- Set<Artifact> testArtifactsWithNonTestScope = getTestArtifactsWithNonTestScope( testOnlyArtifacts );
+ Set<Artifact> testArtifactsWithNonTestScope = getTestArtifactsWithNonTestScope(testOnlyArtifacts);
- return new ProjectDependencyAnalysis( usedDeclaredArtifacts, usedUndeclaredArtifactsWithClasses,
- unusedDeclaredArtifacts, testArtifactsWithNonTestScope );
- }
- catch ( IOException exception )
- {
- throw new ProjectDependencyAnalyzerException( "Cannot analyze dependencies", exception );
+ return new ProjectDependencyAnalysis(
+ usedDeclaredArtifacts, usedUndeclaredArtifactsWithClasses,
+ unusedDeclaredArtifacts, testArtifactsWithNonTestScope);
+ } catch (IOException exception) {
+ throw new ProjectDependencyAnalyzerException("Cannot analyze dependencies", exception);
}
}
@@ -117,166 +112,133 @@ public class DefaultProjectDependencyAnalyzer
* @param remove set to exclude
* @return set with remove excluded
*/
- private static Set<Artifact> removeAll( Set<Artifact> start, Set<Artifact> remove )
- {
- Set<Artifact> results = new LinkedHashSet<>( start.size() );
+ private static Set<Artifact> removeAll(Set<Artifact> start, Set<Artifact> remove) {
+ Set<Artifact> results = new LinkedHashSet<>(start.size());
- for ( Artifact artifact : start )
- {
+ for (Artifact artifact : start) {
boolean found = false;
- for ( Artifact artifact2 : remove )
- {
- if ( artifact.getDependencyConflictId().equals( artifact2.getDependencyConflictId() ) )
- {
+ for (Artifact artifact2 : remove) {
+ if (artifact.getDependencyConflictId().equals(artifact2.getDependencyConflictId())) {
found = true;
break;
}
}
- if ( !found )
- {
- results.add( artifact );
+ if (!found) {
+ results.add(artifact);
}
}
return results;
}
- private static Set<Artifact> getTestArtifactsWithNonTestScope( Set<Artifact> testOnlyArtifacts )
- {
+ private static Set<Artifact> getTestArtifactsWithNonTestScope(Set<Artifact> testOnlyArtifacts) {
Set<Artifact> nonTestScopeArtifacts = new LinkedHashSet<>();
- for ( Artifact artifact : testOnlyArtifacts )
- {
- if ( artifact.getScope().equals( "compile" ) )
- {
- nonTestScopeArtifacts.add( artifact );
+ for (Artifact artifact : testOnlyArtifacts) {
+ if (artifact.getScope().equals("compile")) {
+ nonTestScopeArtifacts.add(artifact);
}
}
return nonTestScopeArtifacts;
}
- private Map<Artifact, Set<String>> buildArtifactClassMap( MavenProject project )
- throws IOException
- {
+ private Map<Artifact, Set<String>> buildArtifactClassMap(MavenProject project) throws IOException {
Map<Artifact, Set<String>> artifactClassMap = new LinkedHashMap<>();
Set<Artifact> dependencyArtifacts = project.getArtifacts();
- for ( Artifact artifact : dependencyArtifacts )
- {
+ for (Artifact artifact : dependencyArtifacts) {
File file = artifact.getFile();
- if ( file != null && file.getName().endsWith( ".jar" ) )
- {
+ if (file != null && file.getName().endsWith(".jar")) {
// optimized solution for the jar case
- try ( JarFile jarFile = new JarFile( file ) )
- {
+ try (JarFile jarFile = new JarFile(file)) {
Enumeration<JarEntry> jarEntries = jarFile.entries();
Set<String> classes = new HashSet<>();
- while ( jarEntries.hasMoreElements() )
- {
+ while (jarEntries.hasMoreElements()) {
String entry = jarEntries.nextElement().getName();
- if ( entry.endsWith( ".class" ) )
- {
- String className = entry.replace( '/', '.' );
- className = className.substring( 0, className.length() - ".class".length() );
- classes.add( className );
+ if (entry.endsWith(".class")) {
+ String className = entry.replace('/', '.');
+ className = className.substring(0, className.length() - ".class".length());
+ classes.add(className);
}
}
- artifactClassMap.put( artifact, classes );
+ artifactClassMap.put(artifact, classes);
}
- }
- else if ( file != null && file.isDirectory() )
- {
+ } else if (file != null && file.isDirectory()) {
URL url = file.toURI().toURL();
- Set<String> classes = classAnalyzer.analyze( url );
+ Set<String> classes = classAnalyzer.analyze(url);
- artifactClassMap.put( artifact, classes );
+ artifactClassMap.put(artifact, classes);
}
}
return artifactClassMap;
}
- private static Set<String> buildTestOnlyDependencyClasses( Set<String> mainDependencyClasses,
- Set<String> testDependencyClasses )
- {
- Set<String> testOnlyDependencyClasses = new HashSet<>( testDependencyClasses );
- testOnlyDependencyClasses.removeAll( mainDependencyClasses );
+ private static Set<String> buildTestOnlyDependencyClasses(
+ Set<String> mainDependencyClasses, Set<String> testDependencyClasses) {
+ Set<String> testOnlyDependencyClasses = new HashSet<>(testDependencyClasses);
+ testOnlyDependencyClasses.removeAll(mainDependencyClasses);
return testOnlyDependencyClasses;
}
- private Set<String> buildMainDependencyClasses( MavenProject project )
- throws IOException
- {
+ private Set<String> buildMainDependencyClasses(MavenProject project) throws IOException {
String outputDirectory = project.getBuild().getOutputDirectory();
- return buildDependencyClasses( outputDirectory );
+ return buildDependencyClasses(outputDirectory);
}
- private Set<String> buildTestDependencyClasses( MavenProject project )
- throws IOException
- {
+ private Set<String> buildTestDependencyClasses(MavenProject project) throws IOException {
String testOutputDirectory = project.getBuild().getTestOutputDirectory();
- return buildDependencyClasses( testOutputDirectory );
+ return buildDependencyClasses(testOutputDirectory);
}
- private Set<String> buildDependencyClasses( String path )
- throws IOException
- {
- URL url = new File( path ).toURI().toURL();
+ private Set<String> buildDependencyClasses(String path) throws IOException {
+ URL url = new File(path).toURI().toURL();
- return dependencyAnalyzer.analyze( url );
+ return dependencyAnalyzer.analyze(url);
}
- private static Set<Artifact> buildDeclaredArtifacts( MavenProject project )
- {
+ private static Set<Artifact> buildDeclaredArtifacts(MavenProject project) {
Set<Artifact> declaredArtifacts = project.getDependencyArtifacts();
- if ( declaredArtifacts == null )
- {
+ if (declaredArtifacts == null) {
declaredArtifacts = Collections.emptySet();
}
return declaredArtifacts;
}
- private static Map<Artifact, Set<String>> buildUsedArtifacts( Map<Artifact, Set<String>> artifactClassMap,
- Set<String> dependencyClasses )
- {
+ private static Map<Artifact, Set<String>> buildUsedArtifacts(
+ Map<Artifact, Set<String>> artifactClassMap, Set<String> dependencyClasses) {
Map<Artifact, Set<String>> usedArtifacts = new HashMap<>();
- for ( String className : dependencyClasses )
- {
- Artifact artifact = findArtifactForClassName( artifactClassMap, className );
+ for (String className : dependencyClasses) {
+ Artifact artifact = findArtifactForClassName(artifactClassMap, className);
- if ( artifact != null )
- {
- Set<String> classesFromArtifact = usedArtifacts.get( artifact );
- if ( classesFromArtifact == null )
- {
+ if (artifact != null) {
+ Set<String> classesFromArtifact = usedArtifacts.get(artifact);
+ if (classesFromArtifact == null) {
classesFromArtifact = new HashSet<String>();
- usedArtifacts.put( artifact, classesFromArtifact );
+ usedArtifacts.put(artifact, classesFromArtifact);
}
- classesFromArtifact.add( className );
+ classesFromArtifact.add(className);
}
}
return usedArtifacts;
}
- private static Artifact findArtifactForClassName( Map<Artifact, Set<String>> artifactClassMap, String className )
- {
- for ( Map.Entry<Artifact, Set<String>> entry : artifactClassMap.entrySet() )
- {
- if ( entry.getValue().contains( className ) )
- {
+ private static Artifact findArtifactForClassName(Map<Artifact, Set<String>> artifactClassMap, String className) {
+ for (Map.Entry<Artifact, Set<String>> entry : artifactClassMap.entrySet()) {
+ if (entry.getValue().contains(className)) {
return entry.getKey();
}
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/DependencyAnalyzer.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/DependencyAnalyzer.java
index aed1fb0..d366c6b 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/DependencyAnalyzer.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/DependencyAnalyzer.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer;
import java.io.IOException;
import java.net.URL;
@@ -28,8 +27,7 @@ import java.util.Set;
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
-public interface DependencyAnalyzer
-{
+public interface DependencyAnalyzer {
/**
* <p>analyze.</p>
@@ -38,6 +36,5 @@ public interface DependencyAnalyzer
* @return the set of class names referenced by the library
* @throws IOException if an error occurs reading a JAR or .class file
*/
- Set<String> analyze( URL url )
- throws IOException;
+ Set<String> analyze(URL url) throws IOException;
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalysis.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalysis.java
index 0be4ffd..dd4f540 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalysis.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalysis.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer;
import java.util.Arrays;
import java.util.Collections;
@@ -35,8 +34,7 @@ import org.apache.maven.artifact.Artifact;
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
-public class ProjectDependencyAnalysis
-{
+public class ProjectDependencyAnalysis {
// fields -----------------------------------------------------------------
private final Set<Artifact> usedDeclaredArtifacts;
@@ -50,9 +48,8 @@ public class ProjectDependencyAnalysis
/**
* <p>Constructor for ProjectDependencyAnalysis.</p>
*/
- public ProjectDependencyAnalysis()
- {
- this( null, (Map<Artifact, Set<String>>) null, null, null );
+ public ProjectDependencyAnalysis() {
+ this(null, (Map<Artifact, Set<String>>) null, null, null);
}
/**
@@ -62,11 +59,11 @@ public class ProjectDependencyAnalysis
* @param usedUndeclaredArtifacts artifacts used but not declared
* @param unusedDeclaredArtifacts artifacts declared but not used
*/
- public ProjectDependencyAnalysis( Set<Artifact> usedDeclaredArtifacts, Set<Artifact> usedUndeclaredArtifacts,
- Set<Artifact> unusedDeclaredArtifacts )
- {
- this( usedDeclaredArtifacts, usedUndeclaredArtifacts,
- unusedDeclaredArtifacts, Collections.<Artifact>emptySet() );
+ public ProjectDependencyAnalysis(
+ Set<Artifact> usedDeclaredArtifacts,
+ Set<Artifact> usedUndeclaredArtifacts,
+ Set<Artifact> unusedDeclaredArtifacts) {
+ this(usedDeclaredArtifacts, usedUndeclaredArtifacts, unusedDeclaredArtifacts, Collections.<Artifact>emptySet());
}
/**
@@ -77,25 +74,27 @@ public class ProjectDependencyAnalysis
* @param unusedDeclaredArtifacts artifacts declared but not used
* @param testArtifactsWithNonTestScope artifacts only used in tests but not declared with test scope
*/
- public ProjectDependencyAnalysis( Set<Artifact> usedDeclaredArtifacts, Set<Artifact> usedUndeclaredArtifacts,
- Set<Artifact> unusedDeclaredArtifacts,
- Set<Artifact> testArtifactsWithNonTestScope )
- {
- this( usedDeclaredArtifacts,
- mapWithKeys( usedUndeclaredArtifacts ),
+ public ProjectDependencyAnalysis(
+ Set<Artifact> usedDeclaredArtifacts,
+ Set<Artifact> usedUndeclaredArtifacts,
+ Set<Artifact> unusedDeclaredArtifacts,
+ Set<Artifact> testArtifactsWithNonTestScope) {
+ this(
+ usedDeclaredArtifacts,
+ mapWithKeys(usedUndeclaredArtifacts),
unusedDeclaredArtifacts,
- testArtifactsWithNonTestScope );
+ testArtifactsWithNonTestScope);
}
- public ProjectDependencyAnalysis( Set<Artifact> usedDeclaredArtifacts,
+ public ProjectDependencyAnalysis(
+ Set<Artifact> usedDeclaredArtifacts,
Map<Artifact, Set<String>> usedUndeclaredArtifacts,
Set<Artifact> unusedDeclaredArtifacts,
- Set<Artifact> testArtifactsWithNonTestScope )
- {
- this.usedDeclaredArtifacts = safeCopy( usedDeclaredArtifacts );
- this.usedUndeclaredArtifacts = safeCopy( usedUndeclaredArtifacts );
- this.unusedDeclaredArtifacts = safeCopy( unusedDeclaredArtifacts );
- this.testArtifactsWithNonTestScope = safeCopy( testArtifactsWithNonTestScope );
+ Set<Artifact> testArtifactsWithNonTestScope) {
+ this.usedDeclaredArtifacts = safeCopy(usedDeclaredArtifacts);
+ this.usedUndeclaredArtifacts = safeCopy(usedUndeclaredArtifacts);
+ this.unusedDeclaredArtifacts = safeCopy(unusedDeclaredArtifacts);
+ this.testArtifactsWithNonTestScope = safeCopy(testArtifactsWithNonTestScope);
}
/**
@@ -103,9 +102,8 @@ public class ProjectDependencyAnalysis
*
* @return artifacts both used and declared
*/
- public Set<Artifact> getUsedDeclaredArtifacts()
- {
- return safeCopy( usedDeclaredArtifacts );
+ public Set<Artifact> getUsedDeclaredArtifacts() {
+ return safeCopy(usedDeclaredArtifacts);
}
/**
@@ -113,9 +111,8 @@ public class ProjectDependencyAnalysis
*
* @return artifacts used but not declared
*/
- public Set<Artifact> getUsedUndeclaredArtifacts()
- {
- return safeCopy( usedUndeclaredArtifacts.keySet() );
+ public Set<Artifact> getUsedUndeclaredArtifacts() {
+ return safeCopy(usedUndeclaredArtifacts.keySet());
}
/**
@@ -123,9 +120,8 @@ public class ProjectDependencyAnalysis
*
* @return artifacts used but not declared
*/
- public Map<Artifact, Set<String>> getUsedUndeclaredArtifactsWithClasses()
- {
- return safeCopy( usedUndeclaredArtifacts );
+ public Map<Artifact, Set<String>> getUsedUndeclaredArtifactsWithClasses() {
+ return safeCopy(usedUndeclaredArtifacts);
}
/**
@@ -133,9 +129,8 @@ public class ProjectDependencyAnalysis
*
* @return artifacts declared but not used
*/
- public Set<Artifact> getUnusedDeclaredArtifacts()
- {
- return safeCopy( unusedDeclaredArtifacts );
+ public Set<Artifact> getUnusedDeclaredArtifacts() {
+ return safeCopy(unusedDeclaredArtifacts);
}
/**
@@ -143,9 +138,8 @@ public class ProjectDependencyAnalysis
*
* @return artifacts only used in tests but not declared with test scope
*/
- public Set<Artifact> getTestArtifactsWithNonTestScope()
- {
- return safeCopy( testArtifactsWithNonTestScope );
+ public Set<Artifact> getTestArtifactsWithNonTestScope() {
+ return safeCopy(testArtifactsWithNonTestScope);
}
/**
@@ -154,13 +148,12 @@ public class ProjectDependencyAnalysis
* @return updated project dependency analysis
* @since 1.3
*/
- public ProjectDependencyAnalysis ignoreNonCompile()
- {
- Set<Artifact> filteredUnusedDeclared = new HashSet<>( unusedDeclaredArtifacts );
- filteredUnusedDeclared.removeIf( artifact -> !artifact.getScope().equals( Artifact.SCOPE_COMPILE ) );
+ public ProjectDependencyAnalysis ignoreNonCompile() {
+ Set<Artifact> filteredUnusedDeclared = new HashSet<>(unusedDeclaredArtifacts);
+ filteredUnusedDeclared.removeIf(artifact -> !artifact.getScope().equals(Artifact.SCOPE_COMPILE));
- return new ProjectDependencyAnalysis( usedDeclaredArtifacts, usedUndeclaredArtifacts, filteredUnusedDeclared,
- testArtifactsWithNonTestScope );
+ return new ProjectDependencyAnalysis(
+ usedDeclaredArtifacts, usedUndeclaredArtifacts, filteredUnusedDeclared, testArtifactsWithNonTestScope);
}
/**
@@ -174,59 +167,50 @@ public class ProjectDependencyAnalysis
* used
* @since 1.3
*/
- @SuppressWarnings( "UnusedReturnValue" )
- public ProjectDependencyAnalysis forceDeclaredDependenciesUsage( String[] forceUsedDependencies )
- throws ProjectDependencyAnalyzerException
- {
- Set<String> forced = new HashSet<>( Arrays.asList( forceUsedDependencies ) );
+ @SuppressWarnings("UnusedReturnValue")
+ public ProjectDependencyAnalysis forceDeclaredDependenciesUsage(String[] forceUsedDependencies)
+ throws ProjectDependencyAnalyzerException {
+ Set<String> forced = new HashSet<>(Arrays.asList(forceUsedDependencies));
- Set<Artifact> forcedUnusedDeclared = new HashSet<>( unusedDeclaredArtifacts );
- Set<Artifact> forcedUsedDeclared = new HashSet<>( usedDeclaredArtifacts );
+ Set<Artifact> forcedUnusedDeclared = new HashSet<>(unusedDeclaredArtifacts);
+ Set<Artifact> forcedUsedDeclared = new HashSet<>(usedDeclaredArtifacts);
Iterator<Artifact> iter = forcedUnusedDeclared.iterator();
- while ( iter.hasNext() )
- {
+ while (iter.hasNext()) {
Artifact artifact = iter.next();
- if ( forced.remove( artifact.getGroupId() + ':' + artifact.getArtifactId() ) )
- {
+ if (forced.remove(artifact.getGroupId() + ':' + artifact.getArtifactId())) {
// ok, change artifact status from unused-declared to used-declared
iter.remove();
- forcedUsedDeclared.add( artifact );
+ forcedUsedDeclared.add(artifact);
}
}
- if ( !forced.isEmpty() )
- {
+ if (!forced.isEmpty()) {
// trying to force dependencies as used-declared which were not declared or already detected as used
Set<String> used = new HashSet<>();
- for ( Artifact artifact : usedDeclaredArtifacts )
- {
+ for (Artifact artifact : usedDeclaredArtifacts) {
String id = artifact.getGroupId() + ':' + artifact.getArtifactId();
- if ( forced.remove( id ) )
- {
- used.add( id );
+ if (forced.remove(id)) {
+ used.add(id);
}
}
StringBuilder builder = new StringBuilder();
- if ( !forced.isEmpty() )
- {
- builder.append( "not declared: " ).append( forced );
+ if (!forced.isEmpty()) {
+ builder.append("not declared: ").append(forced);
}
- if ( !used.isEmpty() )
- {
- if ( builder.length() > 0 )
- {
- builder.append( " and " );
+ if (!used.isEmpty()) {
+ if (builder.length() > 0) {
+ builder.append(" and ");
}
- builder.append( "declared but already detected as used: " ).append( used );
+ builder.append("declared but already detected as used: ").append(used);
}
- throw new ProjectDependencyAnalyzerException( "Trying to force use of dependencies which are " + builder );
+ throw new ProjectDependencyAnalyzerException("Trying to force use of dependencies which are " + builder);
}
- return new ProjectDependencyAnalysis( forcedUsedDeclared, usedUndeclaredArtifacts, forcedUnusedDeclared,
- testArtifactsWithNonTestScope );
+ return new ProjectDependencyAnalysis(
+ forcedUsedDeclared, usedUndeclaredArtifacts, forcedUnusedDeclared, testArtifactsWithNonTestScope);
}
/**
@@ -234,27 +218,24 @@ public class ProjectDependencyAnalysis
*
* @return an int
*/
- public int hashCode()
- {
+ public int hashCode() {
int hashCode = getUsedDeclaredArtifacts().hashCode();
- hashCode = ( hashCode * 37 ) + getUsedUndeclaredArtifacts().hashCode();
- hashCode = ( hashCode * 37 ) + getUnusedDeclaredArtifacts().hashCode();
- hashCode = ( hashCode * 37 ) + getTestArtifactsWithNonTestScope().hashCode();
+ hashCode = (hashCode * 37) + getUsedUndeclaredArtifacts().hashCode();
+ hashCode = (hashCode * 37) + getUnusedDeclaredArtifacts().hashCode();
+ hashCode = (hashCode * 37) + getTestArtifactsWithNonTestScope().hashCode();
return hashCode;
}
/** {@inheritDoc} */
- public boolean equals( Object object )
- {
- if ( object instanceof ProjectDependencyAnalysis )
- {
+ public boolean equals(Object object) {
+ if (object instanceof ProjectDependencyAnalysis) {
ProjectDependencyAnalysis analysis = (ProjectDependencyAnalysis) object;
- return getUsedDeclaredArtifacts().equals( analysis.getUsedDeclaredArtifacts() )
- && getUsedUndeclaredArtifacts().equals( analysis.getUsedUndeclaredArtifacts() )
- && getUnusedDeclaredArtifacts().equals( analysis.getUnusedDeclaredArtifacts() )
- && getTestArtifactsWithNonTestScope().equals( analysis.getTestArtifactsWithNonTestScope() );
+ return getUsedDeclaredArtifacts().equals(analysis.getUsedDeclaredArtifacts())
+ && getUsedUndeclaredArtifacts().equals(analysis.getUsedUndeclaredArtifacts())
+ && getUnusedDeclaredArtifacts().equals(analysis.getUnusedDeclaredArtifacts())
+ && getTestArtifactsWithNonTestScope().equals(analysis.getTestArtifactsWithNonTestScope());
}
return false;
@@ -265,89 +246,74 @@ public class ProjectDependencyAnalysis
*
* @return a {@link java.lang.String} object.
*/
- public String toString()
- {
+ public String toString() {
StringBuilder buffer = new StringBuilder();
- if ( !getUsedDeclaredArtifacts().isEmpty() )
- {
- buffer.append( "usedDeclaredArtifacts=" ).append( getUsedDeclaredArtifacts() );
+ if (!getUsedDeclaredArtifacts().isEmpty()) {
+ buffer.append("usedDeclaredArtifacts=").append(getUsedDeclaredArtifacts());
}
- if ( !getUsedUndeclaredArtifacts().isEmpty() )
- {
- if ( buffer.length() > 0 )
- {
- buffer.append( "," );
+ if (!getUsedUndeclaredArtifacts().isEmpty()) {
+ if (buffer.length() > 0) {
+ buffer.append(",");
}
- buffer.append( "usedUndeclaredArtifacts=" ).append( getUsedUndeclaredArtifacts() );
+ buffer.append("usedUndeclaredArtifacts=").append(getUsedUndeclaredArtifacts());
}
- if ( !getUnusedDeclaredArtifacts().isEmpty() )
- {
- if ( buffer.length() > 0 )
- {
- buffer.append( "," );
+ if (!getUnusedDeclaredArtifacts().isEmpty()) {
+ if (buffer.length() > 0) {
+ buffer.append(",");
}
- buffer.append( "unusedDeclaredArtifacts=" ).append( getUnusedDeclaredArtifacts() );
+ buffer.append("unusedDeclaredArtifacts=").append(getUnusedDeclaredArtifacts());
}
- if ( !getTestArtifactsWithNonTestScope().isEmpty() )
- {
- if ( buffer.length() > 0 )
- {
- buffer.append( "," );
+ if (!getTestArtifactsWithNonTestScope().isEmpty()) {
+ if (buffer.length() > 0) {
+ buffer.append(",");
}
- buffer.append( "testArtifactsWithNonTestScope=" ).append( getTestArtifactsWithNonTestScope() );
+ buffer.append("testArtifactsWithNonTestScope=").append(getTestArtifactsWithNonTestScope());
}
- buffer.insert( 0, "[" );
- buffer.insert( 0, getClass().getName() );
+ buffer.insert(0, "[");
+ buffer.insert(0, getClass().getName());
- buffer.append( "]" );
+ buffer.append("]");
return buffer.toString();
}
// private methods --------------------------------------------------------
- private Set<Artifact> safeCopy( Set<Artifact> set )
- {
- return ( set == null ) ? Collections.emptySet() : Collections.unmodifiableSet( new LinkedHashSet<>( set ) );
+ private Set<Artifact> safeCopy(Set<Artifact> set) {
+ return (set == null) ? Collections.emptySet() : Collections.unmodifiableSet(new LinkedHashSet<>(set));
}
- private static Map<Artifact, Set<String>> safeCopy( Map<Artifact, Set<String>> origMap )
- {
- if ( origMap == null )
- {
+ private static Map<Artifact, Set<String>> safeCopy(Map<Artifact, Set<String>> origMap) {
+ if (origMap == null) {
return Collections.emptyMap();
}
Map<Artifact, Set<String>> map = new HashMap<>();
- for ( Map.Entry<Artifact, Set<String>> e : origMap.entrySet() )
- {
- map.put( e.getKey(), Collections.unmodifiableSet( new LinkedHashSet<>( e.getValue() ) ) );
+ for (Map.Entry<Artifact, Set<String>> e : origMap.entrySet()) {
+ map.put(e.getKey(), Collections.unmodifiableSet(new LinkedHashSet<>(e.getValue())));
}
return map;
}
- private static Map<Artifact, Set<String>> mapWithKeys( Set<Artifact> keys )
- {
- if ( keys == null )
- {
+ private static Map<Artifact, Set<String>> mapWithKeys(Set<Artifact> keys) {
+ if (keys == null) {
return Collections.emptyMap();
}
Map<Artifact, Set<String>> map = new HashMap<>();
- for ( Artifact k : keys )
- {
- map.put( k, Collections.<String>emptySet() );
+ for (Artifact k : keys) {
+ map.put(k, Collections.<String>emptySet());
}
return map;
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalyzer.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalyzer.java
index ca7f4b8..9503ea3 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalyzer.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalyzer.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer;
import org.apache.maven.project.MavenProject;
@@ -32,8 +31,7 @@ import org.apache.maven.project.MavenProject;
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
-public interface ProjectDependencyAnalyzer
-{
+public interface ProjectDependencyAnalyzer {
/**
* <p>analyze.</p>
*
@@ -41,6 +39,5 @@ public interface ProjectDependencyAnalyzer
* @return a {@link org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalysis} object
* @throws org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalyzerException if any
*/
- ProjectDependencyAnalysis analyze( MavenProject project )
- throws ProjectDependencyAnalyzerException;
+ ProjectDependencyAnalysis analyze(MavenProject project) throws ProjectDependencyAnalyzerException;
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalyzerException.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalyzerException.java
index de7abaa..02ee693 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalyzerException.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalyzerException.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,15 +16,14 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer;
/**
* <p>ProjectDependencyAnalyzerException class.</p>
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
-public class ProjectDependencyAnalyzerException
- extends Exception
-{
+public class ProjectDependencyAnalyzerException extends Exception {
/**
* The serialisation unique ID.
*/
@@ -37,9 +34,8 @@ public class ProjectDependencyAnalyzerException
*
* @param message a {@link java.lang.String} object.
*/
- public ProjectDependencyAnalyzerException( String message )
- {
- super( message );
+ public ProjectDependencyAnalyzerException(String message) {
+ super(message);
}
/**
@@ -48,8 +44,7 @@ public class ProjectDependencyAnalyzerException
* @param message a {@link java.lang.String} object.
* @param cause a {@link java.lang.Throwable} object.
*/
- public ProjectDependencyAnalyzerException( String message, Throwable cause )
- {
- super( message, cause );
+ public ProjectDependencyAnalyzerException(String message, Throwable cause) {
+ super(message, cause);
}
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ASMDependencyAnalyzer.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ASMDependencyAnalyzer.java
index ebe2738..98aebf8 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ASMDependencyAnalyzer.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ASMDependencyAnalyzer.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.asm;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer.asm;
import javax.inject.Named;
import javax.inject.Singleton;
@@ -36,16 +35,12 @@ import org.apache.maven.shared.dependency.analyzer.DependencyAnalyzer;
*/
@Named
@Singleton
-public class ASMDependencyAnalyzer
- implements DependencyAnalyzer
-{
+public class ASMDependencyAnalyzer implements DependencyAnalyzer {
/** {@inheritDoc} */
- public Set<String> analyze( URL url )
- throws IOException
- {
+ public Set<String> analyze(URL url) throws IOException {
DependencyClassFileVisitor visitor = new DependencyClassFileVisitor();
- ClassFileVisitorUtils.accept( url, visitor );
+ ClassFileVisitorUtils.accept(url, visitor);
return visitor.getDependencies();
}
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 4937a97..76da741 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
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.asm;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer.asm;
import java.nio.Buffer;
import java.nio.ByteBuffer;
@@ -28,6 +27,8 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import org.objectweb.asm.Type;
+
/**
* A small parser to read the constant pool directly, in case it contains references
* ASM does not support.
@@ -38,9 +39,9 @@ import java.util.Set;
*
* @see <a href="https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.4">JVM 9 Sepc</a>
* @see <a href="https://docs.oracle.com/javase/specs/jvms/se10/html/jvms-4.html#jvms-4.4">JVM 10 Sepc</a>
+ * @see <a href="https://docs.oracle.com/javase/specs/jvms/se20/html/jvms-4.html#jvms-4.4">JVM 20 Sepc</a>
*/
-public class ConstantPoolParser
-{
+public class ConstantPoolParser {
/** Constant <code>HEAD=0xcafebabe</code> */
public static final int HEAD = 0xcafebabe;
@@ -85,6 +86,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;
@@ -100,182 +104,184 @@ public class ConstantPoolParser
private static final int OX3F = 0x3F;
- static Set<String> getConstantPoolClassReferences( byte[] b )
- {
- return parseConstantPoolClassReferences( ByteBuffer.wrap( b ) );
+ static Set<String> getConstantPoolClassReferences(byte[] b) {
+ return parseConstantPoolClassReferences(ByteBuffer.wrap(b));
}
- static Set<String> parseConstantPoolClassReferences( ByteBuffer buf )
- {
- if ( buf.order( ByteOrder.BIG_ENDIAN )
- .getInt() != HEAD )
- {
+ static Set<String> parseConstantPoolClassReferences(ByteBuffer buf) {
+ if (buf.order(ByteOrder.BIG_ENDIAN).getInt() != HEAD) {
return Collections.emptySet();
}
- buf.getChar() ; buf.getChar(); // minor + ver
- Set<Integer> classes = new HashSet<>();
+ buf.getChar();
+ buf.getChar(); // minor + ver
+ Set<Integer> classReferences = new HashSet<>();
+ Set<Integer> typeReferences = new HashSet<>();
Map<Integer, String> stringConstants = new HashMap<>();
- for ( int ix = 1, num = buf.getChar(); ix < num; ix++ )
- {
+ for (int ix = 1, num = buf.getChar(); ix < num; ix++) {
byte tag = buf.get();
- switch ( tag )
- {
+ switch (tag) {
default:
- throw new RuntimeException( "Unknown constant pool type '" + tag + "'" );
+ throw new RuntimeException("Unknown constant pool type '" + tag + "'");
case CONSTANT_UTF8:
- stringConstants.put( ix, decodeString( buf ) );
+ stringConstants.put(ix, decodeString(buf));
break;
case CONSTANT_CLASS:
- classes.add( (int) buf.getChar() );
+ classReferences.add((int) buf.getChar());
break;
case CONSTANT_METHOD_TYPE:
- consumeMethodType( buf );
+ consumeMethodType(buf);
break;
case CONSTANT_FIELDREF:
case CONSTANT_METHODREF:
case CONSTANT_INTERFACEMETHODREF:
+ consumeReference(buf);
+ break;
case CONSTANT_NAME_AND_TYPE:
- consumeReference( buf );
+ buf.getChar();
+ typeReferences.add((int) buf.getChar());
break;
case CONSTANT_INTEGER:
- consumeInt( buf );
+ consumeInt(buf);
break;
case CONSTANT_FLOAT:
- consumeFloat( buf );
+ consumeFloat(buf);
break;
case CONSTANT_DOUBLE:
- consumeDouble( buf );
+ consumeDouble(buf);
ix++;
break;
case CONSTANT_LONG:
- consumeLong( buf );
+ consumeLong(buf);
ix++;
break;
case CONSTANT_STRING:
- consumeString( buf );
+ consumeString(buf);
break;
case CONSTANT_METHODHANDLE:
- consumeMethodHandle( buf );
+ consumeMethodHandle(buf);
+ break;
+ case CONSTANT_INVOKE:
+ consumeDynamic(buf);
break;
case CONSTANT_INVOKE_DYNAMIC:
- consumeInvokeDynamic( buf );
+ consumeInvokeDynamic(buf);
break;
case CONSTANT_MODULE:
- consumeModule( buf );
+ consumeModule(buf);
break;
case CONSTANT_PACKAGE:
- consumePackage( buf );
+ consumePackage(buf);
break;
}
}
+
Set<String> result = new HashSet<>();
- for ( Integer aClass : classes )
- {
- String className = stringConstants.get( aClass );
-
- // filter out things from unnamed package, probably a false-positive
- if ( isImportableClass( className ) )
- {
- result.add( className );
+
+ for (Integer classRef : classReferences) {
+ addClassToResult(result, stringConstants.get(classRef));
+ }
+
+ for (Integer typeRef : typeReferences) {
+ String typeName = stringConstants.get(typeRef);
+
+ if (Type.getType(typeName).getSort() == Type.METHOD) {
+ addClassToResult(result, Type.getReturnType(typeName).getInternalName());
+ Type[] argumentTypes = Type.getArgumentTypes(typeName);
+ for (Type argumentType : argumentTypes) {
+ addClassToResult(result, argumentType.getInternalName());
+ }
}
}
+
return result;
}
- private static String decodeString( ByteBuffer buf )
- {
+ private static void addClassToResult(Set<String> result, String className) {
+ // filter out things from unnamed package, probably a false-positive
+ if (isImportableClass(className)) {
+ result.add(className);
+ }
+ }
+
+ private static String decodeString(ByteBuffer buf) {
int size = buf.getChar();
// Explicit cast for compatibility with covariant return type on JDK 9's ByteBuffer
- @SuppressWarnings( "RedundantCast" )
- int oldLimit = ( (Buffer) buf ).limit();
- ( (Buffer) buf ).limit( buf.position() + size );
- StringBuilder sb = new StringBuilder( size + ( size >> 1 ) + 16 );
- while ( buf.hasRemaining() )
- {
+ @SuppressWarnings("RedundantCast")
+ int oldLimit = ((Buffer) buf).limit();
+ ((Buffer) buf).limit(buf.position() + size);
+ StringBuilder sb = new StringBuilder(size + (size >> 1) + 16);
+ while (buf.hasRemaining()) {
byte b = buf.get();
- if ( b > 0 )
- {
- sb.append( (char) b );
- }
- else
- {
+ if (b > 0) {
+ sb.append((char) b);
+ } else {
int b2 = buf.get();
- if ( ( b & OXF0 ) != OXE0 )
- {
- sb.append( (char) ( ( b & 0x1F ) << 6 | b2 & OX3F ) );
- }
- else
- {
+ if ((b & OXF0) != OXE0) {
+ sb.append((char) ((b & 0x1F) << 6 | b2 & OX3F));
+ } else {
int b3 = buf.get();
- sb.append( (char) ( ( b & 0x0F ) << 12 | ( b2 & OX3F ) << 6 | b3 & OX3F ) );
+ sb.append((char) ((b & 0x0F) << 12 | (b2 & OX3F) << 6 | b3 & OX3F));
}
}
}
- ( (Buffer) buf ).limit( oldLimit );
+ ((Buffer) buf).limit(oldLimit);
return sb.toString();
}
- private static boolean isImportableClass( String className )
- {
+ private static boolean isImportableClass(String className) {
// without a slash, class must be in unnamed package, which can't be imported
- return className.indexOf( '/' ) != -1;
+ return className.indexOf('/') != -1;
}
- private static void consumeMethodType( ByteBuffer buf )
- {
+ private static void consumeMethodType(ByteBuffer buf) {
buf.getChar();
}
- private static void consumeReference( ByteBuffer buf )
- {
+ private static void consumeReference(ByteBuffer buf) {
buf.getChar();
buf.getChar();
}
- private static void consumeInt( ByteBuffer buf )
- {
+ private static void consumeInt(ByteBuffer buf) {
buf.getInt();
}
- private static void consumeFloat( ByteBuffer buf )
- {
+ private static void consumeFloat(ByteBuffer buf) {
buf.getFloat();
}
- private static void consumeDouble( ByteBuffer buf )
- {
+ private static void consumeDouble(ByteBuffer buf) {
buf.getDouble();
}
- private static void consumeLong( ByteBuffer buf )
- {
+ private static void consumeLong(ByteBuffer buf) {
buf.getLong();
}
- private static void consumeString( ByteBuffer buf )
- {
+ private static void consumeString(ByteBuffer buf) {
buf.getChar();
}
- private static void consumeMethodHandle( ByteBuffer buf )
- {
+ private static void consumeMethodHandle(ByteBuffer buf) {
buf.get();
buf.getChar();
}
- private static void consumeInvokeDynamic( ByteBuffer buf )
- {
+ 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();
}
- private static void consumeModule( ByteBuffer buf )
- {
+ private static void consumeModule(ByteBuffer buf) {
buf.getChar();
}
- private static void consumePackage( ByteBuffer buf )
- {
+ private static void consumePackage(ByteBuffer buf) {
buf.getChar();
}
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultAnnotationVisitor.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultAnnotationVisitor.java
index 0156e2c..37e1994 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultAnnotationVisitor.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultAnnotationVisitor.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.asm;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer.asm;
import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.Opcodes;
@@ -29,9 +28,7 @@ import org.objectweb.asm.Type;
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
-public class DefaultAnnotationVisitor
- extends AnnotationVisitor
-{
+public class DefaultAnnotationVisitor extends AnnotationVisitor {
private final ResultCollector resultCollector;
/**
@@ -39,39 +36,32 @@ public class DefaultAnnotationVisitor
*
* @param resultCollector a {@link org.apache.maven.shared.dependency.analyzer.asm.ResultCollector} object.
*/
- public DefaultAnnotationVisitor( ResultCollector resultCollector )
- {
- super( Opcodes.ASM9 );
+ public DefaultAnnotationVisitor(ResultCollector resultCollector) {
+ super(Opcodes.ASM9);
this.resultCollector = resultCollector;
}
/** {@inheritDoc} */
- public void visit( final String name, final Object value )
- {
- if ( value instanceof Type )
- {
- resultCollector.addType( (Type) value );
+ public void visit(final String name, final Object value) {
+ if (value instanceof Type) {
+ resultCollector.addType((Type) value);
}
}
/** {@inheritDoc} */
- public void visitEnum( final String name, final String desc, final String value )
- {
- resultCollector.addDesc( desc );
+ public void visitEnum(final String name, final String desc, final String value) {
+ resultCollector.addDesc(desc);
}
/** {@inheritDoc} */
- public AnnotationVisitor visitAnnotation( final String name, final String desc )
- {
- resultCollector.addDesc( desc );
+ public AnnotationVisitor visitAnnotation(final String name, final String desc) {
+ resultCollector.addDesc(desc);
return this;
}
/** {@inheritDoc} */
- public AnnotationVisitor visitArray( final String name )
- {
+ public AnnotationVisitor visitArray(final String name) {
return this;
}
-
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultClassVisitor.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultClassVisitor.java
index d953188..300b39b 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultClassVisitor.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultClassVisitor.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.asm;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer.asm;
import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.ClassVisitor;
@@ -28,16 +27,13 @@ import org.objectweb.asm.Type;
import org.objectweb.asm.signature.SignatureReader;
import org.objectweb.asm.signature.SignatureVisitor;
-
/**
* Computes the set of classes referenced by visited code.
* Inspired by <code>org.objectweb.asm.depend.DependencyVisitor</code> in the ASM dependencies example.
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
-public class DefaultClassVisitor
- extends ClassVisitor
-{
+public class DefaultClassVisitor extends ClassVisitor {
private final ResultCollector resultCollector;
private final SignatureVisitor signatureVisitor;
@@ -57,11 +53,13 @@ public class DefaultClassVisitor
* @param methodVisitor a {@link org.objectweb.asm.MethodVisitor} object.
* @param resultCollector a {@link org.apache.maven.shared.dependency.analyzer.asm.ResultCollector} object.
*/
- public DefaultClassVisitor( SignatureVisitor signatureVisitor, AnnotationVisitor annotationVisitor,
- FieldVisitor fieldVisitor, MethodVisitor methodVisitor,
- ResultCollector resultCollector )
- {
- super( Opcodes.ASM9 );
+ public DefaultClassVisitor(
+ SignatureVisitor signatureVisitor,
+ AnnotationVisitor annotationVisitor,
+ FieldVisitor fieldVisitor,
+ MethodVisitor methodVisitor,
+ ResultCollector resultCollector) {
+ super(Opcodes.ASM9);
this.signatureVisitor = signatureVisitor;
this.annotationVisitor = annotationVisitor;
this.fieldVisitor = fieldVisitor;
@@ -79,44 +77,39 @@ public class DefaultClassVisitor
* @param superName a {@link java.lang.String} object.
* @param interfaces an array of {@link java.lang.String} objects.
*/
- public void visit( final int version, final int access, final String name, final String signature,
- final String superName, final String[] interfaces )
- {
- if ( signature == null )
- {
- resultCollector.addName( superName );
- resultCollector.addNames( interfaces );
- }
- else
- {
- addSignature( signature );
+ public void visit(
+ final int version,
+ final int access,
+ final String name,
+ final String signature,
+ final String superName,
+ final String[] interfaces) {
+ if (signature == null) {
+ resultCollector.addName(superName);
+ resultCollector.addNames(interfaces);
+ } else {
+ addSignature(signature);
}
}
/** {@inheritDoc} */
- public AnnotationVisitor visitAnnotation( final String desc, final boolean visible )
- {
- resultCollector.addDesc( desc );
+ public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
+ resultCollector.addDesc(desc);
return annotationVisitor;
}
/** {@inheritDoc} */
- public FieldVisitor visitField( final int access, final String name, final String desc, final String signature,
- final Object value )
- {
- if ( signature == null )
- {
- resultCollector.addDesc( desc );
- }
- else
- {
- addTypeSignature( signature );
+ public FieldVisitor visitField(
+ final int access, final String name, final String desc, final String signature, final Object value) {
+ if (signature == null) {
+ resultCollector.addDesc(desc);
+ } else {
+ addTypeSignature(signature);
}
- if ( value instanceof Type )
- {
- resultCollector.addType( (Type) value );
+ if (value instanceof Type) {
+ resultCollector.addType((Type) value);
}
return fieldVisitor;
@@ -132,48 +125,38 @@ public class DefaultClassVisitor
* @param exceptions an array of {@link java.lang.String} objects.
* @return a {@link org.objectweb.asm.MethodVisitor} object.
*/
- public MethodVisitor visitMethod( final int access, final String name, final String desc, final String signature,
- final String[] exceptions )
- {
- if ( signature == null )
- {
- resultCollector.addMethodDesc( desc );
- }
- else
- {
- addSignature( signature );
+ public MethodVisitor visitMethod(
+ final int access, final String name, final String desc, final String signature, final String[] exceptions) {
+ if (signature == null) {
+ resultCollector.addMethodDesc(desc);
+ } else {
+ addSignature(signature);
}
- resultCollector.addNames( exceptions );
+ resultCollector.addNames(exceptions);
return methodVisitor;
}
/** {@inheritDoc} */
- public void visitNestHost( final String nestHost )
- {
- resultCollector.addName( nestHost );
+ public void visitNestHost(final String nestHost) {
+ resultCollector.addName(nestHost);
}
/** {@inheritDoc} */
- public void visitNestMember( final String nestMember )
- {
- resultCollector.addName( nestMember );
+ public void visitNestMember(final String nestMember) {
+ resultCollector.addName(nestMember);
}
- private void addSignature( final String signature )
- {
- if ( signature != null )
- {
- new SignatureReader( signature ).accept( signatureVisitor );
+ private void addSignature(final String signature) {
+ if (signature != null) {
+ new SignatureReader(signature).accept(signatureVisitor);
}
}
- private void addTypeSignature( final String signature )
- {
- if ( signature != null )
- {
- new SignatureReader( signature ).acceptType( signatureVisitor );
+ private void addTypeSignature(final String signature) {
+ if (signature != null) {
+ new SignatureReader(signature).acceptType(signatureVisitor);
}
}
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultFieldVisitor.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultFieldVisitor.java
index fe8a11c..ee3af37 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultFieldVisitor.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultFieldVisitor.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.asm;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer.asm;
import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.FieldVisitor;
@@ -29,9 +28,7 @@ import org.objectweb.asm.Opcodes;
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
-public class DefaultFieldVisitor
- extends FieldVisitor
-{
+public class DefaultFieldVisitor extends FieldVisitor {
private final AnnotationVisitor annotationVisitor;
private final ResultCollector resultCollector;
@@ -42,19 +39,16 @@ public class DefaultFieldVisitor
* @param annotationVisitor a {@link org.objectweb.asm.AnnotationVisitor} object.
* @param resultCollector a {@link org.apache.maven.shared.dependency.analyzer.asm.ResultCollector} object.
*/
- public DefaultFieldVisitor( AnnotationVisitor annotationVisitor, ResultCollector resultCollector )
- {
- super( Opcodes.ASM9 );
+ public DefaultFieldVisitor(AnnotationVisitor annotationVisitor, ResultCollector resultCollector) {
+ super(Opcodes.ASM9);
this.annotationVisitor = annotationVisitor;
this.resultCollector = resultCollector;
}
/** {@inheritDoc} */
- public AnnotationVisitor visitAnnotation( final String desc, final boolean visible )
- {
- resultCollector.addDesc( desc );
+ public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
+ resultCollector.addDesc(desc);
return annotationVisitor;
}
-
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultMethodVisitor.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultMethodVisitor.java
index 49723fc..996193d 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultMethodVisitor.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultMethodVisitor.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.asm;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer.asm;
import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.Label;
@@ -34,9 +33,7 @@ import org.objectweb.asm.signature.SignatureVisitor;
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
-public class DefaultMethodVisitor
- extends MethodVisitor
-{
+public class DefaultMethodVisitor extends MethodVisitor {
private final AnnotationVisitor annotationVisitor;
private final SignatureVisitor signatureVisitor;
@@ -50,67 +47,57 @@ public class DefaultMethodVisitor
* @param signatureVisitor a {@link org.objectweb.asm.signature.SignatureVisitor} object.
* @param resultCollector a {@link org.apache.maven.shared.dependency.analyzer.asm.ResultCollector} object.
*/
- public DefaultMethodVisitor( AnnotationVisitor annotationVisitor, SignatureVisitor signatureVisitor,
- ResultCollector resultCollector )
- {
- super( Opcodes.ASM9 );
+ public DefaultMethodVisitor(
+ AnnotationVisitor annotationVisitor, SignatureVisitor signatureVisitor, ResultCollector resultCollector) {
+ super(Opcodes.ASM9);
this.annotationVisitor = annotationVisitor;
this.signatureVisitor = signatureVisitor;
this.resultCollector = resultCollector;
}
/** {@inheritDoc} */
- public AnnotationVisitor visitAnnotation( final String desc, final boolean visible )
- {
- resultCollector.addDesc( desc );
+ public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
+ resultCollector.addDesc(desc);
return annotationVisitor;
}
/** {@inheritDoc} */
@Override
- public AnnotationVisitor visitTypeAnnotation( int typeRef, TypePath typePath, String desc, boolean visible )
- {
- resultCollector.addDesc( desc );
+ public AnnotationVisitor visitTypeAnnotation(int typeRef, TypePath typePath, String desc, boolean visible) {
+ resultCollector.addDesc(desc);
return annotationVisitor;
}
/** {@inheritDoc} */
- public AnnotationVisitor visitParameterAnnotation( final int parameter, final String desc, final boolean visible )
- {
- resultCollector.addDesc( desc );
+ public AnnotationVisitor visitParameterAnnotation(final int parameter, final String desc, final boolean visible) {
+ resultCollector.addDesc(desc);
return annotationVisitor;
}
/** {@inheritDoc} */
@Override
- public AnnotationVisitor visitLocalVariableAnnotation( int typeRef, TypePath typePath, Label[] start, Label[] end,
- int[] index, String desc, boolean visible )
- {
- resultCollector.addDesc( desc );
+ public AnnotationVisitor visitLocalVariableAnnotation(
+ int typeRef, TypePath typePath, Label[] start, Label[] end, int[] index, String desc, boolean visible) {
+ resultCollector.addDesc(desc);
return annotationVisitor;
}
/** {@inheritDoc} */
- public void visitTypeInsn( final int opcode, final String desc )
- {
- if ( desc.charAt( 0 ) == '[' )
- {
- resultCollector.addDesc( desc );
- }
- else
- {
- resultCollector.addName( desc );
+ public void visitTypeInsn(final int opcode, final String desc) {
+ if (desc.charAt(0) == '[') {
+ resultCollector.addDesc(desc);
+ } else {
+ resultCollector.addName(desc);
}
}
/** {@inheritDoc} */
- public void visitFieldInsn( final int opcode, final String owner, final String name, final String desc )
- {
- resultCollector.addName( owner );
+ public void visitFieldInsn(final int opcode, final String owner, final String name, final String desc) {
+ resultCollector.addName(owner);
/*
* NOTE: Merely accessing a field does not impose a direct dependency on its type. For example, the code line
* <code>java.lang.Object var = bean.field;</code> does not directly depend on the type of the field. A direct
@@ -121,51 +108,45 @@ public class DefaultMethodVisitor
/** {@inheritDoc} */
@Override
- public void visitMethodInsn( int opcode, String owner, String name, String desc, boolean itf )
- {
- resultCollector.addName( owner );
+ public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
+ resultCollector.addName(owner);
}
/** {@inheritDoc} */
- public void visitLdcInsn( final Object cst )
- {
- if ( cst instanceof Type )
- {
- resultCollector.addType( (Type) cst );
+ public void visitLdcInsn(final Object cst) {
+ if (cst instanceof Type) {
+ resultCollector.addType((Type) cst);
}
}
/** {@inheritDoc} */
- public void visitMultiANewArrayInsn( final String desc, final int dims )
- {
- resultCollector.addDesc( desc );
+ public void visitMultiANewArrayInsn(final String desc, final int dims) {
+ resultCollector.addDesc(desc);
}
/** {@inheritDoc} */
- public void visitTryCatchBlock( final Label start, final Label end, final Label handler, final String type )
- {
- resultCollector.addName( type );
+ public void visitTryCatchBlock(final Label start, final Label end, final Label handler, final String type) {
+ resultCollector.addName(type);
}
/** {@inheritDoc} */
- public void visitLocalVariable( final String name, final String desc, final String signature, final Label start,
- final Label end, final int index )
- {
- if ( signature == null )
- {
- resultCollector.addDesc( desc );
- }
- else
- {
- addTypeSignature( signature );
+ public void visitLocalVariable(
+ final String name,
+ final String desc,
+ final String signature,
+ final Label start,
+ final Label end,
+ final int index) {
+ if (signature == null) {
+ resultCollector.addDesc(desc);
+ } else {
+ addTypeSignature(signature);
}
}
- private void addTypeSignature( final String signature )
- {
- if ( signature != null )
- {
- new SignatureReader( signature ).acceptType( signatureVisitor );
+ private void addTypeSignature(final String signature) {
+ if (signature != null) {
+ new SignatureReader(signature).acceptType(signatureVisitor);
}
}
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultSignatureVisitor.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultSignatureVisitor.java
index 4bd3e82..23b0858 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultSignatureVisitor.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DefaultSignatureVisitor.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.asm;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer.asm;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.signature.SignatureVisitor;
@@ -28,9 +27,7 @@ import org.objectweb.asm.signature.SignatureVisitor;
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
-public class DefaultSignatureVisitor
- extends SignatureVisitor
-{
+public class DefaultSignatureVisitor extends SignatureVisitor {
private final ResultCollector resultCollector;
/**
@@ -38,21 +35,18 @@ public class DefaultSignatureVisitor
*
* @param resultCollector a {@link org.apache.maven.shared.dependency.analyzer.asm.ResultCollector} object.
*/
- public DefaultSignatureVisitor( ResultCollector resultCollector )
- {
- super( Opcodes.ASM9 );
+ public DefaultSignatureVisitor(ResultCollector resultCollector) {
+ super(Opcodes.ASM9);
this.resultCollector = resultCollector;
}
/** {@inheritDoc} */
- public void visitClassType( final String name )
- {
- resultCollector.addName( name );
+ public void visitClassType(final String name) {
+ resultCollector.addName(name);
}
/** {@inheritDoc} */
- public void visitInnerClassType( final String name )
- {
- resultCollector.addName( name );
+ public void visitInnerClassType(final String name) {
+ resultCollector.addName(name);
}
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DependencyClassFileVisitor.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DependencyClassFileVisitor.java
index f8a1e79..8c1cd3d 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DependencyClassFileVisitor.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/DependencyClassFileVisitor.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.asm;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* "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
+ * 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
@@ -18,19 +16,22 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer.asm;
import java.io.IOException;
import java.io.InputStream;
import java.util.Set;
+import org.apache.commons.io.IOUtils;
import org.apache.maven.shared.dependency.analyzer.ClassFileVisitor;
-import org.codehaus.plexus.util.IOUtil;
import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.signature.SignatureVisitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Computes the set of classes referenced by visited class files, using
@@ -39,50 +40,41 @@ import org.objectweb.asm.signature.SignatureVisitor;
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
* @see #getDependencies()
*/
-public class DependencyClassFileVisitor
- implements ClassFileVisitor
-{
+public class DependencyClassFileVisitor implements ClassFileVisitor {
private final ResultCollector resultCollector = new ResultCollector();
+ private final Logger logger = LoggerFactory.getLogger(getClass());
+
/**
* <p>Constructor for DependencyClassFileVisitor.</p>
*/
- public DependencyClassFileVisitor()
- {
- }
+ public DependencyClassFileVisitor() {}
/** {@inheritDoc} */
- public void visitClass( String className, InputStream in )
- {
- try
- {
- byte[] byteCode = IOUtil.toByteArray( in );
- ClassReader reader = new ClassReader( byteCode );
+ public void visitClass(String className, InputStream in) {
+ try {
+ byte[] byteCode = IOUtils.toByteArray(in);
+ ClassReader reader = new ClassReader(byteCode);
- final Set<String> constantPoolClassRefs = ConstantPoolParser.getConstantPoolClassReferences( byteCode );
- for ( String string : constantPoolClassRefs )
- {
- resultCollector.addName( string );
+ final Set<String> constantPoolClassRefs = ConstantPoolParser.getConstantPoolClassReferences(byteCode);
+ for (String string : constantPoolClassRefs) {
+ resultCollector.addName(string);
}
- AnnotationVisitor annotationVisitor = new DefaultAnnotationVisitor( resultCollector );
- SignatureVisitor signatureVisitor = new DefaultSignatureVisitor( resultCollector );
- FieldVisitor fieldVisitor = new DefaultFieldVisitor( annotationVisitor, resultCollector );
- MethodVisitor mv = new DefaultMethodVisitor( annotationVisitor, signatureVisitor, resultCollector );
+ AnnotationVisitor annotationVisitor = new DefaultAnnotationVisitor(resultCollector);
+ SignatureVisitor signatureVisitor = new DefaultSignatureVisitor(resultCollector);
+ FieldVisitor fieldVisitor = new DefaultFieldVisitor(annotationVisitor, resultCollector);
+ MethodVisitor mv = new DefaultMethodVisitor(annotationVisitor, signatureVisitor, resultCollector);
ClassVisitor classVisitor =
- new DefaultClassVisitor( signatureVisitor, annotationVisitor, fieldVisitor, mv, resultCollector );
+ new DefaultClassVisitor(signatureVisitor, annotationVisitor, fieldVisitor, mv, resultCollector);
- reader.accept( classVisitor, 0 );
- }
- catch ( IOException exception )
- {
+ reader.accept(classVisitor, 0);
+ } catch (IOException exception) {
exception.printStackTrace();
- }
- catch ( IndexOutOfBoundsException e )
- {
+ } catch (IndexOutOfBoundsException e) {
// some bug inside ASM causes an IOB exception. Log it and move on?
// this happens when the class isn't valid.
- System.out.println( "Unable to process: " + className );
+ logger.warn("Unable to process: " + className);
}
}
@@ -91,8 +83,7 @@ public class DependencyClassFileVisitor
*
* @return the set of classes referenced by visited class files
*/
- public Set<String> getDependencies()
- {
+ public Set<String> getDependencies() {
return resultCollector.getDependencies();
}
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ResultCollector.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ResultCollector.java
index 970d5cf..f42065f 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ResultCollector.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ResultCollector.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.asm;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer.asm;
import java.util.HashSet;
import java.util.Set;
@@ -29,8 +28,7 @@ import org.objectweb.asm.Type;
*
* @author Kristian Rosenvold
*/
-public class ResultCollector
-{
+public class ResultCollector {
private final Set<String> classes = new HashSet<>();
@@ -39,8 +37,7 @@ public class ResultCollector
*
* @return a {@link java.util.Set} object.
*/
- public Set<String> getDependencies()
- {
+ public Set<String> getDependencies() {
return classes;
}
@@ -49,49 +46,40 @@ public class ResultCollector
*
* @param name a {@link java.lang.String} object.
*/
- public void addName( String name )
- {
- if ( name == null )
- {
+ public void addName(String name) {
+ if (name == null) {
return;
}
// decode arrays
- if ( name.charAt( 0 ) == '[' )
- {
+ if (name.charAt(0) == '[') {
int i = 0;
- do
- {
+ do {
++i;
- }
- while ( name.charAt( i ) == '[' ); // could have array of array ...
- if ( name.charAt( i ) != 'L' )
- {
+ } while (name.charAt(i) == '['); // could have array of array ...
+ if (name.charAt(i) != 'L') {
// ignore array of scalar types
return;
}
- name = name.substring( i + 1, name.length() - 1 );
+ name = name.substring(i + 1, name.length() - 1);
}
// decode internal representation
- add( name.replace( '/', '.' ) );
+ add(name.replace('/', '.'));
}
- void addDesc( final String desc )
- {
- addType( Type.getType( desc ) );
+ void addDesc(final String desc) {
+ addType(Type.getType(desc));
}
- void addType( final Type t )
- {
- switch ( t.getSort() )
- {
+ void addType(final Type t) {
+ switch (t.getSort()) {
case Type.ARRAY:
- addType( t.getElementType() );
+ addType(t.getElementType());
break;
case Type.OBJECT:
- addName( t.getClassName() );
+ addName(t.getClassName());
break;
default:
@@ -103,37 +91,30 @@ public class ResultCollector
*
* @param name a {@link java.lang.String} object.
*/
- public void add( String name )
- {
+ public void add(String name) {
// inner classes have equivalent compilation requirement as container class
- if ( name.indexOf( '$' ) < 0 )
- {
- classes.add( name );
+ if (name.indexOf('$') < 0) {
+ classes.add(name);
}
}
- void addNames( final String[] names )
- {
- if ( names == null )
- {
+ void addNames(final String[] names) {
+ if (names == null) {
return;
}
- for ( String name : names )
- {
- addName( name );
+ for (String name : names) {
+ addName(name);
}
}
- void addMethodDesc( final String desc )
- {
- addType( Type.getReturnType( desc ) );
+ void addMethodDesc(final String desc) {
+ addType(Type.getReturnType(desc));
- Type[] types = Type.getArgumentTypes( desc );
+ Type[] types = Type.getArgumentTypes(desc);
- for ( Type type : types )
- {
- addType( type );
+ for (Type type : types) {
+ addType(type);
}
}
}
diff --git a/src/site/xdoc/download.xml.vm b/src/site/xdoc/download.xml.vm
index 666d997..2b848a9 100644
--- a/src/site/xdoc/download.xml.vm
+++ b/src/site/xdoc/download.xml.vm
@@ -23,102 +23,51 @@ under the License.
<properties>
<title>Download ${project.name} Source</title>
</properties>
+
<body>
<section name="Download ${project.name} ${project.version} Source">
- <p>${project.name} ${project.version} is distributed in source format. Use a source archive if you intend to build
- ${project.name} yourself. Otherwise, simply use the ready-made binary artifacts from central repository.</p>
-
- <p>You will be prompted for a mirror - if the file is not found on yours, please be patient, as it may take 24
- hours to reach all mirrors.<p/>
-
- <p>In order to guard against corrupted downloads/installations, it is highly recommended to
- <a href="http://www.apache.org/dev/release-signing#verifying-signature">verify the signature</a>
- of the release bundles against the public <a href="https://www.apache.org/dist/maven/KEYS">KEYS</a> used by the Apache Maven
- developers.</p>
+ <p><strong>${project.name} ${project.version}</strong> is distributed in source format.</p>
- <p>${project.name} is distributed under the <a href="http://www.apache.org/licenses/">Apache License, version 2.0</a>.</p>
+ <p>Use a source archive if you intend to build <strong>${project.name}</strong> yourself.</p>
- <p></p>We <b>strongly</b> encourage our users to configure a Maven repository mirror closer to their location, please read <a href="/guides/mini/guide-mirror-settings.html">How to Use Mirrors for Repositories</a>.</p>
-
- <a name="mirror"/>
- <subsection name="Mirror">
-
- <p>
- [if-any logo]
- <a href="[link]">
- <img align="right" src="[logo]" border="0"
- alt="logo"/>
- </a>
- [end]
- The currently selected mirror is
- <b>[preferred]</b>.
- If you encounter a problem with this mirror,
- please select another mirror.
- If all mirrors are failing, there are
- <i>backup</i>
- mirrors
- (at the end of the mirrors list) that should be available.
- </p>
+ <p>Otherwise, simply use the ready-made binary artifacts from <strong>central repository</strong>.</p>
- <form action="[location]" method="get" id="SelectMirror">
- Other mirrors:
- <select name="Preferred">
- [if-any http]
- [for http]
- <option value="[http]">[http]</option>
- [end]
- [end]
- [if-any ftp]
- [for ftp]
- <option value="[ftp]">[ftp]</option>
- [end]
- [end]
- [if-any backup]
- [for backup]
- <option value="[backup]">[backup] (backup)</option>
- [end]
- [end]
- </select>
- <input type="submit" value="Change"/>
- </form>
+ <p><strong>${project.name}</strong> is distributed under the <a href="https://www.apache.org/licenses/">Apache License, version 2.0</a>.</p>
- <p>
- You may also consult the
- <a href="http://www.apache.org/mirrors/">complete list of
- mirrors.</a>
+ <subsection name="Files">
+
+ <p>This is the current stable version of <strong>${project.name}</strong>.</p>
+
+ <table>
+ <thead>
+ <tr>
+ <th></th>
+ <th>Link</th>
+ <th>Checksum</th>
+ <th>Signature</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>${project.name} ${project.version} (Source zip)</td>
+ <td><a href="https://dlcdn.apache.org/maven/shared/${project.artifactId}-${project.version}-source-release.zip">${project.artifactId}-${project.version}-source-release.zip</a></td>
+ <td><a href="https://downloads.apache.org/maven/shared/${project.artifactId}-${project.version}-source-release.zip.sha512">${project.artifactId}-${project.version}-source-release.zip.sha512</a></td>
+ <td><a href="https://downloads.apache.org/maven/shared/${project.artifactId}-${project.version}-source-release.zip.asc">${project.artifactId}-${project.version}-source-release.zip.asc</a></td>
+ </tr>
+ </tbody>
+ </table>
+
+ <p>It is essential that you <a href="https://www.apache.org/info/verification.html">verify the integrity</a> of the downloaded file
+ using the checksum (.sha512 file)
+ or using the signature (.asc file) against the public <a href="https://downloads.apache.org/maven/KEYS">KEYS</a> used by the Apache Maven developers.
</p>
</subsection>
-
- <subsection name="${project.name} ${project.version}">
-
- <p>This is the current stable version of ${project.name}.</p>
-
- <table>
- <thead>
- <tr>
- <th></th>
- <th>Link</th>
- <th>Checksum</th>
- <th>Signature</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>${project.name} ${project.version} (Source zip)</td>
- <td><a href="[preferred]maven/shared/${project.artifactId}-${project.version}-source-release.zip">maven/shared/${project.artifactId}-${project.version}-source-release.zip</a></td>
- <td><a href="https://www.apache.org/dist/maven/shared/${project.artifactId}-${project.version}-source-release.zip.sha512">maven/shared/${project.artifactId}-${project.version}-source-release.zip.sha512</a></td>
- <td><a href="https://www.apache.org/dist/maven/shared/${project.artifactId}-${project.version}-source-release.zip.asc">maven/shared/${project.artifactId}-${project.version}-source-release.zip.asc</a></td>
- </tr>
- </tbody>
- </table>
- </subsection>
<subsection name="Previous Versions">
-
- <p>Older non-recommended releases can be found on our <a href="http://archive.apache.org/dist/maven/shared/">archive site</a>.</p>
-
+ <p>It is strongly recommended to use the latest release version of <strong>${project.name}</strong> to take advantage of the newest features and bug fixes.</p>
+ <p>Older non-recommended releases can be found on our <a href="https://archive.apache.org/dist/maven/shared/">archive site</a>.</p>
</subsection>
</section>
</body>
diff --git a/src/test/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtilsTest.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtilsTest.java
index e1d1f87..fb644e8 100644
--- a/src/test/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtilsTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/ClassFileVisitorUtilsTest.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,16 +16,12 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.File;
-import java.io.FileOutputStream;
+import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
@@ -37,162 +31,130 @@ import java.util.List;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
/**
* Tests <code>ClassFileVisitorUtils</code>.
- *
+ *
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
* @see ClassFileVisitorUtils
*/
-public class ClassFileVisitorUtilsTest
-{
- private MockVisitor visitor;
+class ClassFileVisitorUtilsTest {
+
+ @TempDir
+ private Path tempDir;
+
+ private TestVisitor visitor = new TestVisitor();
- private static class MockVisitor implements ClassFileVisitor
- {
+ private static class TestVisitor implements ClassFileVisitor {
final List<String> classNames = new ArrayList<>();
+
final List<String> data = new ArrayList<>();
@Override
- public void visitClass( String className, InputStream in )
- {
- classNames.add( className );
- try
- {
- List<String> lines = IOUtils.readLines( in, StandardCharsets.UTF_8 );
- data.addAll( lines );
- }
- catch ( IOException ex )
- {
- throw new RuntimeException( ex );
- }
+ public void visitClass(String className, InputStream in) {
+ classNames.add(className);
+ BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
+ reader.lines().forEach(data::add);
}
}
- @Before
- public void setUp()
- {
- visitor = new MockVisitor();
- }
-
@Test
- public void testAcceptJar() throws IOException
- {
- File file = File.createTempFile( "test", ".jar" );
- file.deleteOnExit();
-
- try ( JarOutputStream out = new JarOutputStream( new FileOutputStream( file ) ) )
- {
- addZipEntry( out, "a/b/c.class", "class a.b.c" );
- addZipEntry( out, "x/y/z.class", "class x.y.z" );
+ void testAcceptJar() throws IOException {
+ Path path = Files.createTempFile(tempDir, "test", ".jar");
+
+ try (JarOutputStream out = new JarOutputStream(Files.newOutputStream(path))) {
+ addZipEntry(out, "a/b/c.class", "class a.b.c");
+ addZipEntry(out, "x/y/z.class", "class x.y.z");
}
- ClassFileVisitorUtils.accept( file.toURI().toURL(), visitor );
+ ClassFileVisitorUtils.accept(path.toUri().toURL(), visitor);
- assertThat( visitor.classNames ).contains( "a.b.c" );
- assertThat( visitor.classNames ).contains( "x.y.z" );
- assertThat( visitor.data ).contains( "class a.b.c" );
- assertThat( visitor.data ).contains( "class x.y.z" );
+ assertThat(visitor.classNames).contains("a.b.c");
+ assertThat(visitor.classNames).contains("x.y.z");
+ assertThat(visitor.data).contains("class a.b.c");
+ assertThat(visitor.data).contains("class x.y.z");
}
@Test
- public void testAcceptJarWithNonClassEntry() throws IOException
- {
- File file = File.createTempFile( "test", ".jar" );
- file.deleteOnExit();
-
- try ( JarOutputStream out = new JarOutputStream( new FileOutputStream( file ) ) )
- {
- addZipEntry( out, "a/b/c.jpg", "jpeg a.b.c" );
+ void testAcceptJarWithNonClassEntry() throws IOException {
+ Path path = Files.createTempFile(tempDir, "test", ".jar");
+
+ try (JarOutputStream out = new JarOutputStream(Files.newOutputStream(path))) {
+ addZipEntry(out, "a/b/c.jpg", "jpeg a.b.c");
}
- ClassFileVisitorUtils.accept( file.toURI().toURL(), visitor );
+ ClassFileVisitorUtils.accept(path.toUri().toURL(), visitor);
- assertThat( visitor.classNames ) .isEmpty();
+ assertThat(visitor.classNames).isEmpty();
}
@Test
- public void testAcceptDir() throws IOException
- {
- Path dir = Files.createTempDirectory( "d-a-test" );
+ void testAcceptDir() throws IOException {
+ Path dir = Files.createTempDirectory(tempDir, "d-a-test");
- Path abDir = Files.createDirectories( dir.resolve( "a/b" ) );
- writeToFile( abDir, "c.class", "class a.b.c" );
+ Path abDir = Files.createDirectories(dir.resolve("a/b"));
+ writeToFile(abDir, "c.class", "class a.b.c");
- Path xyDir = Files.createDirectories( dir.resolve( "x/y" ) );
- writeToFile( xyDir, "z.class", "class x.y.z" );
+ Path xyDir = Files.createDirectories(dir.resolve("x/y"));
+ writeToFile(xyDir, "z.class", "class x.y.z");
- ClassFileVisitorUtils.accept( dir.toUri().toURL(), visitor );
+ ClassFileVisitorUtils.accept(dir.toUri().toURL(), visitor);
- FileUtils.deleteDirectory( dir.toFile() );
-
- assertThat( visitor.classNames ).contains( "a.b.c" );
- assertThat( visitor.classNames ).contains( "x.y.z" );
- assertThat( visitor.data ).contains( "class a.b.c" );
- assertThat( visitor.data ).contains( "class x.y.z" );
+ assertThat(visitor.classNames).contains("a.b.c");
+ assertThat(visitor.classNames).contains("x.y.z");
+ assertThat(visitor.data).contains("class a.b.c");
+ assertThat(visitor.data).contains("class x.y.z");
}
@Test
- public void testAcceptDirWithNonClassFile() throws IOException
- {
- Path dir = Files.createTempDirectory( "d-a-test" );
-
- Path abDir = Files.createDirectories( dir.resolve( "a/b" ) );
- writeToFile( abDir, "c.jpg", "jpeg a.b.c" );
+ void testAcceptDirWithNonClassFile() throws IOException {
+ Path dir = Files.createTempDirectory(tempDir, "d-a-test");
- ClassFileVisitorUtils.accept( dir.toUri().toURL(), visitor );
+ Path abDir = Files.createDirectories(dir.resolve("a/b"));
+ writeToFile(abDir, "c.jpg", "jpeg a.b.c");
- FileUtils.deleteDirectory( dir.toFile() );
+ ClassFileVisitorUtils.accept(dir.toUri().toURL(), visitor);
- assertThat( visitor.classNames ).isEmpty();
+ assertThat(visitor.classNames).isEmpty();
}
@Test
- public void testAcceptWithFile() throws IOException
- {
- File file = File.createTempFile( "test", ".class" );
- file.deleteOnExit();
-
- URL url = file.toURI().toURL();
-
- try
- {
- ClassFileVisitorUtils.accept( url, visitor );
- fail( "expected IllegalArgumentException" );
- }
- catch ( IllegalArgumentException exception )
- {
- assertThat( exception ).hasMessage( "Cannot accept visitor on URL: " + url );
+ void testAcceptWithFile() throws IOException {
+ Path path = Files.createTempFile(tempDir, "test", ".class");
+ URL url = path.toUri().toURL();
+
+ try {
+ ClassFileVisitorUtils.accept(url, visitor);
+ fail("expected IllegalArgumentException");
+ } catch (IllegalArgumentException exception) {
+ assertThat(exception).hasMessage("Cannot accept visitor on URL: " + url);
}
}
@Test
- public void testAcceptWithUnsupportedScheme() throws IOException
- {
- URL url = new URL( "http://localhost/" );
-
- try
- {
- ClassFileVisitorUtils.accept( url, visitor );
- fail( "expected IllegalArgumentException" );
- }
- catch ( IllegalArgumentException exception )
- {
- assertThat( exception ).hasMessage( "Cannot accept visitor on URL: " + url );
+ void testAcceptWithUnsupportedScheme() throws IOException {
+ URL url = new URL("http://localhost/");
+
+ try {
+ ClassFileVisitorUtils.accept(url, visitor);
+ fail("expected IllegalArgumentException");
+ } catch (IllegalArgumentException exception) {
+ assertThat(exception).hasMessage("Cannot accept visitor on URL: " + url);
}
}
- private void writeToFile( Path parent, String file, String data ) throws IOException
- {
- Files.write( parent.resolve( file ), data.getBytes( StandardCharsets.UTF_8 ) );
+ private void writeToFile(Path parent, String file, String data) throws IOException {
+ Files.write(parent.resolve(file), data.getBytes(StandardCharsets.UTF_8));
}
- private void addZipEntry( JarOutputStream out, String fileName, String content ) throws IOException
- {
- out.putNextEntry( new ZipEntry( fileName ) );
- byte[] bytes = content.getBytes( StandardCharsets.UTF_8 );
- out.write( bytes, 0, bytes.length );
+ private void addZipEntry(JarOutputStream out, String fileName, String content) throws IOException {
+ out.putNextEntry(new ZipEntry(fileName));
+ byte[] bytes = content.getBytes(StandardCharsets.UTF_8);
+ out.write(bytes, 0, bytes.length);
}
}
diff --git a/src/test/java/org/apache/maven/shared/dependency/analyzer/CollectorClassFileVisitorTest.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/CollectorClassFileVisitorTest.java
index 37579b1..9ae1faf 100644
--- a/src/test/java/org/apache/maven/shared/dependency/analyzer/CollectorClassFileVisitorTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/CollectorClassFileVisitorTest.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,13 +16,14 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
-
-import org.junit.Before;
-import org.junit.Test;
+package org.apache.maven.shared.dependency.analyzer;
import java.util.HashSet;
import java.util.Set;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
import static org.assertj.core.api.Assertions.assertThat;
/**
@@ -33,26 +32,23 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
* @see CollectorClassFileVisitor
*/
-public class CollectorClassFileVisitorTest
-{
+class CollectorClassFileVisitorTest {
private CollectorClassFileVisitor visitor;
- @Before
- public void setUp()
- {
+ @BeforeEach
+ void setUp() {
visitor = new CollectorClassFileVisitor();
}
@Test
- public void testVisitClass()
- {
- visitor.visitClass( "a.b.c", null );
- visitor.visitClass( "x.y.z", null );
+ void testVisitClass() {
+ visitor.visitClass("a.b.c", null);
+ visitor.visitClass("x.y.z", null);
Set<String> expected = new HashSet<>();
- expected.add( "a.b.c" );
- expected.add( "x.y.z" );
+ expected.add("a.b.c");
+ expected.add("x.y.z");
- assertThat( visitor.getClasses() ).isEqualTo( expected );
+ assertThat(visitor.getClasses()).isEqualTo(expected);
}
}
diff --git a/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultClassAnalyzerTest.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultClassAnalyzerTest.java
index 9bdfdb4..5edb864 100644
--- a/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultClassAnalyzerTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultClassAnalyzerTest.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,14 +16,9 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
-
-import org.codehaus.plexus.util.IOUtil;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+package org.apache.maven.shared.dependency.analyzer;
import java.io.ByteArrayOutputStream;
-import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@@ -37,6 +30,10 @@ import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
@@ -46,75 +43,57 @@ import static org.assertj.core.api.Assertions.fail;
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
* @see DefaultClassAnalyzer
*/
-public class DefaultClassAnalyzerTest
-{
- private Path file;
+class DefaultClassAnalyzerTest {
- @Before
- public void setUp() throws IOException
- {
- file = Files.createTempFile( "test", ".jar" );
- try ( JarOutputStream out = new JarOutputStream( new FileOutputStream( file.toFile() ) ) )
- {
- addZipEntry( out, "a/b/c.class", "class a.b.c" );
- addZipEntry( out, "x/y/z.class", "class x.y.z" );
- }
- }
+ @TempDir
+ private Path tempDir;
- @After
- public void cleanup() throws IOException
- {
- if ( file != null )
- {
- Files.deleteIfExists( file );
+ private Path file;
+
+ @BeforeEach
+ void setUp() throws IOException {
+ file = Files.createTempFile(tempDir, "test", ".jar");
+ try (JarOutputStream out = new JarOutputStream(new FileOutputStream(file.toFile()))) {
+ addZipEntry(out, "a/b/c.class", "class a.b.c");
+ addZipEntry(out, "x/y/z.class", "class x.y.z");
}
}
@Test
- public void testAnalyzeWithJar() throws IOException
- {
+ void testAnalyzeWithJar() throws IOException {
Set<String> expectedClasses = new HashSet<>();
- expectedClasses.add( "a.b.c" );
- expectedClasses.add( "x.y.z" );
+ expectedClasses.add("a.b.c");
+ expectedClasses.add("x.y.z");
DefaultClassAnalyzer analyzer = new DefaultClassAnalyzer();
- Set<String> actualClasses = analyzer.analyze( file.toUri().toURL() );
+ Set<String> actualClasses = analyzer.analyze(file.toUri().toURL());
- assertThat( actualClasses ).isEqualTo( expectedClasses );
+ assertThat(actualClasses).isEqualTo(expectedClasses);
}
@Test
- public void testAnalyzeBadJar() throws IOException
- {
- //to reproduce MDEP-143
+ void testAnalyzeBadJar() throws IOException {
+ // to reproduce MDEP-143
// corrupt the jar file by altering its contents
- FileInputStream fis = new FileInputStream( file.toFile() );
- ByteArrayOutputStream baos = new ByteArrayOutputStream( 100 );
- IOUtil.copy( fis, baos, 100 );
- fis.close();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(100);
+ Files.copy(file, baos);
byte[] ba = baos.toByteArray();
ba[50] = 1;
- FileOutputStream fos = new FileOutputStream( file.toFile() );
- IOUtil.copy( ba, fos );
- fos.close();
+ Files.write(file, ba);
ClassAnalyzer analyzer = new DefaultClassAnalyzer();
- try
- {
- analyzer.analyze( file.toUri().toURL() );
- fail( "Exception expected" );
- }
- catch ( ZipException e )
- {
- assertThat( e ).hasMessageStartingWith( "Cannot process Jar entry on URL:" );
+ try {
+ analyzer.analyze(file.toUri().toURL());
+ fail("Exception expected");
+ } catch (ZipException e) {
+ assertThat(e).hasMessageStartingWith("Cannot process Jar entry on URL:");
}
}
- private void addZipEntry( JarOutputStream out, String fileName, String content ) throws IOException
- {
- out.putNextEntry( new ZipEntry( fileName ) );
- byte[] bytes = content.getBytes( StandardCharsets.UTF_8 );
- out.write( bytes, 0, bytes.length );
+ private void addZipEntry(JarOutputStream out, String fileName, String content) throws IOException {
+ out.putNextEntry(new ZipEntry(fileName));
+ byte[] bytes = content.getBytes(StandardCharsets.UTF_8);
+ out.write(bytes, 0, bytes.length);
}
}
diff --git a/src/test/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalysisTest.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalysisTest.java
index 09e519d..f7389e9 100644
--- a/src/test/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalysisTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalysisTest.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,6 +16,7 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer;
import java.util.Arrays;
import java.util.HashSet;
@@ -26,7 +25,7 @@ import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DefaultArtifact;
import org.apache.maven.artifact.versioning.VersionRange;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
@@ -36,59 +35,51 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
* @see ProjectDependencyAnalysis
*/
-public class ProjectDependencyAnalysisTest
-{
+class ProjectDependencyAnalysisTest {
@Test
- public void testConstructor()
- {
+ void testConstructor() {
Set<Artifact> usedDeclaredArtifacts = new HashSet<>();
Set<Artifact> usedUndeclaredArtifacts = new HashSet<>();
Set<Artifact> unusedDeclaredArtifacts = new HashSet<>();
Set<Artifact> testArtifactsWithNonTestScope = new HashSet<>();
- ProjectDependencyAnalysis analysis =
- new ProjectDependencyAnalysis( usedDeclaredArtifacts, usedUndeclaredArtifacts, unusedDeclaredArtifacts,
- testArtifactsWithNonTestScope );
+ ProjectDependencyAnalysis analysis = new ProjectDependencyAnalysis(
+ usedDeclaredArtifacts, usedUndeclaredArtifacts, unusedDeclaredArtifacts, testArtifactsWithNonTestScope);
- assertThat( analysis.getUsedDeclaredArtifacts() ).isEqualTo( usedDeclaredArtifacts );
- assertThat( analysis.getUsedUndeclaredArtifacts() ).isEqualTo( usedUndeclaredArtifacts );
- assertThat( analysis.getUnusedDeclaredArtifacts() ).isEqualTo( unusedDeclaredArtifacts );
+ assertThat(analysis.getUsedDeclaredArtifacts()).isEqualTo(usedDeclaredArtifacts);
+ assertThat(analysis.getUsedUndeclaredArtifacts()).isEqualTo(usedUndeclaredArtifacts);
+ assertThat(analysis.getUnusedDeclaredArtifacts()).isEqualTo(unusedDeclaredArtifacts);
}
@Test
- public void ignoreNonCompileShouldFilterOnlyUnusedDeclare()
- {
- Artifact artifactCompile = aTestArtifact( "test1", Artifact.SCOPE_COMPILE );
- Artifact artifactProvided = aTestArtifact( "test2", Artifact.SCOPE_PROVIDED );
- Artifact artifactTest = aTestArtifact( "test3", Artifact.SCOPE_TEST );
+ void ignoreNonCompileShouldFilterOnlyUnusedDeclare() {
+ Artifact artifactCompile = aTestArtifact("test1", Artifact.SCOPE_COMPILE);
+ Artifact artifactProvided = aTestArtifact("test2", Artifact.SCOPE_PROVIDED);
+ Artifact artifactTest = aTestArtifact("test3", Artifact.SCOPE_TEST);
ProjectDependencyAnalysis analysis = new ProjectDependencyAnalysis(
- asSet( artifactCompile, artifactProvided, artifactTest ),
- asSet( artifactCompile, artifactProvided, artifactTest ),
- asSet( artifactCompile, artifactProvided, artifactTest ),
- asSet( artifactCompile, artifactProvided, artifactTest ) );
+ asSet(artifactCompile, artifactProvided, artifactTest),
+ asSet(artifactCompile, artifactProvided, artifactTest),
+ asSet(artifactCompile, artifactProvided, artifactTest),
+ asSet(artifactCompile, artifactProvided, artifactTest));
ProjectDependencyAnalysis compileOnlyAnalysis = analysis.ignoreNonCompile();
- assertThat( compileOnlyAnalysis.getUsedDeclaredArtifacts() ).hasSize( 3 );
- assertThat( compileOnlyAnalysis.getUsedUndeclaredArtifacts() ).hasSize( 3 );
+ assertThat(compileOnlyAnalysis.getUsedDeclaredArtifacts()).hasSize(3);
+ assertThat(compileOnlyAnalysis.getUsedUndeclaredArtifacts()).hasSize(3);
- assertThat( compileOnlyAnalysis.getUnusedDeclaredArtifacts() )
- .hasSize( 1 )
- .allSatisfy( a -> assertThat( a.getScope() ).isEqualTo( Artifact.SCOPE_COMPILE ) );
+ assertThat(compileOnlyAnalysis.getUnusedDeclaredArtifacts()).hasSize(1).allSatisfy(a -> assertThat(a.getScope())
+ .isEqualTo(Artifact.SCOPE_COMPILE));
- assertThat( compileOnlyAnalysis.getTestArtifactsWithNonTestScope() )
- .hasSize( 3 );
+ assertThat(compileOnlyAnalysis.getTestArtifactsWithNonTestScope()).hasSize(3);
}
- private <T> Set<T> asSet( T... items )
- {
- return new HashSet<>( Arrays.asList( items ) );
+ private <T> Set<T> asSet(T... items) {
+ return new HashSet<>(Arrays.asList(items));
}
- private Artifact aTestArtifact( String artifactId, String scope )
- {
- return new DefaultArtifact( "groupId", artifactId, VersionRange.createFromVersion( "1.0" ),
- scope, "jar", "", null );
+ private Artifact aTestArtifact(String artifactId, String scope) {
+ return new DefaultArtifact(
+ "groupId", artifactId, VersionRange.createFromVersion("1.0"), scope, "jar", "", null);
}
}
diff --git a/src/test/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalyzerExceptionTest.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalyzerExceptionTest.java
index eece33e..1d2f72c 100644
--- a/src/test/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalyzerExceptionTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/ProjectDependencyAnalyzerExceptionTest.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer;
* "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
+ * 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
@@ -18,31 +16,29 @@ package org.apache.maven.shared.dependency.analyzer;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests <code>ProjectDependencyAnalyzerException</code>.
- *
+ *
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
* @see ProjectDependencyAnalyzerException
*/
-public class ProjectDependencyAnalyzerExceptionTest
-{
+class ProjectDependencyAnalyzerExceptionTest {
@Test
- public void testConstructor()
- {
- assertThat( new ProjectDependencyAnalyzerException( "a" ) ).hasMessage( "a" );
+ void testConstructor() {
+ assertThat(new ProjectDependencyAnalyzerException("a")).hasMessage("a");
}
@Test
- public void testConstructorWithThrowable()
- {
+ void testConstructorWithThrowable() {
Throwable throwable = new Exception();
- ProjectDependencyAnalyzerException exception = new ProjectDependencyAnalyzerException( "a", throwable );
+ ProjectDependencyAnalyzerException exception = new ProjectDependencyAnalyzerException("a", throwable);
- assertThat( exception ).hasMessage( "a" ).hasCause( throwable );
+ assertThat(exception).hasMessage("a").hasCause(throwable);
}
}
diff --git a/src/test/java/org/apache/maven/shared/dependency/analyzer/asm/ASMDependencyAnalyzerTest.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/asm/ASMDependencyAnalyzerTest.java
index 27623e3..cecf685 100644
--- a/src/test/java/org/apache/maven/shared/dependency/analyzer/asm/ASMDependencyAnalyzerTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/asm/ASMDependencyAnalyzerTest.java
@@ -1,46 +1,43 @@
-package org.apache.maven.shared.dependency.analyzer.asm;
-
-/*
- * 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.
- */
-
-import java.net.URL;
-import java.util.Set;
-
-import org.apache.maven.shared.dependency.analyzer.DependencyAnalyzer;
-import org.junit.Test;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class ASMDependencyAnalyzerTest
-{
- private final DependencyAnalyzer analyzer = new ASMDependencyAnalyzer();
-
- @Test
- public void test() throws Exception
- {
- URL jarUrl = this.getClass().getResource( "/org/objectweb/asm/ClassReader.class" );
- assertThat( jarUrl ).isNotNull();
- String fileUrl = jarUrl.toString().substring( "jar:".length(), jarUrl.toString().indexOf( "!/" ) );
-
- Set<String> result = analyzer.analyze( new URL( fileUrl ) );
-
- assertThat( result ).isNotEmpty();
- }
-
-}
+/*
+ * 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 org.apache.maven.shared.dependency.analyzer.asm;
+
+import java.net.URL;
+import java.util.Set;
+
+import org.apache.maven.shared.dependency.analyzer.DependencyAnalyzer;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class ASMDependencyAnalyzerTest {
+ private final DependencyAnalyzer analyzer = new ASMDependencyAnalyzer();
+
+ @Test
+ void test() throws Exception {
+ URL jarUrl = this.getClass().getResource("/org/objectweb/asm/ClassReader.class");
+ assertThat(jarUrl).isNotNull();
+ String fileUrl =
+ jarUrl.toString().substring("jar:".length(), jarUrl.toString().indexOf("!/"));
+
+ Set<String> result = analyzer.analyze(new URL(fileUrl));
+
+ assertThat(result).isNotEmpty();
+ }
+}
diff --git a/src/test/java/org/apache/maven/shared/dependency/analyzer/asm/DependencyVisitorTest.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/asm/DependencyVisitorTest.java
index 4a51b15..8ee3c44 100644
--- a/src/test/java/org/apache/maven/shared/dependency/analyzer/asm/DependencyVisitorTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/asm/DependencyVisitorTest.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.asm;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* "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
+ * 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
@@ -18,155 +16,148 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer.asm;
-import org.junit.Before;
-import org.junit.Test;
-import org.objectweb.asm.*;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.objectweb.asm.AnnotationVisitor;
+import org.objectweb.asm.Attribute;
+import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.Type;
import org.objectweb.asm.signature.SignatureVisitor;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests <code>DependencyVisitor</code>.
- *
+ *
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
-public class DependencyVisitorTest
-{
+class DependencyVisitorTest {
private final ResultCollector resultCollector = new ResultCollector();
private DefaultClassVisitor visitor;
private MethodVisitor mv;
- @Before
- public void setUp()
- {
- AnnotationVisitor annotationVisitor = new DefaultAnnotationVisitor( resultCollector );
- SignatureVisitor signatureVisitor = new DefaultSignatureVisitor( resultCollector );
- FieldVisitor fieldVisitor = new DefaultFieldVisitor( annotationVisitor, resultCollector );
- mv = new DefaultMethodVisitor( annotationVisitor, signatureVisitor, resultCollector);
- visitor = new DefaultClassVisitor( signatureVisitor, annotationVisitor, fieldVisitor, mv, resultCollector);
+ @BeforeEach
+ void setUp() {
+ AnnotationVisitor annotationVisitor = new DefaultAnnotationVisitor(resultCollector);
+ SignatureVisitor signatureVisitor = new DefaultSignatureVisitor(resultCollector);
+ FieldVisitor fieldVisitor = new DefaultFieldVisitor(annotationVisitor, resultCollector);
+ mv = new DefaultMethodVisitor(annotationVisitor, signatureVisitor, resultCollector);
+ visitor = new DefaultClassVisitor(signatureVisitor, annotationVisitor, fieldVisitor, mv, resultCollector);
}
@Test
- public void testVisitWithDefaultSuperclass()
- {
+ void testVisitWithDefaultSuperclass() {
// class a.b.c
- visitor.visit( 50, 0, "a/b/c", null, "java/lang/Object", null );
+ visitor.visit(50, 0, "a/b/c", null, "java/lang/Object", null);
- assertThat( resultCollector.getDependencies() ).containsOnly( "java.lang.Object" );
+ assertThat(resultCollector.getDependencies()).containsOnly("java.lang.Object");
}
@Test
- public void testVisitWithSuperclass()
- {
+ void testVisitWithSuperclass() {
// class a.b.c
- visitor.visit( 50, 0, "a/b/c", null, "x/y/z", null );
+ visitor.visit(50, 0, "a/b/c", null, "x/y/z", null);
- assertThat( resultCollector.getDependencies() ).containsOnly( "x.y.z" );
+ assertThat(resultCollector.getDependencies()).containsOnly("x.y.z");
}
@Test
- public void testVisitWithInterface()
- {
+ void testVisitWithInterface() {
// class a.b.c implements x.y.z
- visitor.visit( 50, 0, "a/b/c", null, "java/lang/Object", new String[] { "x/y/z" } );
+ visitor.visit(50, 0, "a/b/c", null, "java/lang/Object", new String[] {"x/y/z"});
- assertThat( resultCollector.getDependencies() ).containsOnly( "java.lang.Object", "x.y.z" );
+ assertThat(resultCollector.getDependencies()).containsOnly("java.lang.Object", "x.y.z");
}
@Test
- public void testVisitWithInterfaces()
- {
+ void testVisitWithInterfaces() {
// class a.b.c implements p.q.r, x.y.z
- visitor.visit( 50, 0, "a/b/c", null, "java/lang/Object", new String[] { "p/q/r", "x/y/z" } );
+ visitor.visit(50, 0, "a/b/c", null, "java/lang/Object", new String[] {"p/q/r", "x/y/z"});
- assertThat( resultCollector.getDependencies() ).containsOnly( "java.lang.Object", "p.q.r", "x.y.z" );
+ assertThat(resultCollector.getDependencies()).containsOnly("java.lang.Object", "p.q.r", "x.y.z");
}
@Test
- public void testVisitWithUnboundedClassTypeParameter()
- {
+ void testVisitWithUnboundedClassTypeParameter() {
// class a.b.c<T>
String signature = "<T:Ljava/lang/Object;>Ljava/lang/Object;";
- visitor.visit( 50, 0, "a/b/c", signature, "java/lang/Object", null );
+ visitor.visit(50, 0, "a/b/c", signature, "java/lang/Object", null);
- assertThat( resultCollector.getDependencies() ).containsOnly( "java.lang.Object" );
+ assertThat(resultCollector.getDependencies()).containsOnly("java.lang.Object");
}
@Test
- public void testVisitWithBoundedClassTypeParameter()
- {
+ void testVisitWithBoundedClassTypeParameter() {
// class a.b.c<T extends x.y.z>
String signature = "<T:Lx/y/z;>Ljava/lang/Object;";
- visitor.visit( 50, 0, "a/b/c", signature, "java/lang/Object", null );
+ visitor.visit(50, 0, "a/b/c", signature, "java/lang/Object", null);
- assertThat( resultCollector.getDependencies() ).containsOnly( "java.lang.Object", "x.y.z" );
+ assertThat(resultCollector.getDependencies()).containsOnly("java.lang.Object", "x.y.z");
}
@Test
- public void testVisitWithBoundedClassTypeParameters()
- {
+ void testVisitWithBoundedClassTypeParameters() {
// class a.b.c<K extends p.q.r, V extends x.y.z>
String signature = "<K:Lp/q/r;V:Lx/y/z;>Ljava/lang/Object;";
- visitor.visit( 50, 0, "a/b/c", signature, "java/lang/Object", null );
+ visitor.visit(50, 0, "a/b/c", signature, "java/lang/Object", null);
- assertThat( resultCollector.getDependencies() ).containsOnly( "java.lang.Object", "p.q.r", "x.y.z" );
+ assertThat(resultCollector.getDependencies()).containsOnly("java.lang.Object", "p.q.r", "x.y.z");
}
@Test
- public void testVisitWithGenericInterface()
- {
+ void testVisitWithGenericInterface() {
// class a.b.c implements p.q.r<x.y.z>
String signature = "Ljava/lang/Object;Lp/q/r<Lx/y/z;>;";
- visitor.visit( 50, 0, "a/b/c", signature, "java/lang/Object", new String[] { "p.q.r" } );
+ visitor.visit(50, 0, "a/b/c", signature, "java/lang/Object", new String[] {"p.q.r"});
- assertThat( resultCollector.getDependencies() ).containsOnly( "java.lang.Object", "p.q.r", "x.y.z" );
+ assertThat(resultCollector.getDependencies()).containsOnly("java.lang.Object", "p.q.r", "x.y.z");
}
@Test
- public void testVisitWithInterfaceBound()
- {
+ void testVisitWithInterfaceBound() {
// class a.b.c<T> implements x.y.z<T>
String signature = "<T:Ljava/lang/Object;>Ljava/lang/Object;Lx/y/z<TT;>;";
- visitor.visit( 50, 0, "a/b/c", signature, "java/lang/Object", new String[] { "x.y.z" } );
+ visitor.visit(50, 0, "a/b/c", signature, "java/lang/Object", new String[] {"x.y.z"});
- assertThat( resultCollector.getDependencies() ).containsOnly( "java.lang.Object", "x.y.z" );
+ assertThat(resultCollector.getDependencies()).containsOnly("java.lang.Object", "x.y.z");
}
// visitSource tests ------------------------------------------------------
@Test
- public void testVisitSource()
- {
- visitor.visitSource( null, null );
+ void testVisitSource() {
+ visitor.visitSource(null, null);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitOuterClass tests --------------------------------------------------
@Test
- public void testVisitOuterClass()
- {
+ void testVisitOuterClass() {
// class a.b.c
// {
// class ...
// {
// }
// }
- visitor.visitOuterClass( "a/b/c", null, null );
+ visitor.visitOuterClass("a/b/c", null, null);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
@Test
- public void testVisitOuterClassInMethod()
- {
+ void testVisitOuterClassInMethod() {
// class a.b.c
// {
// x.y.z x(p.q.r p)
@@ -176,579 +167,517 @@ public class DependencyVisitorTest
// }
// }
// }
- visitor.visitOuterClass( "a/b/c", "x", "(Lp/q/r;)Lx/y/z;" );
+ visitor.visitOuterClass("a/b/c", "x", "(Lp/q/r;)Lx/y/z;");
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitAnnotation tests --------------------------------------------------
@Test
- public void testVisitAnnotation()
- {
- assertVisitor( visitor.visitAnnotation( "La/b/c;", false ) );
+ void testVisitAnnotation() {
+ assertVisitor(visitor.visitAnnotation("La/b/c;", false));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitAnnotationWithRuntimeVisibility()
- {
- assertVisitor( visitor.visitAnnotation( "La/b/c;", true ) );
+ void testVisitAnnotationWithRuntimeVisibility() {
+ assertVisitor(visitor.visitAnnotation("La/b/c;", true));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
// visitAttribute tests ---------------------------------------------------
@Test
- public void testVisitAttribute()
- {
- visitor.visitAttribute( new MockAttribute( "a" ) );
+ void testVisitAttribute() {
+ visitor.visitAttribute(new MockAttribute("a"));
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitInnerClass tests --------------------------------------------------
@Test
- public void testVisitInnerClass()
- {
+ void testVisitInnerClass() {
// TODO: ensure innerName is correct
// class a.b.c { class x.y.z { } }
- visitor.visitInnerClass( "x/y/z", "a/b/c", "z", 0 );
+ visitor.visitInnerClass("x/y/z", "a/b/c", "z", 0);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
@Test
- public void testVisitInnerClassAnonymous()
- {
+ void testVisitInnerClassAnonymous() {
// class a.b.c { new class x.y.z { } }
- visitor.visitInnerClass( "x/y/z$1", "a/b/c", null, 0 );
+ visitor.visitInnerClass("x/y/z$1", "a/b/c", null, 0);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitField tests -------------------------------------------------------
@Test
- public void testVisitField()
- {
+ void testVisitField() {
// a.b.c a
- assertVisitor( visitor.visitField( 0, "a", "La/b/c;", null, null ) );
+ assertVisitor(visitor.visitField(0, "a", "La/b/c;", null, null));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
// TODO: determine actual use of default values
- // public void testVisitFieldWithValue()
+ // void testVisitFieldWithValue()
// {
// }
@Test
- public void testVisitFieldArray()
- {
+ void testVisitFieldArray() {
// a.b.c[] a
- assertVisitor( visitor.visitField( 0, "a", "[La/b/c;", null, null ) );
+ assertVisitor(visitor.visitField(0, "a", "[La/b/c;", null, null));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitFieldGeneric()
- {
+ void testVisitFieldGeneric() {
// a.b.c<x.y.z> a
- assertVisitor( visitor.visitField( 0, "a", "La/b/c;", "La/b/c<Lx/y/z;>;", null ) );
+ assertVisitor(visitor.visitField(0, "a", "La/b/c;", "La/b/c<Lx/y/z;>;", null));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c", "x.y.z" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c", "x.y.z");
}
// visitMethod tests ------------------------------------------------------
@Test
- public void testVisitMethod()
- {
+ void testVisitMethod() {
// void a()
- assertVisitor( visitor.visitMethod( 0, "a", "()V", null, null ) );
+ assertVisitor(visitor.visitMethod(0, "a", "()V", null, null));
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
@Test
- public void testVisitMethodWithPrimitiveArgument()
- {
+ void testVisitMethodWithPrimitiveArgument() {
// void a(int)
- assertVisitor( visitor.visitMethod( 0, "a", "(I)V", null, null ) );
+ assertVisitor(visitor.visitMethod(0, "a", "(I)V", null, null));
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
@Test
- public void testVisitMethodWithPrimitiveArrayArgument()
- {
+ void testVisitMethodWithPrimitiveArrayArgument() {
// void a(int[])
- assertVisitor( visitor.visitMethod( 0, "a", "([I)V", null, null ) );
+ assertVisitor(visitor.visitMethod(0, "a", "([I)V", null, null));
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
@Test
- public void testVisitMethodWithObjectArgument()
- {
+ void testVisitMethodWithObjectArgument() {
// void a(a.b.c)
- assertVisitor( visitor.visitMethod( 0, "a", "(La/b/c;)V", null, null ) );
+ assertVisitor(visitor.visitMethod(0, "a", "(La/b/c;)V", null, null));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodWithObjectArguments()
- {
+ void testVisitMethodWithObjectArguments() {
// void a(a.b.c, x.y.z)
- assertVisitor( visitor.visitMethod( 0, "a", "(La/b/c;Lx/y/z;)V", null, null ) );
+ assertVisitor(visitor.visitMethod(0, "a", "(La/b/c;Lx/y/z;)V", null, null));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c", "x.y.z" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c", "x.y.z");
}
@Test
- public void testVisitMethodWithObjectArrayArgument()
- {
+ void testVisitMethodWithObjectArrayArgument() {
// void a(a.b.c[])
- assertVisitor( visitor.visitMethod( 0, "a", "([La/b/c;)V", null, null ) );
+ assertVisitor(visitor.visitMethod(0, "a", "([La/b/c;)V", null, null));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodWithGenericArgument()
- {
+ void testVisitMethodWithGenericArgument() {
// void a(a.b.c<x.y.z>)
- assertVisitor( visitor.visitMethod( 0, "a", "(La/b/c;)V", "(La/b/c<Lx/y/z;>;)V", null ) );
+ assertVisitor(visitor.visitMethod(0, "a", "(La/b/c;)V", "(La/b/c<Lx/y/z;>;)V", null));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c", "x.y.z" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c", "x.y.z");
}
@Test
- public void testVisitMethodWithPrimitiveReturnType()
- {
+ void testVisitMethodWithPrimitiveReturnType() {
// int a()
- assertVisitor( visitor.visitMethod( 0, "a", "()I", null, null ) );
+ assertVisitor(visitor.visitMethod(0, "a", "()I", null, null));
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
@Test
- public void testVisitMethodWithPrimitiveArrayReturnType()
- {
+ void testVisitMethodWithPrimitiveArrayReturnType() {
// int[] a()
- assertVisitor( visitor.visitMethod( 0, "a", "()[I", null, null ) );
+ assertVisitor(visitor.visitMethod(0, "a", "()[I", null, null));
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
@Test
- public void testVisitMethodWithObjectReturnType()
- {
+ void testVisitMethodWithObjectReturnType() {
// a.b.c a()
- assertVisitor( visitor.visitMethod( 0, "a", "()La/b/c;", null, null ) );
+ assertVisitor(visitor.visitMethod(0, "a", "()La/b/c;", null, null));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodWithObjectArrayReturnType()
- {
+ void testVisitMethodWithObjectArrayReturnType() {
// a.b.c[] a()
- assertVisitor( visitor.visitMethod( 0, "a", "()[La/b/c;", null, null ) );
+ assertVisitor(visitor.visitMethod(0, "a", "()[La/b/c;", null, null));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodWithException()
- {
+ void testVisitMethodWithException() {
// void a() throws a.b.c
- assertVisitor( visitor.visitMethod( 0, "a", "()V", null, new String[] { "a/b/c" } ) );
+ assertVisitor(visitor.visitMethod(0, "a", "()V", null, new String[] {"a/b/c"}));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodWithExceptions()
- {
+ void testVisitMethodWithExceptions() {
// void a() throws a.b.c, x.y.z
- assertVisitor( visitor.visitMethod( 0, "a", "()V", null, new String[] { "a/b/c", "x/y/z" } ) );
+ assertVisitor(visitor.visitMethod(0, "a", "()V", null, new String[] {"a/b/c", "x/y/z"}));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c", "x.y.z" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c", "x.y.z");
}
// visitAnnotationDefault tests -------------------------------------------
@Test
- public void testVisitAnnotationDefault()
- {
- assertVisitor( mv.visitAnnotationDefault() );
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ void testVisitAnnotationDefault() {
+ assertVisitor(mv.visitAnnotationDefault());
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitParameterAnnotation tests -------------------------------------------
@Test
- public void testVisitParameterAnnotation()
- {
+ void testVisitParameterAnnotation() {
// @a.b.c
- assertVisitor( mv.visitParameterAnnotation( 0, "La/b/c;", false ) );
+ assertVisitor(mv.visitParameterAnnotation(0, "La/b/c;", false));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
// visitCode tests --------------------------------------------------------
@Test
- public void testVisitCode()
- {
+ void testVisitCode() {
mv.visitCode();
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitFrame tests -------------------------------------------------------
@Test
- public void testVisitFrame()
- {
- mv.visitFrame( Opcodes.F_NEW, 0, new Object[0], 0, new Object[0] );
+ void testVisitFrame() {
+ mv.visitFrame(Opcodes.F_NEW, 0, new Object[0], 0, new Object[0]);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitInsn tests --------------------------------------------------------
@Test
- public void testVisitInsn()
- {
- mv.visitInsn( Opcodes.NOP );
+ void testVisitInsn() {
+ mv.visitInsn(Opcodes.NOP);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitIntInsn tests -----------------------------------------------------
@Test
- public void testVisitIntInsn()
- {
- mv.visitIntInsn( Opcodes.BIPUSH, 0 );
+ void testVisitIntInsn() {
+ mv.visitIntInsn(Opcodes.BIPUSH, 0);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitVarInsn tests -----------------------------------------------------
@Test
- public void testVisitVarInsn()
- {
- mv.visitVarInsn( Opcodes.ILOAD, 0 );
+ void testVisitVarInsn() {
+ mv.visitVarInsn(Opcodes.ILOAD, 0);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitTypeInsn tests ----------------------------------------------------
@Test
- public void testVisitTypeInsn()
- {
- mv.visitTypeInsn( Opcodes.NEW, "a/b/c" );
+ void testVisitTypeInsn() {
+ mv.visitTypeInsn(Opcodes.NEW, "a/b/c");
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
// visitFieldInsn tests ---------------------------------------------------
@Test
- public void testVisitFieldInsnWithPrimitive()
- {
- mv.visitFieldInsn( Opcodes.GETFIELD, "a/b/c", "x", "I" );
+ void testVisitFieldInsnWithPrimitive() {
+ mv.visitFieldInsn(Opcodes.GETFIELD, "a/b/c", "x", "I");
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitFieldInsnWithObject()
- {
- mv.visitFieldInsn( Opcodes.GETFIELD, "a/b/c", "x", "Lx/y/z;" );
+ void testVisitFieldInsnWithObject() {
+ mv.visitFieldInsn(Opcodes.GETFIELD, "a/b/c", "x", "Lx/y/z;");
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
// visitMethodInsn tests --------------------------------------------------
@Test
- public void testVisitMethodInsn()
- {
- mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "()V", false );
+ void testVisitMethodInsn() {
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "()V", false);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodInsnWithPrimitiveArgument()
- {
- mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "(I)V", false );
+ void testVisitMethodInsnWithPrimitiveArgument() {
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "(I)V", false);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodInsnWithPrimitiveArrayArgument()
- {
- mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "([I)V", false );
+ void testVisitMethodInsnWithPrimitiveArrayArgument() {
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "([I)V", false);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodInsnWithObjectArgument()
- {
- mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "(Lx/y/z;)V", false );
+ void testVisitMethodInsnWithObjectArgument() {
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "(Lx/y/z;)V", false);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodInsnWithObjectArguments()
- {
- mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "(Lp/q/r;Lx/y/z;)V", false );
+ void testVisitMethodInsnWithObjectArguments() {
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "(Lp/q/r;Lx/y/z;)V", false);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodInsnWithObjectArrayArgument()
- {
- mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "([Lx/y/z;)V", false );
+ void testVisitMethodInsnWithObjectArrayArgument() {
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "([Lx/y/z;)V", false);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodInsnWithPrimitiveReturnType()
- {
- mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "()I", false );
+ void testVisitMethodInsnWithPrimitiveReturnType() {
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "()I", false);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodInsnWithPrimitiveArrayReturnType()
- {
- mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "()[I", false );
+ void testVisitMethodInsnWithPrimitiveArrayReturnType() {
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "()[I", false);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodInsnWithObjectReturnType()
- {
- mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "()Lx/y/z;", false );
+ void testVisitMethodInsnWithObjectReturnType() {
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "()Lx/y/z;", false);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitMethodInsnWithObjectArrayReturnType()
- {
- mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "()[Lx/y/z;", false );
+ void testVisitMethodInsnWithObjectArrayReturnType() {
+ mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "a/b/c", "x", "()[Lx/y/z;", false);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
// visitJumpInsn tests ----------------------------------------------------
@Test
- public void testVisitJumpInsn()
- {
- mv.visitJumpInsn( Opcodes.IFEQ, new Label() );
+ void testVisitJumpInsn() {
+ mv.visitJumpInsn(Opcodes.IFEQ, new Label());
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitLabel tests -------------------------------------------------------
@Test
- public void testVisitLabel()
- {
- mv.visitLabel( new Label() );
+ void testVisitLabel() {
+ mv.visitLabel(new Label());
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitLdcInsn tests -----------------------------------------------------
@Test
- public void testVisitLdcInsnWithNonType()
- {
- mv.visitLdcInsn( "a" );
+ void testVisitLdcInsnWithNonType() {
+ mv.visitLdcInsn("a");
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
@Test
- public void testVisitLdcInsnWithPrimitiveType()
- {
- mv.visitLdcInsn( Type.INT_TYPE );
+ void testVisitLdcInsnWithPrimitiveType() {
+ mv.visitLdcInsn(Type.INT_TYPE);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
@Test
- public void testVisitLdcInsnWithObjectType()
- {
- mv.visitLdcInsn( Type.getType( "La/b/c;" ) );
+ void testVisitLdcInsnWithObjectType() {
+ mv.visitLdcInsn(Type.getType("La/b/c;"));
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
// visitIincInsn tests ----------------------------------------------------
@Test
- public void testVisitIincInsn()
- {
- mv.visitIincInsn( 0, 1 );
+ void testVisitIincInsn() {
+ mv.visitIincInsn(0, 1);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitTableSwitchInsn tests ---------------------------------------------
@Test
- public void testVisitTableSwitchInsn()
- {
- mv.visitTableSwitchInsn( 0, 1, new Label(), new Label() );
+ void testVisitTableSwitchInsn() {
+ mv.visitTableSwitchInsn(0, 1, new Label(), new Label());
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitLookupSwitchInsn tests --------------------------------------------
@Test
- public void testVisitLookupSwitchInsn()
- {
- mv.visitLookupSwitchInsn( new Label(), new int[] { 0 }, new Label[] { new Label() } );
+ void testVisitLookupSwitchInsn() {
+ mv.visitLookupSwitchInsn(new Label(), new int[] {0}, new Label[] {new Label()});
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitMultiANewArrayInsn tests ------------------------------------------
@Test
- public void testVisitMultiANewArrayInsnWithPrimitive()
- {
- mv.visitMultiANewArrayInsn( "I", 2 );
+ void testVisitMultiANewArrayInsnWithPrimitive() {
+ mv.visitMultiANewArrayInsn("I", 2);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
@Test
- public void testVisitMultiANewArrayInsnWithObject()
- {
- mv.visitMultiANewArrayInsn( "La/b/c;", 2 );
+ void testVisitMultiANewArrayInsnWithObject() {
+ mv.visitMultiANewArrayInsn("La/b/c;", 2);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
// visitTryCatchBlock tests -----------------------------------------------
@Test
- public void testVisitTryCatchBlock()
- {
- mv.visitTryCatchBlock( new Label(), new Label(), new Label(), "a/b/c" );
+ void testVisitTryCatchBlock() {
+ mv.visitTryCatchBlock(new Label(), new Label(), new Label(), "a/b/c");
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitTryCatchBlockForFinally()
- {
- mv.visitTryCatchBlock( new Label(), new Label(), new Label(), null );
+ void testVisitTryCatchBlockForFinally() {
+ mv.visitTryCatchBlock(new Label(), new Label(), new Label(), null);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitLocalVariable tests -----------------------------------------------
@Test
- public void testVisitLocalVariableWithPrimitive()
- {
- mv.visitLocalVariable( "a", "I", null, new Label(), new Label(), 0 );
+ void testVisitLocalVariableWithPrimitive() {
+ mv.visitLocalVariable("a", "I", null, new Label(), new Label(), 0);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
@Test
- public void testVisitLocalVariableWithPrimitiveArray()
- {
- mv.visitLocalVariable( "a", "[I", null, new Label(), new Label(), 0 );
+ void testVisitLocalVariableWithPrimitiveArray() {
+ mv.visitLocalVariable("a", "[I", null, new Label(), new Label(), 0);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
@Test
- public void testVisitLocalVariableWithObject()
- {
- mv.visitLocalVariable( "a", "La/b/c;", null, new Label(), new Label(), 0 );
+ void testVisitLocalVariableWithObject() {
+ mv.visitLocalVariable("a", "La/b/c;", null, new Label(), new Label(), 0);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitLocalVariableWithObjectArray()
- {
- mv.visitLocalVariable( "a", "[La/b/c;", null, new Label(), new Label(), 0 );
+ void testVisitLocalVariableWithObjectArray() {
+ mv.visitLocalVariable("a", "[La/b/c;", null, new Label(), new Label(), 0);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c");
}
@Test
- public void testVisitLocalVariableWithGenericObject()
- {
- mv.visitLocalVariable( "a", "La/b/c;", "La/b/c<Lx/y/z;>;", new Label(), new Label(), 0 );
+ void testVisitLocalVariableWithGenericObject() {
+ mv.visitLocalVariable("a", "La/b/c;", "La/b/c<Lx/y/z;>;", new Label(), new Label(), 0);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c", "x.y.z" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c", "x.y.z");
}
@Test
- public void testVisitLocalVariableWithGenericObjectArray()
- {
- mv.visitLocalVariable( "a", "La/b/c;", "[La/b/c<Lx/y/z;>;", new Label(), new Label(), 0 );
+ void testVisitLocalVariableWithGenericObjectArray() {
+ mv.visitLocalVariable("a", "La/b/c;", "[La/b/c<Lx/y/z;>;", new Label(), new Label(), 0);
- assertThat( resultCollector.getDependencies() ).containsOnly( "a.b.c", "x.y.z" );
+ assertThat(resultCollector.getDependencies()).containsOnly("a.b.c", "x.y.z");
}
// visitLineNumber tests --------------------------------------------------
@Test
- public void testVisitLineNumber()
- {
- mv.visitLineNumber( 0, new Label() );
+ void testVisitLineNumber() {
+ mv.visitLineNumber(0, new Label());
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
// visitMaxs tests --------------------------------------------------------
@Test
- public void testVisitMaxs()
- {
- mv.visitMaxs( 0, 0 );
+ void testVisitMaxs() {
+ mv.visitMaxs(0, 0);
- assertThat( resultCollector.getDependencies() ).isEmpty();
+ assertThat(resultCollector.getDependencies()).isEmpty();
}
- private void assertVisitor( Object actualVisitor )
- {
- //assertEquals( visitor, actualVisitor );
+ private void assertVisitor(Object actualVisitor) {
+ // assertEquals( visitor, actualVisitor );
}
/**
@@ -756,11 +685,9 @@ public class DependencyVisitorTest
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
*/
- static class MockAttribute extends Attribute
- {
- public MockAttribute( String type )
- {
- super( type );
+ static class MockAttribute extends Attribute {
+ MockAttribute(String type) {
+ super(type);
}
}
}
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 723025b..bcafd0e 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
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.asm;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* "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
+ * 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
@@ -18,64 +16,66 @@ package org.apache.maven.shared.dependency.analyzer.asm;
* specific language governing permissions and limitations
* under the License.
*/
+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;
import org.apache.maven.shared.dependency.analyzer.testcases.InnerClassCase;
import org.apache.maven.shared.dependency.analyzer.testcases.MethodHandleCases;
+import org.junit.jupiter.api.Test;
+
import static org.assertj.core.api.Assertions.assertThat;
-import org.junit.Test;
-public class ResultCollectorTest
-{
- Set<String> getDependencies( Class<?> inspectClass )
- throws IOException
- {
+class ResultCollectorTest {
+ Set<String> getDependencies(Class<?> inspectClass) throws IOException {
String className = inspectClass.getName();
- String path = '/' + className.replace( '.', '/' ) + ".class";
+ String path = '/' + className.replace('.', '/') + ".class";
DependencyClassFileVisitor visitor = new DependencyClassFileVisitor();
- try ( InputStream is = inspectClass.getResourceAsStream( path ) )
- {
- visitor.visitClass( className, is );
+ try (InputStream is = inspectClass.getResourceAsStream(path)) {
+ visitor.visitClass(className, is);
}
return visitor.getDependencies();
}
@Test
- public void testArrayCases()
- throws IOException
- {
- Set<String> dependencies = getDependencies( ArrayCases.class );
- assertThat( dependencies ).doesNotContain( "[I" );
- assertThat( dependencies ).allSatisfy( dependency -> assertThat( dependency ).doesNotStartWith( "[" ) );
- assertThat( dependencies )
- .contains( "java.lang.annotation.Annotation" )
- .contains( "java.lang.reflect.Constructor" );
+ 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.classx");
+ DependencyClassFileVisitor visitor = new DependencyClassFileVisitor();
+ try (InputStream is = Files.newInputStream(path)) {
+ visitor.visitClass(className, is);
+ }
+ }
+
+ @Test
+ void testArrayCases() throws IOException {
+ Set<String> dependencies = getDependencies(ArrayCases.class);
+ assertThat(dependencies).doesNotContain("[I");
+ assertThat(dependencies).allSatisfy(dependency -> assertThat(dependency).doesNotStartWith("["));
+ assertThat(dependencies).contains("java.lang.annotation.Annotation").contains("java.lang.reflect.Constructor");
}
@Test
- public void testNoMethodHandle()
- throws IOException
- {
- Set<String> dependencies = getDependencies( MethodHandleCases.class );
- for ( String dependency : dependencies )
- {
- assertThat( dependency ).doesNotStartWith( "(" );
+ void testNoMethodHandle() throws IOException {
+ Set<String> dependencies = getDependencies(MethodHandleCases.class);
+ for (String dependency : dependencies) {
+ assertThat(dependency).doesNotStartWith("(");
}
}
@Test
- public void testInnerClassAsContainer()
- throws IOException
- {
- Set<String> dependencies = getDependencies( InnerClassCase.class );
- for ( String dependency : dependencies )
- {
- assertThat( dependency ).doesNotContain( "$" );
+ void testInnerClassAsContainer() throws IOException {
+ Set<String> dependencies = getDependencies(InnerClassCase.class);
+ for (String dependency : dependencies) {
+ assertThat(dependency).doesNotContain("$");
}
- assertThat( dependencies ).contains( "java.lang.System" );
+ assertThat(dependencies).contains("java.lang.System");
}
-}
\ No newline at end of file
+}
diff --git a/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/ArrayCases.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/ArrayCases.java
index 55df57b..68f339f 100644
--- a/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/ArrayCases.java
+++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/ArrayCases.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.testcases;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.testcases;
* "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
+ * 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
@@ -18,36 +16,31 @@ package org.apache.maven.shared.dependency.analyzer.testcases;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer.testcases;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import org.apache.maven.shared.dependency.analyzer.asm.DefaultMethodVisitor;
-public class ArrayCases
-{
+public class ArrayCases {
/**
* Cause {@link DefaultMethodVisitor#visitMethodInsn(int, String, String, String, boolean)} to be called
* with primitive array
* @param source
* @return
*/
- public int[] primitive( int[] source )
- {
+ public int[] primitive(int[] source) {
// causes
return source.clone();
}
- public <T> void arrayOfArrayCollectedAsReference( Class<T> cls )
- {
+ public <T> void arrayOfArrayCollectedAsReference(Class<T> cls) {
Constructor<?>[] constructors = cls.getConstructors();
- for ( Constructor<?> constructor : constructors )
- {
- for ( Annotation[] parameters : constructor.getParameterAnnotations() )
- {
- for ( Annotation annotation : parameters )
- {
- System.out.println("Class: "+cls+", Annotation: "+ annotation );
+ for (Constructor<?> constructor : constructors) {
+ for (Annotation[] parameters : constructor.getParameterAnnotations()) {
+ for (Annotation annotation : parameters) {
+ System.out.println("Class: " + cls + ", Annotation: " + annotation);
}
}
}
diff --git a/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/InnerClassCase.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/InnerClassCase.java
index 19eb9b2..ef675c7 100644
--- a/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/InnerClassCase.java
+++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/InnerClassCase.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.testcases;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.testcases;
* "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
+ * 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
@@ -18,13 +16,12 @@ package org.apache.maven.shared.dependency.analyzer.testcases;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer.testcases;
import java.util.function.Consumer;
-public class InnerClassCase
-{
- public Consumer<String> echoThis()
- {
- return ( s ) -> System.out.println( s );
+public class InnerClassCase {
+ public Consumer<String> echoThis() {
+ return (s) -> System.out.println(s);
}
}
diff --git a/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/MethodHandleCases.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/MethodHandleCases.java
index 969dac8..1310cce 100644
--- a/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/MethodHandleCases.java
+++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/MethodHandleCases.java
@@ -1,5 +1,3 @@
-package org.apache.maven.shared.dependency.analyzer.testcases;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -9,7 +7,7 @@ package org.apache.maven.shared.dependency.analyzer.testcases;
* "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
+ * 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
@@ -18,24 +16,20 @@ package org.apache.maven.shared.dependency.analyzer.testcases;
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.maven.shared.dependency.analyzer.testcases;
import java.util.function.Consumer;
-public class MethodHandleCases
-{
- public void sayHello()
- {
- sayHello( this::callSite );
+public class MethodHandleCases {
+ public void sayHello() {
+ sayHello(this::callSite);
}
- void sayHello( Consumer<String> consumer )
- {
- consumer.accept( "hello" );
+ void sayHello(Consumer<String> consumer) {
+ consumer.accept("hello");
}
- private void callSite( String output )
- {
- System.out.println( output );
+ private void callSite(String output) {
+ System.out.println(output);
}
-
}
diff --git a/src/test/resources/org/apache/maven/shared/dependency/analyzer/commons-bcel-issue362/Bcel362.classx b/src/test/resources/org/apache/maven/shared/dependency/analyzer/commons-bcel-issue362/Bcel362.classx
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.classx 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!");
+ }
+}