Skip to content

Commit f9ef578

Browse files
author
berstanio
committed
Improve classvalidator
- Only save modified classes (cherry-picked) - Copy all dependencie jars to the validator - Do in-jar replacement Improve ResourcePackager - Fix error with "Project already evaluated" when running with gradle 7 + xcode
1 parent 032fb71 commit f9ef578

File tree

5 files changed

+25
-35
lines changed

5 files changed

+25
-35
lines changed

src/main/java/org/moe/gradle/tasks/R8.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ protected final void setupMoeTask(final @NotNull SourceSet sourceSet, final @Not
471471
});
472472
addConvention(CONVENTION_IN_JARS, () -> {
473473
final HashSet<Object> jars = new LinkedHashSet<>();
474-
jars.add(classValidateTask.getOutputJar());
474+
jars.addAll(classValidateTask.getOutputJars().getFiles());
475475
jars.add(getMoeSDK().getCoreJar());
476476
jars.add(getMoeExtension().getPlatformJar());
477477

src/main/java/org/moe/gradle/tasks/ResourcePackager.java

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.gradle.api.Project;
2020
import org.gradle.api.Rule;
2121
import org.gradle.api.file.CopySpec;
22+
import org.gradle.api.file.DuplicatesStrategy;
2223
import org.gradle.api.tasks.SourceSet;
2324
import org.gradle.api.tasks.bundling.Jar;
2425
import org.moe.gradle.MoeExtension;
@@ -92,26 +93,18 @@ private static Jar create(@NotNull MoePlugin plugin, @NotNull SourceSet sourceSe
9293
resourcePackagerTask.setGroup(MoePlugin.MOE);
9394
resourcePackagerTask.setDescription("Generates application file (sourceset: " + sourceSet.getName() + ", mode: " + mode.name + ").");
9495

95-
final ClassValidate validateTask = plugin.getTaskBy(ClassValidate.class, sourceSet, mode);
96-
resourcePackagerTask.dependsOn(validateTask);
96+
final R8 r8Task = plugin.getTaskBy(R8.class, sourceSet, mode);
97+
resourcePackagerTask.dependsOn(r8Task);
9798
// Update settings
9899
resourcePackagerTask.setDestinationDir(project.file(project.getBuildDir().toPath().resolve(out).toFile()));
99100
resourcePackagerTask.setArchiveName("application.jar");
100101

102+
resourcePackagerTask.exclude("*.dex");
101103
resourcePackagerTask.exclude("**/*.class");
102104
resourcePackagerTask.setIncludeEmptyDirs(false);
103105

104-
// When using full trim, ProGuard will copy the the resources from the common jar
105-
project.afterEvaluate(p -> {
106-
// This will fetch all jars from the classpath, therefor we need to do it after dependencie analyzation
107-
validateTask.getInputFiles().forEach(e -> {
108-
if (e.isDirectory()) {
109-
resourcePackagerTask.from(e);
110-
} else if (e.exists()){
111-
resourcePackagerTask.from(project.zipTree(e));
112-
}
113-
});
114-
});
106+
resourcePackagerTask.from(project.zipTree(r8Task.getOutJar()));
107+
resourcePackagerTask.setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE);
115108

116109
switch (ext.proguard.getLevelRaw()) {
117110
case ProGuardOptions.LEVEL_APP:
@@ -131,13 +124,6 @@ private static Jar create(@NotNull MoePlugin plugin, @NotNull SourceSet sourceSe
131124

132125
ext.packaging.getExcludes().forEach(resourcePackagerTask::exclude);
133126

134-
// Add support for copying resources from the source directory
135-
addResourceFromSources(ext, resourcePackagerTask, sourceSet);
136-
if (SourceSet.TEST_SOURCE_SET_NAME.equals(sourceSet.getName())) {
137-
SourceSet main = plugin.getJavaConvention().getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME);
138-
addResourceFromSources(ext, resourcePackagerTask, main);
139-
}
140-
141127
return resourcePackagerTask;
142128
}
143129

src/main/java/org/moe/gradle/tasks/StartupProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ protected final void setupMoeTask(@NotNull SourceSet sourceSet, final @NotNull M
164164
// Update convention mapping
165165
addConvention(CONVENTION_INPUT_FILES, () -> {
166166
final Set<File> files = new HashSet<>();
167-
files.add(classValidateTask.getOutputJar());
167+
files.addAll(classValidateTask.getOutputJars().getFiles());
168168
return files;
169169
});
170170
addConvention(CONVENTION_PREREGISTER_FILE, () -> resolvePathInBuildDir(out, "preregister.txt"));

src/main/java/org/moe/gradle/tasks/TestClassesProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ protected final void setupMoeTask(@NotNull SourceSet sourceSet, final @NotNull M
401401
}
402402

403403
// Update convention mapping
404-
addConvention(CONVENTION_INPUT_FILES, () -> Collections.singletonList(classValidateTask.getOutputJar()));
404+
addConvention(CONVENTION_INPUT_FILES, () -> classValidateTask.getOutputJars().getFiles());
405405
addConvention(CONVENTION_CLASS_LIST_FILE, () -> resolvePathInBuildDir(out, "classlist.txt"));
406406
addConvention(CONVENTION_LOG_FILE, () -> resolvePathInBuildDir(out, "TestClassesProvider.log"));
407407
}

src/main/kotlin/org/moe/gradle/tasks/ClassValidate.kt

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.moe.gradle.tasks
22

33
import org.gradle.api.GradleException
4-
import org.gradle.api.Task
54
import org.gradle.api.file.ConfigurableFileCollection
65
import org.gradle.api.file.FileCollection
76
import org.gradle.api.plugins.JavaPlugin
@@ -11,6 +10,7 @@ import org.gradle.api.tasks.Internal
1110
import org.gradle.api.tasks.Optional
1211
import org.gradle.api.tasks.OutputDirectory
1312
import org.gradle.api.tasks.SourceSet
13+
import org.gradle.api.tasks.bundling.Jar
1414
import org.gradle.api.tasks.compile.JavaCompile
1515
import org.moe.gradle.MoePlugin
1616
import org.moe.gradle.anns.IgnoreUnused
@@ -63,26 +63,29 @@ open class ClassValidate : AbstractBaseTask() {
6363
this.outputDir = outputDir
6464
}
6565

66-
val outputJar: File
66+
val outputJars: ConfigurableFileCollection
6767
@Internal
68-
get() = getOutputDir().resolve("output.jar")
68+
get() = project.files(getOutputDir().listFiles())
6969

7070
override fun run() {
7171
// Clean output dir
7272
FileUtils.deleteFileOrFolder(getOutputDir())
7373

74+
val inputFiles = getInputFiles().filter {it.isFile}.map {
75+
it.copyTo(getOutputDir().resolve(it.name))
76+
}
77+
7478
// Run class validator
7579
ClassValidator.process(
76-
inputFiles = getInputFiles().toSet(),
80+
inputFiles = inputFiles.toSet(),
7781
classpath = getClasspathFiles().toSet()
7882
// Add input to classpath
79-
+ getInputFiles().toSet(),
80-
outputDir = getOutputDir().absoluteFile.toPath(),
83+
+ inputFiles.toSet()
8184
)
8285
}
8386

8487
@get:Internal
85-
lateinit var classesTaskDep: Task
88+
lateinit var jarTaskDep: Jar
8689
private set
8790

8891
@get:Internal
@@ -114,19 +117,19 @@ open class ClassValidate : AbstractBaseTask() {
114117
description = "Validate classes (sourceset: ${sourceSet.name}, mode: ${mode.name})."
115118

116119
// Add dependencies
117-
val classesTaskName: String
118120
val compileJavaTaskName: String
119121
if (SourceSet.MAIN_SOURCE_SET_NAME == sourceSet.name) {
120-
classesTaskName = JavaPlugin.CLASSES_TASK_NAME
122+
jarTaskDep = project.tasks.getByName(JavaPlugin.JAR_TASK_NAME) as Jar
121123
compileJavaTaskName = JavaPlugin.COMPILE_JAVA_TASK_NAME
122124
} else if (SourceSet.TEST_SOURCE_SET_NAME == sourceSet.name) {
123-
classesTaskName = JavaPlugin.TEST_CLASSES_TASK_NAME
125+
val testJarTask = project.tasks.register("testJar", Jar::class.java)
126+
testJarTask.configure { it.from(sourceSet.output) }
127+
jarTaskDep = testJarTask.get();
124128
compileJavaTaskName = JavaPlugin.COMPILE_TEST_JAVA_TASK_NAME
125129
} else {
126130
throw GradleException("Unsupported SourceSet ${sourceSet.name}")
127131
}
128-
classesTaskDep = project.tasks.getByName(classesTaskName)
129-
dependsOn(classesTaskDep)
132+
dependsOn(jarTaskDep)
130133

131134
javaCompileTaskDep = moePlugin.getTaskByName(compileJavaTaskName)
132135
// TODO: allow higher than 1.8
@@ -140,6 +143,7 @@ open class ClassValidate : AbstractBaseTask() {
140143
// Update convention mapping
141144
addConvention(CONVENTION_INPUT_FILES) {
142145
sourceSet.runtimeClasspath.files.toMutableSet().also { jars ->
146+
jars.add(jarTaskDep.archiveFile.get().asFile)
143147
jars.remove(moeSDK.coreJar)
144148
jars.remove(moeExtension.platformJar)
145149
jars.remove(moeSDK.java8SupportJar)

0 commit comments

Comments
 (0)