Skip to content

Commit dcb3cf2

Browse files
committed
more
1 parent 5525c9c commit dcb3cf2

File tree

2 files changed

+144
-38
lines changed

2 files changed

+144
-38
lines changed

devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/workspace/descriptors/ProjectDescriptorBuilder.java

Lines changed: 35 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import io.quarkus.bootstrap.workspace.ArtifactSources;
2525
import io.quarkus.bootstrap.workspace.DefaultArtifactSources;
26+
import io.quarkus.bootstrap.workspace.LazySourceDir;
2627
import io.quarkus.bootstrap.workspace.SourceDir;
2728
import io.quarkus.bootstrap.workspace.WorkspaceModule;
2829
import io.quarkus.bootstrap.workspace.WorkspaceModuleId;
@@ -35,7 +36,6 @@ public static Provider<DefaultProjectDescriptor> buildForApp(Project project) {
3536
final SourceSetContainer srcSets = evaluated.getExtensions().getByType(SourceSetContainer.class);
3637
project.getTasks().withType(Jar.class).forEach(jarTask -> {
3738
final String classifier = jarTask.getArchiveClassifier().get();
38-
System.out.println("Classifier '" + classifier + "'");
3939
final Map<String, Task> contentTasks = new HashMap<>();
4040
jarTask.getTaskDependencies().getDependencies(jarTask)
4141
.forEach(o -> {
@@ -47,67 +47,64 @@ public static Provider<DefaultProjectDescriptor> buildForApp(Project project) {
4747
contentTasks.put(o.getName(), o);
4848
}
4949
});
50-
System.out.println(" content tasks:");
50+
final List<File> classesDirs = new ArrayList<>(2);
51+
final List<File> resourcesOutputDirs = new ArrayList<>(2);
5152
for (Task t : contentTasks.values()) {
5253
File destDir = null;
5354
if (t instanceof AbstractCompile compile) {
5455
destDir = compile.getDestinationDirectory().getAsFile().get();
56+
classesDirs.add(destDir);
5557
} else if (t instanceof ProcessResources resources) {
5658
destDir = resources.getDestinationDir();
59+
resourcesOutputDirs.add(destDir);
5760
} else if (t instanceof KotlinCompileTool kotlinCompile) {
5861
destDir = kotlinCompile.getDestinationDirectory().getAsFile().get();
62+
classesDirs.add(destDir);
5963
}
60-
System.out.println(" - " + t.getName() + " " + destDir);
6164
}
6265

66+
final List<SourceDir> sourceDirs = new ArrayList<>(2);
67+
final List<SourceDir> resourceDirs = new ArrayList<>(2);
6368
for (SourceSet srcSet : srcSets) {
64-
System.out.println("SourceSet " + srcSet.getName());
65-
for (var f : srcSet.getOutput().getClassesDirs().getFiles()) {
66-
System.out.println(" classes: " + f);
69+
for (var classesDir : srcSet.getOutput().getClassesDirs().getFiles()) {
70+
if (classesDirs.contains(classesDir)) {
71+
for (var srcDir : srcSet.getAllJava().getSrcDirs()) {
72+
sourceDirs.add(new LazySourceDir(srcDir.toPath(), classesDir.toPath())); // TODO findGeneratedSourceDir(destDir, sourceSet));
73+
}
74+
}
6775
}
68-
System.out.println(" process resources task: " + srcSet.getProcessResourcesTaskName());
69-
System.out.println(" output dir: " + srcSet.getOutput().getResourcesDir());
70-
}
7176

72-
SourceSet sourceSet = null;
73-
if (classifier.isEmpty()) {
74-
sourceSet = srcSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME);
75-
} else if ("test-fixtures".equals(classifier)) {
76-
sourceSet = srcSets.getByName("testFixtures");
77+
final File resourcesOutputDir = srcSet.getOutput().getResourcesDir();
78+
if (resourcesOutputDirs.contains(resourcesOutputDir)) {
79+
for (var dir : srcSet.getResources().getSrcDirs()) {
80+
resourceDirs.add(new LazySourceDir(dir.toPath(), resourcesOutputDir.toPath()));
81+
}
82+
}
7783
}
7884

79-
if (sourceSet != null) {
80-
System.out.println("ProjectDescriptorBuilder.buildForApp jar task for classifier '" + classifier + "'");
81-
System.out.println(" classes: " + sourceSet.getOutput().getClassesDirs().getFiles());
82-
System.out.println(" generated sources: " + sourceSet.getOutput().getGeneratedSourcesDirs().getFiles());
83-
System.out.println(" java: " + sourceSet.getJava().getSourceDirectories().getFiles());
84-
System.out.println(" all java: " + sourceSet.getAllJava().getSourceDirectories().getFiles());
85-
System.out.println(" compile task: " + sourceSet.getCompileJavaTaskName());
86-
87-
System.out.println(" process resources task: " + sourceSet.getProcessResourcesTaskName());
88-
var sources = new ClassifiedSources(classifier,
89-
sourceSet.getOutput().getClassesDirs().getFiles());
90-
builder.classifiedSources.put(sources.classifier, sources);
85+
if (!sourceDirs.isEmpty() || !resourceDirs.isEmpty()) {
86+
builder.moduleBuilder.addArtifactSources(new DefaultArtifactSources(classifier, sourceDirs, resourceDirs));
9187
}
9288
});
9389

94-
evaluated.getTasks().withType(AbstractCompile.class).configureEach(builder::readConfigurationFor);
95-
builder.maybeConfigureKotlinJvmCompile(evaluated);
96-
evaluated.getTasks().withType(ProcessResources.class).configureEach(builder::readConfigurationFor);
90+
//builder.maybeConfigureKotlinJvmCompile(evaluated);
9791
});
9892

