Skip to content

Commit e32a161

Browse files
committed
Get more known modules from 'java-module-dependencies' if possible
1 parent c583470 commit e32a161

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoPlugin.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,24 @@
3333
import org.gradle.api.file.Directory;
3434
import org.gradle.api.file.ProjectLayout;
3535
import org.gradle.api.file.RegularFile;
36+
import org.gradle.api.file.RegularFileProperty;
3637
import org.gradle.api.plugins.HelpTasksPlugin;
3738
import org.gradle.api.plugins.JavaPlugin;
3839
import org.gradle.api.provider.Provider;
3940
import org.gradle.api.tasks.SourceSetContainer;
4041
import org.gradle.util.GradleVersion;
4142
import org.gradlex.javamodule.moduleinfo.tasks.ModuleDescriptorRecommendation;
4243

44+
import java.io.CharArrayReader;
4345
import java.io.File;
46+
import java.io.IOException;
47+
import java.lang.reflect.Method;
4448
import java.util.Collection;
49+
import java.util.Collections;
4550
import java.util.Comparator;
4651
import java.util.List;
4752
import java.util.Map;
53+
import java.util.Properties;
4854
import java.util.Set;
4955
import java.util.stream.Collectors;
5056
import java.util.stream.Stream;
@@ -198,12 +204,40 @@ private void registerTransform(String fileExtension, Project project, ExtraJavaM
198204
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (k1, k2) -> k1)).entrySet().stream()
199205
.collect(Collectors.toMap(Map.Entry::getKey, c -> new PublishedMetadata(c.getKey(), c.getValue(), project)))
200206
));
207+
208+
p.getAdditionalKnownModules().set(extractFromModuleDependenciesPlugin(project));
201209
});
202210
t.getFrom().attribute(artifactType, fileExtension).attribute(javaModule, false);
203211
t.getTo().attribute(artifactType, fileExtension).attribute(javaModule, true);
204212
});
205213
}
206214

215+
private Provider<Map<String, String>> extractFromModuleDependenciesPlugin(Project project) {
216+
return project.provider(() -> {
217+
Object javaModuleDependencies = project.getExtensions().findByName("javaModuleDependencies");
218+
if (javaModuleDependencies == null) {
219+
return Collections.emptyMap();
220+
}
221+
try {
222+
Method getModulesProperties = javaModuleDependencies.getClass().getMethod("getModulesProperties");
223+
RegularFileProperty file = (RegularFileProperty) getModulesProperties.invoke(javaModuleDependencies);
224+
return project.getProviders().fileContents(file).getAsText().map(c -> {
225+
Properties p = new Properties();
226+
try {
227+
p.load(new CharArrayReader(c.toCharArray()));
228+
} catch (IOException e) {
229+
throw new RuntimeException(e);
230+
}
231+
@SuppressWarnings({"rawtypes", "unchecked"})
232+
Map<String, String> result = (Map) p;
233+
return result;
234+
}).getOrElse(Collections.emptyMap());
235+
} catch (ReflectiveOperationException e) {
236+
throw new RuntimeException(e);
237+
}
238+
});
239+
}
240+
207241
private Stream<Map.Entry<String, Configuration>> existingComponentsOfInterest(Configuration resolvable, ExtraJavaModuleInfoPluginExtension extension) {
208242
Set<String> componentsOfInterest = componentsOfInterest(extension);
209243
if (componentsOfInterest.isEmpty()) {

src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoTransform.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ public interface Parameter extends TransformParameters {
110110

111111
@Input
112112
MapProperty<String, PublishedMetadata> getRequiresFromMetadata();
113+
114+
@Input
115+
MapProperty<String, String> getAdditionalKnownModules();
113116
}
114117

115118
@InputArtifact
@@ -493,6 +496,12 @@ private String gaToModuleName(String ga) {
493496

494497
@Nullable
495498
private String moduleNameFromSharedMapping(String ga) {
499+
Optional<String> foundInCustom = getParameters().getAdditionalKnownModules().get().entrySet().stream().filter(
500+
e -> e.getValue().equals(ga)).map(Map.Entry::getKey).findFirst();
501+
if (foundInCustom.isPresent()) {
502+
return foundInCustom.get();
503+
}
504+
496505
try {
497506
Class<?> sharedMappings = Class.forName("org.gradlex.javamodule.dependencies.SharedMappings");
498507
@SuppressWarnings("unchecked")

0 commit comments

Comments
 (0)