Skip to content

Commit 714fa9f

Browse files
committed
#24 Indirect static required modules should stay on classpath
1 parent b858426 commit 714fa9f

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

plexus-java/src/main/java/org/codehaus/plexus/languages/java/jpms/LocationManager.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,8 @@ public String extract( Path path )
259259
selectRequires( mainModuleDescriptor,
260260
Collections.unmodifiableMap( availableNamedModules ),
261261
Collections.unmodifiableMap( availableProviders ),
262-
requiredNamedModules );
262+
requiredNamedModules,
263+
true );
263264
}
264265

265266
for ( String additionalModule : request.getAdditionalModules() )
@@ -373,11 +374,15 @@ private ResolvePathResult resolvePath( Path path, ModuleNameExtractor fileModule
373374
private void selectRequires( JavaModuleDescriptor module,
374375
Map<String, JavaModuleDescriptor> availableModules,
375376
Map<String, Set<String>> availableProviders,
376-
Set<String> namedModules )
377+
Set<String> namedModules,
378+
boolean includeStatic )
377379
{
378380
for ( JavaModuleDescriptor.JavaRequires requires : module.requires() )
379381
{
380-
selectModule( requires.name(), availableModules, availableProviders, namedModules );
382+
if ( includeStatic || !requires.modifiers​().contains( JavaModuleDescriptor.JavaRequires.JavaModifier.STATIC ) )
383+
{
384+
selectModule( requires.name(), availableModules, availableProviders, namedModules );
385+
}
381386
}
382387

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

391396
if ( requiredModule != null && namedModules.add( providerModule ) )
392397
{
393-
selectRequires( requiredModule, availableModules, availableProviders, namedModules );
398+
selectRequires( requiredModule, availableModules, availableProviders, namedModules, false );
394399
}
395400
}
396401
}
@@ -404,7 +409,7 @@ private void selectModule( String module, Map<String, JavaModuleDescriptor> avai
404409

405410
if ( requiredModule != null && namedModules.add( module ) )
406411
{
407-
selectRequires( requiredModule, availableModules, availableProviders, namedModules );
412+
selectRequires( requiredModule, availableModules, availableProviders, namedModules, false );
408413
}
409414
}
410415

plexus-java/src/test/java/org/codehaus/plexus/languages/java/jpms/LocationManagerTest.java

+22
Original file line numberDiff line numberDiff line change
@@ -358,5 +358,27 @@ public void testParseModuleDescriptor() throws Exception
358358
assertThat( result.getModuleNameSource(), is( ModuleNameSource.MODULEDESCRIPTOR ) );
359359
assertThat( result.getModuleDescriptor().name(), is( "a.b.c" ) );
360360
}
361+
362+
@Test
363+
public void testTransitiveStatic() throws Exception
364+
{
365+
Path moduleA = Paths.get( "src/test/resources/mock/module-info.java" ); // some file called module-info.java
366+
Path moduleB = Paths.get( "src/test/resources/mock/jar0.jar" ); // any existing file
367+
Path moduleC = Paths.get( "src/test/resources/mock/jar1.jar" ); // any existing file
368+
ResolvePathsRequest<Path> request = ResolvePathsRequest.ofPaths( moduleB, moduleC ).setMainModuleDescriptor( moduleA );
369+
370+
when( qdoxParser.fromSourcePath( moduleA ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleA" )
371+
.requires( "moduleB" ).build() );
372+
when( asmParser.getModuleDescriptor( moduleB ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleB" )
373+
.requires​( Collections.singleton( JavaModuleDescriptor.JavaRequires.JavaModifier.STATIC ), "moduleC" ).build() );
374+
when( asmParser.getModuleDescriptor( moduleC ) ).thenReturn( JavaModuleDescriptor.newModule( "moduleC" ).build() );
375+
376+
377+
ResolvePathsResult<Path> result = locationManager.resolvePaths( request );
378+
assertThat( result.getPathElements().size(), is( 2 ) );
379+
assertThat( result.getModulepathElements().size(), is( 1 ) );
380+
assertThat( result.getClasspathElements().size(), is( 1 ) );
381+
assertThat( result.getPathExceptions().size(), is( 0 ) );
382+
}
361383

362384
}

0 commit comments

Comments
 (0)