This is an automated email from the ASF dual-hosted git repository. sjaranowski pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-dependency-analyzer.git
The following commit(s) were added to refs/heads/master by this push: new c18d95b [MSHARED-1038] Inner classes are in same compilation unit as container class (#54) c18d95b is described below commit c18d95b8295d5e810a822a63710864ab9e4a2eb4 Author: Chas Honton <chon...@proofpoint.com> AuthorDate: Sun Mar 6 00:17:21 2022 -0800 [MSHARED-1038] Inner classes are in same compilation unit as container class (#54) * fold inner class dependency into container class * add unit test --- .../analyzer/CollectorClassFileVisitor.java | 6 ++++- .../dependency/analyzer/asm/ResultCollector.java | 6 ++++- .../analyzer/asm/ResultCollectorTest.java | 13 ++++++++++ .../analyzer/testcases/InnerClassCase.java | 30 ++++++++++++++++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) 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 2c66488..d9226a8 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 @@ -45,7 +45,11 @@ public class CollectorClassFileVisitor /** {@inheritDoc} */ public void visitClass( String className, InputStream in ) { - classes.add( className ); + // inner classes have equivalent compilation requirement as container class + if ( className.indexOf( '$' ) < 0 ) + { + classes.add( className ); + } } /** 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 83173c3..970d5cf 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 @@ -105,7 +105,11 @@ public class ResultCollector */ public void add( String name ) { - classes.add( name ); + // inner classes have equivalent compilation requirement as container class + if ( name.indexOf( '$' ) < 0 ) + { + classes.add( name ); + } } void addNames( final String[] names ) 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 9ccb518..723025b 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 @@ -24,6 +24,7 @@ import java.io.InputStream; 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 static org.assertj.core.api.Assertions.assertThat; import org.junit.Test; @@ -65,4 +66,16 @@ public class ResultCollectorTest assertThat( dependency ).doesNotStartWith( "(" ); } } + + @Test + public void testInnerClassAsContainer() + throws IOException + { + Set<String> dependencies = getDependencies( InnerClassCase.class ); + for ( String dependency : dependencies ) + { + assertThat( dependency ).doesNotContain( "$" ); + } + 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/InnerClassCase.java b/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/InnerClassCase.java new file mode 100644 index 0000000..19eb9b2 --- /dev/null +++ b/src/test/java/org/apache/maven/shared/dependency/analyzer/testcases/InnerClassCase.java @@ -0,0 +1,30 @@ +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 + * 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.util.function.Consumer; + +public class InnerClassCase +{ + public Consumer<String> echoThis() + { + return ( s ) -> System.out.println( s ); + } +}