Skip to content
This repository was archived by the owner on May 12, 2024. It is now read-only.

Commit 59d1e8b

Browse files
committed
Use RuntimeDepCollector in gradle-plugin
1 parent a00f56c commit 59d1e8b

2 files changed

Lines changed: 44 additions & 44 deletions

File tree

gradle-plugin/src/main/java/net/raphimc/javadowngrader/gradle/task/DowngradeJarTask.java

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@
2323
import net.raphimc.javadowngrader.impl.classtransform.classprovider.LazyFileClassProvider;
2424
import net.raphimc.javadowngrader.impl.classtransform.classprovider.PathClassProvider;
2525
import net.raphimc.javadowngrader.impl.classtransform.util.ClassNameUtil;
26-
import net.raphimc.javadowngrader.impl.classtransform.util.FileSystemUtil;
2726
import net.raphimc.javadowngrader.runtime.RuntimeRoot;
28-
import net.raphimc.javadowngrader.util.Constants;
2927
import org.gradle.api.DefaultTask;
3028
import org.gradle.api.file.FileCollection;
3129
import org.gradle.api.tasks.Internal;
@@ -34,14 +32,17 @@
3432

3533
import java.io.File;
3634
import java.io.IOException;
35+
import java.io.InputStream;
3736
import java.io.UncheckedIOException;
3837
import java.net.URI;
3938
import java.net.URISyntaxException;
4039
import java.nio.file.FileSystem;
4140
import java.nio.file.FileSystems;
4241
import java.nio.file.Files;
4342
import java.nio.file.Path;
43+
import java.util.Collection;
4444
import java.util.Collections;
45+
import java.util.HashSet;
4546
import java.util.Objects;
4647
import java.util.stream.Stream;
4748

