Skip to content

Commit 86e0436

Browse files
olamyrfscholte
andauthored
requires static from deeper level must be included if requested. see MCOMPILER-481 (#106)
* fix issues including requires static. see MCOMPILER-481 Signed-off-by: Olivier Lamy <[email protected]> Co-authored-by: rfscholte <[email protected]>
1 parent 7d9c4a4 commit 86e0436

File tree

9 files changed

+175
-59
lines changed

9 files changed

+175
-59
lines changed

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

+2-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.io.InputStream;
2424
import java.util.ArrayList;
2525
import java.util.Arrays;
26-
import java.util.Collections;
2726
import java.util.HashSet;
2827
import java.util.LinkedHashSet;
2928
import java.util.List;
@@ -74,7 +73,7 @@ public void visitRequire( String module, int access, String version )
7473
modifiers.add( JavaModuleDescriptor.JavaRequires.JavaModifier.TRANSITIVE );
7574
}
7675

77-
wrapper.builder.requires( modifiers, module );
76+
wrapper.builder.requires( modifiers, module );
7877
}
7978
else
8079
{
@@ -109,7 +108,7 @@ public void visitProvide( String service, String... providers )
109108
{
110109
renamedProvides.add( provider.replace( '/', '.' ) );
111110
}
112-
wrapper.builder.provides( service.replace( '/', '.' ), renamedProvides );
111+
wrapper.builder.provides( service.replace( '/', '.' ), renamedProvides );
113112
}
114113
};
115114
}

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

+41-5
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,19 @@ public boolean equals( Object obj )
128128
}
129129
return true;
130130
}
131-
131+
132+
@Override
133+
public String toString() {
134+
return "JavaModuleDescriptor{" +
135+
"name='" + name + '\'' +
136+
", automatic=" + automatic +
137+
", requires=" + requires +
138+
", exports=" + exports +
139+
", uses=" + uses +
140+
", provides=" + provides +
141+
'}';
142+
}
143+
132144
/**
133145
* A JavaModuleDescriptor Builder
134146
*
@@ -158,7 +170,7 @@ private Builder setAutomatic( boolean isAutomatic )
158170
* @param name The module name
159171
* @return This builder
160172
*/
161-
public Builder requires( Set<JavaModuleDescriptor.JavaRequires.JavaModifier> modifiers, String name )
173+
public Builder requires( Set<JavaModuleDescriptor.JavaRequires.JavaModifier> modifiers, String name )
162174
{
163175
jModule.requires.add( new JavaRequires( modifiers, name ) );
164176
return this;
@@ -213,7 +225,7 @@ public Builder uses( String service )
213225
return this;
214226
}
215227

216-
public Builder provides( String service, List<String> providers )
228+
public Builder provides( String service, List<String> providers )
217229
{
218230
jModule.provides.add( new JavaProvides( service, providers ) );
219231
return this;
@@ -254,7 +266,7 @@ private JavaRequires( String name )
254266
this.name = name;
255267
}
256268

257-
public Set<JavaModifier> modifiers()
269+
public Set<JavaModifier> modifiers()
258270
{
259271
return modifiers;
260272
}
@@ -270,7 +282,7 @@ public String name()
270282
* @author Robert Scholte
271283
* @since 1.0.0
272284
*/
273-
public static enum JavaModifier
285+
public enum JavaModifier
274286
{
275287
STATIC, TRANSITIVE
276288
}
@@ -308,6 +320,14 @@ public boolean equals( Object obj )
308320
}
309321
return true;
310322
}
323+
324+
@Override
325+
public String toString() {
326+
return "JavaRequires{" +
327+
"modifiers=" + modifiers +
328+
", name='" + name + '\'' +
329+
'}';
330+
}
311331
}
312332