9993
return project.getProviders().provider(() -> {
94+
/* @formatter:off
10095
System.out.println("ProjectDescriptorBuilder.buildForApp classified sources");
101-
builder.classifiedSources.values().forEach(src -> {
102-
System.out.println(" '" + src.classifier + "'");
103-
src.sources.forEach(sod -> {
104-
System.out.println(" " + sod.src + " -> " + sod.output);
105-
});
106-
});
107-
108-
for (var classifiedSources : builder.classifiedSources.values()) {
109-
builder.moduleBuilder.addArtifactSources(classifiedSources.toArtifactSources());
96+
for (var classifier : builder.moduleBuilder.getSourceClassifiers()) {
97+
System.out.println(" classifier '" + classifier + "'");
98+
var as = builder.moduleBuilder.getSources(classifier);
99+
for (var srcDir : as.getSourceDirs()) {
100+
System.out.println(" " + srcDir.getDir() + " -> " + srcDir.getOutputDir());
101+
}
102+
for (var srcDir : as.getResourceDirs()) {
103+
System.out.println(" " + srcDir.getDir() + " -> " + srcDir.getOutputDir());
104+
}
110105
}
106+
@formatter:on
107+
*/
111108
return new DefaultProjectDescriptor(builder.moduleBuilder);
112109
});
113110
}
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package io.quarkus.bootstrap.workspace;
2+
3+
import java.io.IOException;
4+
import java.io.Serial;
5+
import java.io.Serializable;
6+
import java.nio.file.Files;
7+
import java.nio.file.Path;
8+
import java.util.Collections;
9+
import java.util.Map;
10+
import java.util.Objects;
11+
12+
import io.quarkus.paths.DirectoryPathTree;
13+
import io.quarkus.paths.EmptyPathTree;
14+
import io.quarkus.paths.PathFilter;
15+
import io.quarkus.paths.PathTree;
16+
17+
/**
18+
* This implementation checks whether a directory exists before returning path trees instead of eagerly during initialization.
19+
*/
20+
public class LazySourceDir implements SourceDir, Serializable {
21+
22+
private Path srcDir;
23+
private PathFilter srcFilter;
24+
private Path destDir;
25+
private PathFilter destFilter;
26+
private Path genSrcDir;
27+
private Map<Object, Object> data;
28+
29+
/**
30+
* For deserialization only
31+
*/
32+
public LazySourceDir() {
33+
}
34+
35+
public LazySourceDir(Path srcDir, Path destinationDir) {
36+
this(srcDir, destinationDir, null, Collections.emptyMap());
37+
}
38+
39+
public LazySourceDir(Path srcDir, Path destinationDir, Path generatedSourcesDir) {
40+
this(srcDir, destinationDir, generatedSourcesDir, Collections.emptyMap());
41+
}
42+
43+
public LazySourceDir(Path srcDir, Path destinationDir, Path generatedSourcesDir, Map<Object, Object> data) {
44+
this(srcDir, null, destinationDir, null, generatedSourcesDir, data);
45+
}
46+
47+
public LazySourceDir(Path srcDir, PathFilter srcFilter, Path destDir, PathFilter destFilter, Path genSrcDir,
48+
Map<Object, Object> data) {
49+
this.srcDir = Objects.requireNonNull(srcDir, "srcDir is null");
50+
this.srcFilter = srcFilter;
51+
this.destDir = Objects.requireNonNull(destDir, "destDir is null");
52+
this.destFilter = destFilter;
53+
this.genSrcDir = genSrcDir;
54+
this.data = data;
55+
}
56+
57+
@Override
58+
public Path getDir() {
59+
return srcDir;
60+
}
61+
62+
@Override
63+
public PathTree getSourceTree() {
64+
return Files.exists(srcDir) ? new DirectoryPathTree(srcDir, srcFilter) : EmptyPathTree.getInstance();
65+
}
66+
67+
@Override
68+
public Path getOutputDir() {
69+
return destDir;
70+
}
71+
72+
@Override
73+
public Path getAptSourcesDir() {
74+
return genSrcDir;
75+
}
76+
77+
@Override
78+
public PathTree getOutputTree() {
79+
return Files.exists(destDir) ? new DirectoryPathTree(destDir, destFilter) : EmptyPathTree.getInstance();
80+
}
81+
82+
public <T> T getValue(Object key, Class<T> type) {
83+
final Object o = data.get(key);
84+
return o == null ? null : type.cast(o);
85+
}
86+
87+
@Serial
88+
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
89+
out.writeUTF(srcDir.toAbsolutePath().toString());
90+
out.writeObject(srcFilter);
91+
out.writeUTF(destDir.toAbsolutePath().toString());
92+
out.writeObject(destFilter);
93+
out.writeUTF(genSrcDir == null ? "null" : genSrcDir.toAbsolutePath().toString());
94+
out.writeObject(data);
95+
}
96+
97+
@Serial
98+
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
99+
srcDir = Path.of(in.readUTF());
100+
srcFilter = (PathFilter) in.readObject();
101+
destDir = Path.of(in.readUTF());
102+
destFilter = (PathFilter) in.readObject();
103+
final String genSrcStr = in.readUTF();
104+
if (!"null".equals(genSrcStr)) {
105+
genSrcDir = Path.of(genSrcStr);
106+
}
107+
data = (Map<Object, Object>) in.readObject();
108+
}
109+
}

0 commit comments

Comments
 (0)