@@ -74,12 +75,17 @@ public void run() throws IOException, URISyntaxException {
7475
try (FileSystem inFs = FileSystems.newFileSystem(this.input.toPath(), null)) {
7576
final Path inRoot = inFs.getRootDirectories().iterator().next();
7677

78+
final Collection<String> runtimeDeps = new HashSet<>();
7779
final TransformerManager transformerManager = new TransformerManager(
7880
new PathClassProvider(inRoot, new LazyFileClassProvider(this.compileClassPath.getFiles(), new BasicClassProvider()))
7981
);
80-
transformerManager.addBytecodeTransformer(new JavaDowngraderTransformer(
81-
transformerManager, this.targetVersion, c -> Files.isRegularFile(inRoot.resolve(ClassNameUtil.toClassFilename(c)))
82-
));
82+
transformerManager.addBytecodeTransformer(
83+
JavaDowngraderTransformer.builder(transformerManager)
84+
.targetVersion(targetVersion)
85+
.classFilter(c -> Files.isRegularFile(inRoot.resolve(ClassNameUtil.toClassFilename(c))))
86+
.depCollector(runtimeDeps::add)
87+
.build()
88+
);
8389

8490
final String outputName = this.input.getName().substring(0, this.input.getName().length() - 4) + this.outputSuffix;
8591
final File outputFile = new File(this.input.getParentFile(), outputName + ".jar");
@@ -122,21 +128,16 @@ public void run() throws IOException, URISyntaxException {
122128

123129
// Copy runtime classes
124130
if (this.copyRuntimeClasses) {
125-
try (FileSystem runtimeRootFs = FileSystemUtil.getOrCreateFileSystem(RuntimeRoot.class.getResource("").toURI())) {
126-
final Path runtimeRoot = runtimeRootFs.getPath(Constants.JAVADOWNGRADER_RUNTIME_PACKAGE);
127-
try (Stream<Path> stream = Files.walk(runtimeRoot)) {
128-
stream.filter(Files::isRegularFile)
129-
.filter(p -> !p.getFileName().toString().equals(Constants.JAVADOWNGRADER_RUNTIME_ROOT))
130-
.forEach(path -> {
131-
final String relative = ClassNameUtil.slashName(runtimeRoot.relativize(path));
132-
final Path dest = outRoot.resolve(Constants.JAVADOWNGRADER_RUNTIME_PACKAGE + relative);
133-
try {
134-
Files.createDirectories(dest.getParent());
135-
Files.copy(path, dest);
136-
} catch (IOException e) {
137-
throw new UncheckedIOException(e);
138-
}
139-
});
131+
for (final String runtimeDep : runtimeDeps) {
132+
final String classPath = runtimeDep.concat(".class");
133+
try (InputStream is = RuntimeRoot.class.getResourceAsStream("/" + classPath)) {
134+
if (is == null) continue;
135+
final Path dest = outRoot.resolve(classPath);
136+
final Path parent = dest.getParent();
137+
if (parent != null) {
138+
Files.createDirectories(parent);
139+
}
140+
Files.copy(is, dest);
140141
}
141142
}
142143
}

gradle-plugin/src/main/java/net/raphimc/javadowngrader/gradle/task/DowngradeSourceSetTask.java

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@
2323
import net.raphimc.javadowngrader.impl.classtransform.classprovider.LazyFileClassProvider;
2424
import net.raphimc.javadowngrader.impl.classtransform.classprovider.PathClassProvider;
2525
import net.raphimc.javadowngrader.impl.classtransform.util.ClassNameUtil;
26-
import net.raphimc.javadowngrader.impl.classtransform.util.FileSystemUtil;
2726
import net.raphimc.javadowngrader.runtime.RuntimeRoot;
28-
import net.raphimc.javadowngrader.util.Constants;
2927
import org.gradle.api.DefaultTask;
3028
import org.gradle.api.tasks.Internal;
3129
import org.gradle.api.tasks.SourceSet;
@@ -34,11 +32,12 @@
3432

3533
import java.io.File;
3634
import java.io.IOException;
35+
import java.io.InputStream;
3736
import java.io.UncheckedIOException;
38-
import java.net.URISyntaxException;
39-
import java.nio.file.FileSystem;
4037
import java.nio.file.Files;
4138
import java.nio.file.Path;
39+
import java.util.Collection;
40+
import java.util.HashSet;
4241
import java.util.Objects;
4342
import java.util.stream.Stream;
4443

@@ -54,19 +53,24 @@ public class DowngradeSourceSetTask extends DefaultTask {
5453
private boolean copyRuntimeClasses = true;
5554

5655
@TaskAction
57-
public void run() throws IOException, URISyntaxException {
56+
public void run() throws IOException {
5857
Objects.requireNonNull(this.sourceSet, "sourceSet must be set");
5958

6059
for (File classesDir : this.sourceSet.getOutput().getClassesDirs()) {
6160
System.out.println("Downgrading source set: " + this.getProject().getProjectDir().toPath().relativize(classesDir.toPath()));
62-
6361
final Path inRoot = classesDir.toPath();
62+
63+
final Collection<String> runtimeDeps = new HashSet<>();
6464
final TransformerManager transformerManager = new TransformerManager(
6565
new PathClassProvider(inRoot, new LazyFileClassProvider(this.sourceSet.getCompileClasspath().getFiles(), new BasicClassProvider()))
6666
);
67-
transformerManager.addBytecodeTransformer(new JavaDowngraderTransformer(
68-
transformerManager, this.targetVersion, c -> Files.isRegularFile(inRoot.resolve(ClassNameUtil.toClassFilename(c)))
69-
));
67+
transformerManager.addBytecodeTransformer(
68+
JavaDowngraderTransformer.builder(transformerManager)
69+
.targetVersion(targetVersion)
70+
.classFilter(c -> Files.isRegularFile(inRoot.resolve(ClassNameUtil.toClassFilename(c))))
71+
.depCollector(runtimeDeps::add)
72+
.build()
73+
);
7074

7175
// Downgrade classes
7276
try (Stream<Path> stream = Files.walk(inRoot)) {
@@ -93,21 +97,16 @@ public void run() throws IOException, URISyntaxException {
9397

9498
// Copy runtime classes
9599
if (this.copyRuntimeClasses) {
96-
try (FileSystem runtimeRootFs = FileSystemUtil.getOrCreateFileSystem(RuntimeRoot.class.getResource("").toURI())) {
97-
final Path runtimeRoot = runtimeRootFs.getPath(Constants.JAVADOWNGRADER_RUNTIME_PACKAGE);
98-
try (Stream<Path> stream = Files.walk(runtimeRoot)) {
99-
stream.filter(Files::isRegularFile)
100-
.filter(p -> !p.getFileName().toString().equals(Constants.JAVADOWNGRADER_RUNTIME_ROOT))
101-
.forEach(path -> {
102-
final String relative = ClassNameUtil.slashName(runtimeRoot.relativize(path));
103-
final Path dest = inRoot.resolve(Constants.JAVADOWNGRADER_RUNTIME_PACKAGE + relative);
104-
try {
105-
Files.createDirectories(dest.getParent());
106-
Files.copy(path, dest);
107-
} catch (IOException e) {
108-
throw new UncheckedIOException(e);
109-
}
110-
});
100+
for (final String runtimeDep : runtimeDeps) {
101+
final String classPath = runtimeDep.concat(".class");
102+
try (InputStream is = RuntimeRoot.class.getResourceAsStream("/" + classPath)) {
103+
if (is == null) continue;
104+
final Path dest = inRoot.resolve(classPath);
105+
final Path parent = dest.getParent();
106+
if (parent != null) {
107+
Files.createDirectories(parent);
108+
}
109+
Files.copy(is, dest);
111110
}
112111
}
113112
}

0 commit comments

Comments
 (0)