313333
/**
@@ -377,6 +397,14 @@ public boolean equals( Object obj )
377397
}
378398
return true;
379399
}
400+
401+
@Override
402+
public String toString() {
403+
return "JavaExports{" +
404+
"source='" + source + '\'' +
405+
", targets=" + targets +
406+
'}';
407+
}
380408
}
381409

382410
/**
@@ -440,5 +468,13 @@ public boolean equals( Object obj )
440468
}
441469
return true;
442470
}
471+
472+
@Override
473+
public String toString() {
474+
return "JavaProvides{" +
475+
"service='" + service + '\'' +
476+
", providers=" + providers +
477+
'}';
478+
}
443479
}
444480
}

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

+21-15
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,9 @@ public String extract( Path path )
261261
Collections.unmodifiableMap( availableNamedModules ),
262262
Collections.unmodifiableMap( availableProviders ),
263263
requiredNamedModules,
264-
true,
265-
true );
264+
true,
265+
true,
266+
request.isIncludeStatic());
266267
}
267268

268269
for ( String additionalModule : request.getAdditionalModules() )
@@ -271,8 +272,9 @@ public String extract( Path path )
271272
Collections.unmodifiableMap( availableNamedModules ),
272273
Collections.unmodifiableMap( availableProviders ),
273274
requiredNamedModules,
274-
request.isIncludeStatic(),
275-
true );
275+
true,
276+
true,
277+
request.isIncludeStatic());
276278
}
277279

278280
// in case of identical module names, first one wins
@@ -400,19 +402,21 @@ private void selectRequires( JavaModuleDescriptor module,
400402
Map<String, JavaModuleDescriptor> availableModules,
401403
Map<String, Set<String>> availableProviders,
402404
Set<String> namedModules,
403-
boolean includeStatic,
404-
boolean includeTransitive )
405+
boolean isRootModule,
406+
boolean includeAsTransitive,
407+
boolean includeStatic)
405408
{
406409
for ( JavaModuleDescriptor.JavaRequires requires : module.requires() )
407410
{
408411
// includeTransitive is one level deeper compared to includeStatic
409-
if ( includeStatic || !requires.modifiers​().contains( JavaModuleDescriptor.JavaRequires.JavaModifier.STATIC ) )
412+
if ( isRootModule
413+
|| includeStatic
414+
|| includeAsTransitive
415+
|| !requires.modifiers().contains( JavaModuleDescriptor.JavaRequires.JavaModifier.STATIC )
416+
|| requires.modifiers().contains( JavaModuleDescriptor.JavaRequires.JavaModifier.TRANSITIVE ) )
410417
{
411-
selectModule( requires.name(), availableModules, availableProviders, namedModules, false, includeStatic );
412-
}
413-
else if ( includeTransitive && requires.modifiers​().contains( JavaModuleDescriptor.JavaRequires.JavaModifier.TRANSITIVE ) )
414-
{
415-
selectModule( requires.name(), availableModules, availableProviders, namedModules, false, includeStatic );
418+
selectModule( requires.name(), availableModules, availableProviders,
419+
namedModules, false, includeStatic, includeStatic );
416420
}
417421
}
418422

@@ -426,21 +430,23 @@ else if ( includeTransitive && requires.modifiers​().contains( JavaModuleDescr
426430

427431
if ( requiredModule != null && namedModules.add( providerModule ) )
428432
{
429-
selectRequires( requiredModule, availableModules, availableProviders, namedModules, false, includeStatic );
433+
selectRequires( requiredModule, availableModules, availableProviders,
434+
namedModules, false, includeAsTransitive, includeStatic );
430435
}
431436
}
432437
}
433438
}
434439
}
435440

436441
private void selectModule( String module, Map<String, JavaModuleDescriptor> availableModules, Map<String, Set<String>> availableProviders,
437-
Set<String> namedModules, boolean includeStatic, boolean includeTransitive )
442+
Set<String> namedModules, boolean isRootModule, boolean includeTransitive, boolean includeStatic )
438443
{
439444
JavaModuleDescriptor requiredModule = availableModules.get( module );
440445

441446
if ( requiredModule != null && namedModules.add( module ) )
442447
{
443-
selectRequires( requiredModule, availableModules, availableProviders, namedModules, includeStatic, includeTransitive );
448+
selectRequires( requiredModule, availableModules, availableProviders,
449+
namedModules, false, includeTransitive, includeStatic );
444450
}
445451
}
446452

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

+11
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,15 @@ public Map<T, Exception> getPathExceptions()
122122
{
123123
return pathExceptions;
124124
}
125+
126+
@Override
127+
public String toString() {
128+
return "ResolvePathsResult{" + System.lineSeparator() +
129+
"mainModuleDescriptor=" + mainModuleDescriptor + System.lineSeparator() +
130+
", pathElements=" + pathElements + System.lineSeparator() +
131+
", modulepathElements=" + modulepathElements + System.lineSeparator() +
132+
", classpathElements=" + classpathElements + System.lineSeparator() +
133+
", pathExceptions=" + pathExceptions + System.lineSeparator() +
134+
'}';
135+
}
125136
}

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

+2-4
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
import java.io.IOException;
2424
import java.nio.file.Path;
2525
import java.util.ArrayList;
26-
import java.util.Collections;
27-
import java.util.HashSet;
2826
import java.util.LinkedHashSet;
2927
import java.util.List;
3028
import java.util.Set;
@@ -69,7 +67,7 @@ public org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor fromSourcePa
6967
{
7068
modifiers.add( org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor.JavaRequires.JavaModifier.TRANSITIVE );
7169
}
72-
builder.requires( modifiers , requires.getModule().getName() );
70+
builder.requires( modifiers , requires.getModule().getName() );
7371
}
7472
else
7573
{
@@ -107,7 +105,7 @@ public org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor fromSourcePa
107105
providers.add( provider.getName() );
108106
}
109107

110-
builder.provides( provides.getService().getName(), providers );
108+
builder.provides( provides.getService().getName(), providers );
111109
}
112110
}
113111
else

plexus-java/src/main/java9/org/codehaus/plexus/languages/java/jpms/BinaryModuleInfoParser.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ JavaModuleDescriptor parse( InputStream in ) throws IOException
5252
{
5353
modifiers.add( org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor.JavaRequires.JavaModifier.TRANSITIVE );
5454
}
55-
builder.requires( modifiers, requires.name() );
55+
builder.requires( modifiers, requires.name() );
5656
}
5757
else
5858
{
@@ -79,7 +79,7 @@ JavaModuleDescriptor parse( InputStream in ) throws IOException
7979

8080
for ( ModuleDescriptor.Provides provides : descriptor.provides() )
8181
{
82-
builder.provides( provides.service(), provides.providers() );
82+
builder.provides( provides.service(), provides.providers() );
8383
}
8484

8585

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public void testOutputDirectoryDescriptor()
110110
Set<JavaRequires> expectedRequires = JavaModuleDescriptor.newAutomaticModule( "_" )
111111
.requires( "java.base" )
112112
.requires( "java.xml" )
113-
.requires( Collections.singleton( JavaRequires.JavaModifier.STATIC ), "com.google.common" )
113+
.requires( Collections.singleton( JavaRequires.JavaModifier.STATIC ), "com.google.common" )
114114
.build()
115115
.requires();
116116

@@ -192,9 +192,9 @@ public void testRequires() throws Exception
192192
Set<JavaRequires> expectedRequires = JavaModuleDescriptor.newAutomaticModule( "_" )
193193
.requires( "java.base" )
194194
.requires( "mod_r" )
195-
.requires( Collections.singleton( JavaRequires.JavaModifier.STATIC ), "mod_r_s" )
196-
.requires( Collections.singleton( JavaRequires.JavaModifier.TRANSITIVE ), "mod_r_t" )
197-
.requires( new HashSet<JavaRequires.JavaModifier>( Arrays.asList( JavaRequires.JavaModifier.STATIC, JavaRequires.JavaModifier.TRANSITIVE ) ), "mod_r_s_t" )
195+
.requires( Collections.singleton( JavaRequires.JavaModifier.STATIC ), "mod_r_s" )
196+
.requires( Collections.singleton( JavaRequires.JavaModifier.TRANSITIVE ), "mod_r_t" )
197+
.requires( new HashSet<JavaRequires.JavaModifier>( Arrays.asList( JavaRequires.JavaModifier.STATIC, JavaRequires.JavaModifier.TRANSITIVE ) ), "mod_r_s_t" )
198198
.build()
199199
.requires();
200200

0 commit comments

Comments
 (0)