Skip to content

Commit

Permalink
#24 Indirect static required modules should stay on classpath
Browse files Browse the repository at this point in the history
  • Loading branch information
rfscholte committed May 27, 2019
2 parents b858426 + 714fa9f commit 7778d28
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,8 @@ public String extract( Path path )
selectRequires( mainModuleDescriptor,
Collections.unmodifiableMap( availableNamedModules ),
Collections.unmodifiableMap( availableProviders ),
requiredNamedModules );
requiredNamedModules,
true );
}

for ( String additionalModule : request.getAdditionalModules() )
Expand Down Expand Up @@ -373,11 +374,15 @@ private ResolvePathResult resolvePath( Path path, ModuleNameExtractor fileModule
private void selectRequires( JavaModuleDescriptor module,
Map<String, JavaModuleDescriptor> availableModules,
Map<String, Set<String>> availableProviders,
Set<String> namedModules )
Set<String> namedModules,
boolean includeStatic )
{
for ( JavaModuleDescriptor.JavaRequires requires : module.requires() )
{
selectModule( requires.name(), availableModules, availableProviders, namedModules );
if ( includeStatic || !requires.modifiers​().contains( JavaModuleDescriptor.JavaRequires.JavaModifier.STATIC ) )
{
selectModule( requires.name(), availableModules, availableProviders, namedModules );
}
}

for ( String uses : module.uses() )
Expand All @@ -390,7 +395,7 @@ private void selectRequires( JavaModuleDescriptor module,

if ( requiredModule != null && namedModules.add( providerModule ) )
{
selectRequires( requiredModule, availableModules, availableProviders, namedModules );
selectRequires( requiredModule, availableModules, availableProviders, namedModules, false );
}
}
}
Expand All @@ -404,7 +409,7 @@ private void selectModule( String module, Map<String, JavaModuleDescriptor> avai

if ( requiredModule != null && namedModules.add( module ) )
{
selectRequires( requiredModule, availableModules, availableProviders, namedModules );
selectRequires( requiredModule, availableModules, availableProviders, namedModules, false );
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -358,5 +358,27 @@ public void testParseModuleDescriptor() throws Exception
assertThat( result.getModuleNameSource(), is( ModuleNameSource.MODULEDESCRIPTOR ) );
assertThat( result.getModuleDescriptor().name(), is( "a.b.c" ) );
}

@Test
public void testTransitiveStatic() 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<Path> request = ResolvePathsRequest.ofPaths( moduleB, moduleC ).setMainModuleDescriptor( moduleA );

when( qdoxParser.fromSourcePath( moduleA ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleA" )
.requires( "moduleB" ).build() );
when( asmParser.getModuleDescriptor( moduleB ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleB" )
.requires​( Collections.singleton( JavaModuleDescriptor.JavaRequires.JavaModifier.STATIC ), "moduleC" ).build() );
when( asmParser.getModuleDescriptor( moduleC ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleC" ).build() );


ResolvePathsResult<Path> result = locationManager.resolvePaths( request );
assertThat( result.getPathElements().size(), is( 2 ) );
assertThat( result.getModulepathElements().size(), is( 1 ) );
assertThat( result.getClasspathElements().size(), is( 1 ) );
assertThat( result.getPathExceptions().size(), is( 0 ) );
}

}

0 comments on commit 7778d28

Please sign in to comment.