diff --git a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/AsmModuleInfoParser.java b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/AsmModuleInfoParser.java index d20ba74..8587549 100644 --- a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/AsmModuleInfoParser.java +++ b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/AsmModuleInfoParser.java @@ -23,7 +23,6 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; @@ -74,7 +73,7 @@ public void visitRequire( String module, int access, String version ) modifiers.add( JavaModuleDescriptor.JavaRequires.JavaModifier.TRANSITIVE ); } - wrapper.builder.requires​( modifiers, module ); + wrapper.builder.requires( modifiers, module ); } else { @@ -109,7 +108,7 @@ public void visitProvide( String service, String... providers ) { renamedProvides.add( provider.replace( '/', '.' ) ); } - wrapper.builder.provides​( service.replace( '/', '.' ), renamedProvides ); + wrapper.builder.provides( service.replace( '/', '.' ), renamedProvides ); } }; } diff --git a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/JavaModuleDescriptor.java b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/JavaModuleDescriptor.java index d4a7f82..37ac927 100644 --- a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/JavaModuleDescriptor.java +++ b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/JavaModuleDescriptor.java @@ -128,7 +128,19 @@ public boolean equals( Object obj ) } return true; } - + + @Override + public String toString() { + return "JavaModuleDescriptor{" + + "name='" + name + '\'' + + ", automatic=" + automatic + + ", requires=" + requires + + ", exports=" + exports + + ", uses=" + uses + + ", provides=" + provides + + '}'; + } + /** * A JavaModuleDescriptor Builder * @@ -158,7 +170,7 @@ private Builder setAutomatic( boolean isAutomatic ) * @param name The module name * @return This builder */ - public Builder requires​( Set modifiers, String name ) + public Builder requires( Set modifiers, String name ) { jModule.requires.add( new JavaRequires( modifiers, name ) ); return this; @@ -213,7 +225,7 @@ public Builder uses( String service ) return this; } - public Builder provides​( String service, List providers ) + public Builder provides( String service, List providers ) { jModule.provides.add( new JavaProvides( service, providers ) ); return this; @@ -254,7 +266,7 @@ private JavaRequires( String name ) this.name = name; } - public Set modifiers​() + public Set modifiers() { return modifiers; } @@ -270,7 +282,7 @@ public String name() * @author Robert Scholte * @since 1.0.0 */ - public static enum JavaModifier + public enum JavaModifier { STATIC, TRANSITIVE } @@ -308,6 +320,14 @@ public boolean equals( Object obj ) } return true; } + + @Override + public String toString() { + return "JavaRequires{" + + "modifiers=" + modifiers + + ", name='" + name + '\'' + + '}'; + } } /** @@ -377,6 +397,14 @@ public boolean equals( Object obj ) } return true; } + + @Override + public String toString() { + return "JavaExports{" + + "source='" + source + '\'' + + ", targets=" + targets + + '}'; + } } /** @@ -440,5 +468,13 @@ public boolean equals( Object obj ) } return true; } + + @Override + public String toString() { + return "JavaProvides{" + + "service='" + service + '\'' + + ", providers=" + providers + + '}'; + } } } diff --git a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/LocationManager.java b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/LocationManager.java index 3ec20e8..2a01618 100644 --- a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/LocationManager.java +++ b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/LocationManager.java @@ -261,8 +261,9 @@ public String extract( Path path ) Collections.unmodifiableMap( availableNamedModules ), Collections.unmodifiableMap( availableProviders ), requiredNamedModules, - true, - true ); + true, + true, + request.isIncludeStatic()); } for ( String additionalModule : request.getAdditionalModules() ) @@ -271,8 +272,9 @@ public String extract( Path path ) Collections.unmodifiableMap( availableNamedModules ), Collections.unmodifiableMap( availableProviders ), requiredNamedModules, - request.isIncludeStatic(), - true ); + true, + true, + request.isIncludeStatic()); } // in case of identical module names, first one wins @@ -400,19 +402,21 @@ private void selectRequires( JavaModuleDescriptor module, Map availableModules, Map> availableProviders, Set namedModules, - boolean includeStatic, - boolean includeTransitive ) + boolean isRootModule, + boolean includeAsTransitive, + boolean includeStatic) { for ( JavaModuleDescriptor.JavaRequires requires : module.requires() ) { // includeTransitive is one level deeper compared to includeStatic - if ( includeStatic || !requires.modifiers​().contains( JavaModuleDescriptor.JavaRequires.JavaModifier.STATIC ) ) + if ( isRootModule + || includeStatic + || includeAsTransitive + || !requires.modifiers().contains( JavaModuleDescriptor.JavaRequires.JavaModifier.STATIC ) + || requires.modifiers().contains( JavaModuleDescriptor.JavaRequires.JavaModifier.TRANSITIVE ) ) { - selectModule( requires.name(), availableModules, availableProviders, namedModules, false, includeStatic ); - } - else if ( includeTransitive && requires.modifiers​().contains( JavaModuleDescriptor.JavaRequires.JavaModifier.TRANSITIVE ) ) - { - selectModule( requires.name(), availableModules, availableProviders, namedModules, false, includeStatic ); + selectModule( requires.name(), availableModules, availableProviders, + namedModules, false, includeStatic, includeStatic ); } } @@ -426,7 +430,8 @@ else if ( includeTransitive && requires.modifiers​().contains( JavaModuleDescr if ( requiredModule != null && namedModules.add( providerModule ) ) { - selectRequires( requiredModule, availableModules, availableProviders, namedModules, false, includeStatic ); + selectRequires( requiredModule, availableModules, availableProviders, + namedModules, false, includeAsTransitive, includeStatic ); } } } @@ -434,13 +439,14 @@ else if ( includeTransitive && requires.modifiers​().contains( JavaModuleDescr } private void selectModule( String module, Map availableModules, Map> availableProviders, - Set namedModules, boolean includeStatic, boolean includeTransitive ) + Set namedModules, boolean isRootModule, boolean includeTransitive, boolean includeStatic ) { JavaModuleDescriptor requiredModule = availableModules.get( module ); if ( requiredModule != null && namedModules.add( module ) ) { - selectRequires( requiredModule, availableModules, availableProviders, namedModules, includeStatic, includeTransitive ); + selectRequires( requiredModule, availableModules, availableProviders, + namedModules, false, includeTransitive, includeStatic ); } } diff --git a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/ResolvePathsResult.java b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/ResolvePathsResult.java index 5fc0efe..a5fc834 100644 --- a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/ResolvePathsResult.java +++ b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/ResolvePathsResult.java @@ -122,4 +122,15 @@ public Map getPathExceptions() { return pathExceptions; } + + @Override + public String toString() { + return "ResolvePathsResult{" + System.lineSeparator() + + "mainModuleDescriptor=" + mainModuleDescriptor + System.lineSeparator() + + ", pathElements=" + pathElements + System.lineSeparator() + + ", modulepathElements=" + modulepathElements + System.lineSeparator() + + ", classpathElements=" + classpathElements + System.lineSeparator() + + ", pathExceptions=" + pathExceptions + System.lineSeparator() + + '}'; + } } diff --git a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/SourceModuleInfoParser.java b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/SourceModuleInfoParser.java index 56508f9..40258f7 100644 --- a/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/SourceModuleInfoParser.java +++ b/plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/SourceModuleInfoParser.java @@ -23,8 +23,6 @@ import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -69,7 +67,7 @@ public org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor fromSourcePa { modifiers.add( org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor.JavaRequires.JavaModifier.TRANSITIVE ); } - builder.requires​( modifiers , requires.getModule().getName() ); + builder.requires( modifiers , requires.getModule().getName() ); } else { @@ -107,7 +105,7 @@ public org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor fromSourcePa providers.add( provider.getName() ); } - builder.provides​( provides.getService().getName(), providers ); + builder.provides( provides.getService().getName(), providers ); } } else diff --git a/plexus-java/src/main/java9/org/codehaus/plexus/languages/java/jpms/BinaryModuleInfoParser.java b/plexus-java/src/main/java9/org/codehaus/plexus/languages/java/jpms/BinaryModuleInfoParser.java index a6752e7..6bab93e 100644 --- a/plexus-java/src/main/java9/org/codehaus/plexus/languages/java/jpms/BinaryModuleInfoParser.java +++ b/plexus-java/src/main/java9/org/codehaus/plexus/languages/java/jpms/BinaryModuleInfoParser.java @@ -52,7 +52,7 @@ JavaModuleDescriptor parse( InputStream in ) throws IOException { modifiers.add( org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor.JavaRequires.JavaModifier.TRANSITIVE ); } - builder.requires​( modifiers, requires.name() ); + builder.requires( modifiers, requires.name() ); } else { @@ -79,7 +79,7 @@ JavaModuleDescriptor parse( InputStream in ) throws IOException for ( ModuleDescriptor.Provides provides : descriptor.provides() ) { - builder.provides​( provides.service(), provides.providers() ); + builder.provides( provides.service(), provides.providers() ); } diff --git a/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/BinaryModuleInfoParserTest.java b/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/BinaryModuleInfoParserTest.java index a25bfcd..963b508 100644 --- a/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/BinaryModuleInfoParserTest.java +++ b/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/BinaryModuleInfoParserTest.java @@ -110,7 +110,7 @@ public void testOutputDirectoryDescriptor() Set expectedRequires = JavaModuleDescriptor.newAutomaticModule( "_" ) .requires( "java.base" ) .requires( "java.xml" ) - .requires​( Collections.singleton( JavaRequires.JavaModifier.STATIC ), "com.google.common" ) + .requires( Collections.singleton( JavaRequires.JavaModifier.STATIC ), "com.google.common" ) .build() .requires(); @@ -192,9 +192,9 @@ public void testRequires() throws Exception Set expectedRequires = JavaModuleDescriptor.newAutomaticModule( "_" ) .requires( "java.base" ) .requires( "mod_r" ) - .requires​( Collections.singleton( JavaRequires.JavaModifier.STATIC ), "mod_r_s" ) - .requires​( Collections.singleton( JavaRequires.JavaModifier.TRANSITIVE ), "mod_r_t" ) - .requires​( new HashSet( Arrays.asList( JavaRequires.JavaModifier.STATIC, JavaRequires.JavaModifier.TRANSITIVE ) ), "mod_r_s_t" ) + .requires( Collections.singleton( JavaRequires.JavaModifier.STATIC ), "mod_r_s" ) + .requires( Collections.singleton( JavaRequires.JavaModifier.TRANSITIVE ), "mod_r_t" ) + .requires( new HashSet( Arrays.asList( JavaRequires.JavaModifier.STATIC, JavaRequires.JavaModifier.TRANSITIVE ) ), "mod_r_s_t" ) .build() .requires(); diff --git a/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/LocationManagerTest.java b/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/LocationManagerTest.java index 1ed6d0b..35a6f4e 100644 --- a/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/LocationManagerTest.java +++ b/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/LocationManagerTest.java @@ -68,7 +68,7 @@ ModuleInfoParser getBinaryModuleInfoParser( Path jdkHome ) @Test public void testNoPaths() throws Exception { - ResolvePathsResult result = locationManager.resolvePaths( ResolvePathsRequest.ofFiles( Collections.emptyList() ) ); + ResolvePathsResult result = locationManager.resolvePaths( ResolvePathsRequest.ofFiles( Collections.emptyList() ) ); assertThat( result.getMainModuleDescriptor(), nullValue( JavaModuleDescriptor.class) ); assertThat( result.getPathElements().size(), is( 0 ) ); assertThat( result.getModulepathElements().size(), is( 0 ) ); @@ -81,7 +81,7 @@ public void testWithUnknownRequires() throws Exception { JavaModuleDescriptor descriptor = JavaModuleDescriptor.newModule( "base" ).requires( "java.base" ).requires( "jdk.net" ).build(); when( qdoxParser.fromSourcePath( any( Path.class ) ) ).thenReturn( descriptor ); - ResolvePathsRequest request = ResolvePathsRequest.ofFiles( Collections.emptyList() ).setMainModuleDescriptor( mockModuleInfoJava.toFile() ); + ResolvePathsRequest request = ResolvePathsRequest.ofFiles( Collections.emptyList() ).setMainModuleDescriptor( mockModuleInfoJava.toFile() ); ResolvePathsResult result = locationManager.resolvePaths( request ); @@ -178,7 +178,7 @@ public void testNonJar() throws Exception { Path p = Paths.get( "src/test/resources/nonjar/pom.xml" ); - ResolvePathsRequest request = ResolvePathsRequest.ofPaths( Arrays.asList( p ) ).setMainModuleDescriptor( mockModuleInfoJava ); + ResolvePathsRequest request = ResolvePathsRequest.ofPaths( Collections.singletonList( p ) ).setMainModuleDescriptor( mockModuleInfoJava ); ResolvePathsResult result = locationManager.resolvePaths( request ); @@ -193,7 +193,7 @@ public void testAdditionalModules() throws Exception JavaModuleDescriptor descriptor = JavaModuleDescriptor.newModule( "base" ).build(); when( qdoxParser.fromSourcePath( any( Path.class ) ) ).thenReturn( descriptor ); ResolvePathsRequest request = - ResolvePathsRequest.ofPaths( Arrays.asList( p ) ) + ResolvePathsRequest.ofPaths( Collections.singletonList( p ) ) .setMainModuleDescriptor( mockModuleInfoJava ) .setAdditionalModules( Collections.singletonList( "plexus.java" ) ); @@ -230,7 +230,7 @@ public void testNoMatchingProviders() throws Exception ResolvePathsRequest request = ResolvePathsRequest.ofPaths( def ).setMainModuleDescriptor( abc ).setIncludeAllProviders( true ); when( qdoxParser.fromSourcePath( abc ) ).thenReturn( JavaModuleDescriptor.newModule( "abc" ).uses( "device" ).build() ); - when( asmParser.getModuleDescriptor( def ) ).thenReturn( JavaModuleDescriptor.newModule( "def" ).provides​( "tool", Arrays.asList( "java", "javac" ) ).build() ); + when( asmParser.getModuleDescriptor( def ) ).thenReturn( JavaModuleDescriptor.newModule( "def" ).provides( "tool", Arrays.asList( "java", "javac" ) ).build() ); ResolvePathsResult result = locationManager.resolvePaths( request ); assertThat( result.getPathElements().size(), is( 1 ) ); @@ -248,7 +248,7 @@ public void testMainModuleDescriptorWithProviders() throws Exception ResolvePathsRequest request = ResolvePathsRequest.ofPaths( def ).setMainModuleDescriptor( abc ).setIncludeAllProviders( true ); when( qdoxParser.fromSourcePath( abc ) ).thenReturn( JavaModuleDescriptor.newModule( "abc" ).uses( "tool" ).build() ); - when( asmParser.getModuleDescriptor( def ) ).thenReturn( JavaModuleDescriptor.newModule( "def" ).provides​( "tool", Arrays.asList( "java", "javac" ) ).build() ); + when( asmParser.getModuleDescriptor( def ) ).thenReturn( JavaModuleDescriptor.newModule( "def" ).provides( "tool", Arrays.asList( "java", "javac" ) ).build() ); ResolvePathsResult result = locationManager.resolvePaths( request ); assertThat( result.getPathElements().size(), is( 1 ) ); @@ -265,7 +265,7 @@ public void testMainModuleDescriptorWithProvidersDontIncludeProviders() throws E ResolvePathsRequest request = ResolvePathsRequest.ofPaths( def ).setMainModuleDescriptor( abc ); when( qdoxParser.fromSourcePath( abc ) ).thenReturn( JavaModuleDescriptor.newModule( "abc" ).uses( "tool" ).build() ); - when( asmParser.getModuleDescriptor( def ) ).thenReturn( JavaModuleDescriptor.newModule( "def" ).provides​( "tool", Arrays.asList( "java", "javac" ) ).build() ); + when( asmParser.getModuleDescriptor( def ) ).thenReturn( JavaModuleDescriptor.newModule( "def" ).provides( "tool", Arrays.asList( "java", "javac" ) ).build() ); ResolvePathsResult result = locationManager.resolvePaths( request ); assertThat( result.getPathElements().size(), is( 1 ) ); @@ -283,7 +283,7 @@ public void testTransitiveProviders() throws Exception ResolvePathsRequest request = ResolvePathsRequest.ofPaths( def, ghi ).setMainModuleDescriptor( abc ).setIncludeAllProviders( true ); when( qdoxParser.fromSourcePath( abc ) ).thenReturn( JavaModuleDescriptor.newModule( "abc" ).requires( "ghi" ).build() ); - when( asmParser.getModuleDescriptor( def ) ).thenReturn( JavaModuleDescriptor.newModule( "def" ).provides​( "tool", Arrays.asList( "java", "javac" ) ).build() ); + when( asmParser.getModuleDescriptor( def ) ).thenReturn( JavaModuleDescriptor.newModule( "def" ).provides( "tool", Arrays.asList( "java", "javac" ) ).build() ); when( asmParser.getModuleDescriptor( ghi ) ).thenReturn( JavaModuleDescriptor.newModule( "ghi" ).uses( "tool" ).build() ); @@ -303,7 +303,7 @@ public void testDontIncludeProviders() throws Exception ResolvePathsRequest request = ResolvePathsRequest.ofPaths( def, ghi ).setMainModuleDescriptor( abc ); when( qdoxParser.fromSourcePath( abc ) ).thenReturn( JavaModuleDescriptor.newModule( "abc" ).requires( "ghi" ).build() ); - when( asmParser.getModuleDescriptor( def ) ).thenReturn( JavaModuleDescriptor.newModule( "def" ).provides​( "tool", Arrays.asList( "java", "javac" ) ).build() ); + when( asmParser.getModuleDescriptor( def ) ).thenReturn( JavaModuleDescriptor.newModule( "def" ).provides( "tool", Arrays.asList( "java", "javac" ) ).build() ); when( asmParser.getModuleDescriptor( ghi ) ).thenReturn( JavaModuleDescriptor.newModule( "ghi" ).uses( "tool" ).build() ); @@ -380,7 +380,7 @@ public void testTransitiveStatic() throws Exception when( qdoxParser.fromSourcePath( moduleA ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleA" ) .requires( "moduleB" ).build() ); when( asmParser.getModuleDescriptor( moduleB ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleB" ) - .requires​( Collections.singleton( JavaModifier.STATIC ), "moduleC" ).build() ); + .requires( Collections.singleton( JavaModifier.STATIC ), "moduleC" ).build() ); when( asmParser.getModuleDescriptor( moduleC ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleC" ).build() ); @@ -398,14 +398,16 @@ public void testDirectStatic() throws Exception Path moduleB = Paths.get( "src/test/resources/mock/jar0.jar" ); // any existing file Path moduleC = Paths.get( "src/test/resources/mock/jar1.jar" ); // any existing file Path moduleD = Paths.get( "src/test/resources/mock/jar2.jar" ); // any existing file - ResolvePathsRequest request = ResolvePathsRequest.ofPaths( moduleB, moduleC, moduleD ).setMainModuleDescriptor( moduleA ); + ResolvePathsRequest request = ResolvePathsRequest.ofPaths( moduleB, moduleC, moduleD ) + .setMainModuleDescriptor( moduleA ); + //.setIncludeStatic( true ); when( qdoxParser.fromSourcePath( moduleA ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleA" ) .requires( "moduleB" ) - .requires​( Collections.singleton( JavaModifier.STATIC ), "moduleD") + .requires( Collections.singleton( JavaModifier.STATIC ), "moduleD") .build() ); when( asmParser.getModuleDescriptor( moduleB ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleB" ) - .requires​( Collections.singleton( JavaModifier.STATIC ), "moduleC" ) + .requires( Collections.singleton( JavaModifier.STATIC ), "moduleC" ) .build() ); when( asmParser.getModuleDescriptor( moduleC ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleC" ).build() ); when( asmParser.getModuleDescriptor( moduleD ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleD" ).build() ); @@ -413,7 +415,7 @@ public void testDirectStatic() throws Exception ResolvePathsResult result = locationManager.resolvePaths( request ); assertThat( result.getPathElements().size(), is( 3 ) ); - assertThat( result.getModulepathElements().size(), is( 2 ) ); + assertThat( "content: " + result.getModulepathElements(), result.getModulepathElements().size(), is( 2 ) ); assertThat( result.getModulepathElements().containsKey( moduleB ), is( true ) ); assertThat( result.getModulepathElements().containsKey( moduleD ), is( true ) ); assertThat( result.getClasspathElements().size(), is( 1 ) ); @@ -460,23 +462,87 @@ public void testStaticTransitive() throws Exception .requires( "moduleB" ) .build() ); when( asmParser.getModuleDescriptor( moduleB ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleB" ) - .requires​( new HashSet( Arrays.asList( JavaModifier.STATIC,JavaModifier.TRANSITIVE ) ), "moduleC" ) + .requires( new HashSet<>( Arrays.asList( JavaModifier.STATIC,JavaModifier.TRANSITIVE ) ), "moduleC" ) .build() ); when( asmParser.getModuleDescriptor( moduleC ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleC" ) - .requires​( new HashSet( Arrays.asList( JavaModifier.STATIC,JavaModifier.TRANSITIVE ) ), "moduleD" ) + .requires( new HashSet<>( Arrays.asList( JavaModifier.STATIC ) ), "moduleD" ) .build() ); when( asmParser.getModuleDescriptor( moduleD ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleD" ).build() ); ResolvePathsResult result = locationManager.resolvePaths( request ); assertThat( result.getPathElements().size(), is( 3 ) ); - assertThat( result.getModulepathElements().size(), is( 2 ) ); + assertThat( "modulepathelements:" + result.getModulepathElements(), + result.getModulepathElements().size(), is( 2 ) ); assertThat( result.getModulepathElements().containsKey( moduleB ), is( true ) ); assertThat( result.getModulepathElements().containsKey( moduleC ), is( true ) ); assertThat( result.getClasspathElements().size(), is( 1 ) ); assertThat( result.getClasspathElements().contains( moduleD ), is( true ) ); assertThat( result.getPathExceptions().size(), is( 0 ) ); } - + + @Test + /** + * test case for https://issues.apache.org/jira/browse/MCOMPILER-481 + */ + public void includeDeeperRequiresStatic() throws Exception + { + Path moduleA = Paths.get( "src/test/resources/mock/module-info.java" ); // some file called module-info.java + Path moduleB = Paths.get( "src/test/resources/mock/jar0.jar" ); // any existing file + Path moduleC = Paths.get( "src/test/resources/mock/jar1.jar" ); // any existing file + ResolvePathsRequest request = ResolvePathsRequest.ofPaths( moduleA, moduleB, moduleC ) + .setMainModuleDescriptor( moduleA ) + .setIncludeStatic( true ); + when( qdoxParser.fromSourcePath( moduleA ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleA" ) + .requires( "moduleB") + .build() ); + when( asmParser.getModuleDescriptor( moduleB ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleB" ) + .requires( Collections.singleton( JavaModifier.STATIC ), "moduleC" ) + .build() ); + when( asmParser.getModuleDescriptor( moduleC ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleC" ).build() ); + + ResolvePathsResult result = locationManager.resolvePaths( request ); + assertThat( "modulepathelements:" + result.getModulepathElements(), + result.getModulepathElements().size(), is( 2 ) ); + assertThat( result.getModulepathElements().containsKey( moduleB ), is( true ) ); + assertThat( result.getModulepathElements().containsKey( moduleC ), is( true ) ); + + } + + @Test + /** + * test case for https://issues.apache.org/jira/browse/MCOMPILER-482 + */ + public void includeDeeperRequiresStaticTransitive() throws Exception + { + Path moduleA = Paths.get( "src/test/resources/mock/module-info.java" ); // some file called module-info.java core + Path moduleB = Paths.get( "src/test/resources/mock/jar0.jar" ); // any existing file + Path moduleC = Paths.get( "src/test/resources/mock/jar1.jar" ); // any existing file + Path moduleD = Paths.get( "src/test/resources/mock/jar2.jar" ); // any existing file + ResolvePathsRequest request = ResolvePathsRequest.ofPaths( moduleA, moduleB, moduleC, moduleD ) + .setMainModuleDescriptor( moduleA ) + .setIncludeStatic( true ); + when( qdoxParser.fromSourcePath( moduleA ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleA" ) + .requires( "moduleB") + .build() ); + when( asmParser.getModuleDescriptor( moduleB ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleB" ) + .requires( "moduleC" ) + .requires( new HashSet<>( Arrays.asList( JavaModifier.STATIC,JavaModifier.TRANSITIVE ) ), "moduleD" ) + .build() ); + when( asmParser.getModuleDescriptor( moduleC ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleC" ) + .requires( new HashSet<>( Arrays.asList( JavaModifier.STATIC,JavaModifier.TRANSITIVE ) ), "moduleD" ) + .build() ); + when( asmParser.getModuleDescriptor( moduleD ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleD" ) + .build() ); + + ResolvePathsResult result = locationManager.resolvePaths( request ); + assertThat( "modulepathelements:" + result.getModulepathElements(), + result.getModulepathElements().size(), is( 3 ) ); + assertThat( result.getModulepathElements().containsKey( moduleB ), is( true ) ); + assertThat( result.getModulepathElements().containsKey( moduleC ), is( true ) ); + assertThat( result.getModulepathElements().containsKey( moduleD ), is( true ) ); + + } + } diff --git a/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/SourceModuleInfoParserTest.java b/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/SourceModuleInfoParserTest.java index 36037fa..9c4b883 100644 --- a/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/SourceModuleInfoParserTest.java +++ b/plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/SourceModuleInfoParserTest.java @@ -49,23 +49,23 @@ public void test() throws Exception JavaRequires requires = requiresIter.next(); assertEquals( "d.e", requires.name() ); - assertFalse( requires.modifiers​().contains( JavaRequires.JavaModifier.STATIC ) ); - assertFalse( requires.modifiers​().contains( JavaRequires.JavaModifier.TRANSITIVE ) ); + assertFalse( requires.modifiers().contains( JavaRequires.JavaModifier.STATIC ) ); + assertFalse( requires.modifiers().contains( JavaRequires.JavaModifier.TRANSITIVE ) ); requires = requiresIter.next(); assertEquals( "s.d.e", requires.name() ); - assertTrue( requires.modifiers​().contains( JavaRequires.JavaModifier.STATIC ) ); - assertFalse( requires.modifiers​().contains( JavaRequires.JavaModifier.TRANSITIVE ) ); + assertTrue( requires.modifiers().contains( JavaRequires.JavaModifier.STATIC ) ); + assertFalse( requires.modifiers().contains( JavaRequires.JavaModifier.TRANSITIVE ) ); requires = requiresIter.next(); assertEquals( "t.d.e", requires.name() ); - assertFalse( requires.modifiers​().contains( JavaRequires.JavaModifier.STATIC ) ); - assertTrue( requires.modifiers​().contains( JavaRequires.JavaModifier.TRANSITIVE ) ); + assertFalse( requires.modifiers().contains( JavaRequires.JavaModifier.STATIC ) ); + assertTrue( requires.modifiers().contains( JavaRequires.JavaModifier.TRANSITIVE ) ); requires = requiresIter.next(); assertEquals( "s.t.d.e", requires.name() ); - assertTrue( requires.modifiers​().contains( JavaRequires.JavaModifier.STATIC ) ); - assertTrue( requires.modifiers​().contains( JavaRequires.JavaModifier.TRANSITIVE ) ); + assertTrue( requires.modifiers().contains( JavaRequires.JavaModifier.STATIC ) ); + assertTrue( requires.modifiers().contains( JavaRequires.JavaModifier.TRANSITIVE ) ); Iterator exportsIter = moduleDescriptor.exports().iterator();