Skip to content

Commit 128a878

Browse files
committed
Merge commit '968c32ebaf5c914d8caec25c00f597d4d6745c1b' into moe-master
# Conflicts: # src/main/resources/org/moe/gradle/moe.properties
2 parents cbe8f87 + 968c32e commit 128a878

File tree

12 files changed

+339
-103
lines changed

12 files changed

+339
-103
lines changed

src/main/java/org/moe/gradle/MoeExtension.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,9 @@ public void setProguardLevel(@NotNull String proguardLevel) {
145145
}
146146

147147
@Nullable
148+
@org.jetbrains.annotations.Nullable
148149
public File getPlatformJar() {
149150
return plugin.getSDK().getPlatformJar(platform);
150151
}
151152

152-
@Nullable
153-
public File getPlatformDex() {
154-
return plugin.getSDK().getPlatformDex(platform);
155-
}
156153
}

src/main/java/org/moe/gradle/MoePlugin.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.moe.gradle.anns.Nullable;
2929
import org.moe.gradle.remote.Server;
3030
import org.moe.gradle.tasks.AbstractBaseTask;
31+
import org.moe.gradle.tasks.Desugar;
3132
import org.moe.gradle.tasks.Dex;
3233
import org.moe.gradle.tasks.Dex2Oat;
3334
import org.moe.gradle.tasks.ClassValidate;
@@ -137,6 +138,8 @@ public void apply(Project project) {
137138
// Install rules
138139
addRule(ProGuard.class, "Creates a ProGuarded jar.",
139140
asList(SOURCE_SET, MODE), MoePlugin.this);
141+
addRule(Desugar.class, "Creates a desugared jar.",
142+
asList(SOURCE_SET, MODE), MoePlugin.this);
140143
addRule(ClassValidate.class, "Validate classes.",
141144
asList(SOURCE_SET, MODE), MoePlugin.this);
142145
addRule(Dex.class, "Creates a Dexed jar.",

src/main/java/org/moe/gradle/MoeSDK.java

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -349,17 +349,14 @@ private void validateSDK(@NotNull Path path, boolean isLocalSDK) {
349349

350350
try {
351351
validate(DIR, path, "");
352-
validate(FIL, path, "sdk/moe-core.dex");
353352
validate(FIL, path, "sdk/moe-core.jar");
354353
validate(FIL, path, "sdk/moe-core-javadoc.jar");
355354
validate(FIL, path, "sdk/moe-core-sources.jar");
356355

357-
validate(FIL, path, "sdk/moe-ios-junit.dex");
358356
validate(FIL, path, "sdk/moe-ios-junit.jar");
359357
validate(FIL, path, "sdk/moe-ios-junit-javadoc.jar");
360358
validate(FIL, path, "sdk/moe-ios-junit-sources.jar");
361359

362-
validate(FIL, path, "sdk/moe-ios-dex.jar");
363360
validate(FIL, path, "sdk/moe-ios.jar");
364361
validate(FIL, path, "sdk/moe-ios-javadoc.jar");
365362
validate(FIL, path, "sdk/moe-ios-sources.jar");
@@ -413,15 +410,12 @@ private void validate(int type, @NotNull Path path, @NotNull String sub) throws
413410
private @Nullable File MOE_SDK_CORE_JAR;
414411
private @Nullable File MOE_SDK_CORE_SOURCES_JAR;
415412
private @Nullable File MOE_SDK_CORE_JAVADOC_JAR;
416-
private @Nullable File MOE_SDK_CORE_DEX;
417413
private @Nullable File MOE_SDK_IOS_JAVADOC_JAR;
418414
private @Nullable File MOE_SDK_IOS_JUNIT_JAR;
419415
private @Nullable File MOE_SDK_IOS_JUNIT_SOURCES_JAR;
420416
private @Nullable File MOE_SDK_IOS_JUNIT_JAVADOC_JAR;
421-
private @Nullable File MOE_SDK_IOS_JUNIT_DEX;
422417
private @Nullable File MOE_SDK_IOS_JAR;
423418
private @Nullable File MOE_SDK_IOS_SOURCES_JAR;
424-
private @Nullable File MOE_SDK_IOS_DEX;
425419
private @Nullable File MOE_SDK_DEX2OAT_EXEC;
426420
private @Nullable File MOE_SDK_DX_JAR;
427421
private @Nullable File MOE_SDK_IOS_DEVICE_JAR;
@@ -440,15 +434,12 @@ private void bakeSDKPaths(@NotNull Path path) {
440434
MOE_SDK_SDK_DIR = path.resolve("sdk").toFile();
441435
MOE_SDK_TOOLS_DIR = path.resolve("tools").toFile();
442436
MOE_SDK_CORE_JAR = path.resolve("sdk/moe-core.jar").toFile();
443-
MOE_SDK_CORE_DEX = path.resolve("sdk/moe-core.dex").toFile();
444437
MOE_SDK_CORE_SOURCES_JAR = path.resolve("sdk/moe-core-sources.jar").toFile();
445438
MOE_SDK_CORE_JAVADOC_JAR = path.resolve("sdk/moe-core-javadoc.jar").toFile();
446-
MOE_SDK_IOS_DEX = path.resolve("sdk/moe-ios-dex.jar").toFile();
447439
MOE_SDK_IOS_JAR = path.resolve("sdk/moe-ios.jar").toFile();
448440
MOE_SDK_IOS_SOURCES_JAR = path.resolve("sdk/moe-ios-sources.jar").toFile();
449441
MOE_SDK_IOS_JAVADOC_JAR = path.resolve("sdk/moe-ios-javadoc.jar").toFile();
450442
MOE_SDK_IOS_JUNIT_JAR = path.resolve("sdk/moe-ios-junit.jar").toFile();
451-
MOE_SDK_IOS_JUNIT_DEX = path.resolve("sdk/moe-ios-junit.dex").toFile();
452443
MOE_SDK_IOS_JUNIT_SOURCES_JAR = path.resolve("sdk/moe-ios-junit-sources.jar").toFile();
453444
MOE_SDK_IOS_JUNIT_JAVADOC_JAR = path.resolve("sdk/moe-ios-junit-javadoc.jar").toFile();
454445
MOE_SDK_DEX2OAT_EXEC = path.resolve("tools/dex2oat").toFile();
@@ -498,11 +489,6 @@ public File getCoreSourcesJar() {
498489
return safeVariable(MOE_SDK_CORE_SOURCES_JAR, "MOE_SDK_CORE_SOURCES_JAR");
499490
}
500491

501-
@NotNull
502-
public File getCoreDex() {
503-
return safeVariable(MOE_SDK_CORE_DEX, "MOE_SDK_CORE_DEX");
504-
}
505-
506492
@NotNull
507493
@IgnoreUnused
508494
public File getiOSJavadocJar() {
@@ -532,22 +518,11 @@ public File getiOSJUnitSourcesJar() {
532518
return safeVariable(MOE_SDK_IOS_JUNIT_SOURCES_JAR, "MOE_SDK_IOS_JUNIT_SOURCES_JAR");
533519
}
534520

535-
@NotNull
536-
@IgnoreUnused
537-
public File getiOSJUnitDex() {
538-
return safeVariable(MOE_SDK_IOS_JUNIT_DEX, "MOE_SDK_IOS_JUNIT_DEX");
539-
}
540-
541521
@NotNull
542522
private File getiOSJar() {
543523
return safeVariable(MOE_SDK_IOS_JAR, "MOE_SDK_IOS_JAR");
544524
}
545525

546-
@NotNull
547-
private File getiOSDex() {
548-
return safeVariable(MOE_SDK_IOS_DEX, "MOE_SDK_IOS_DEX");
549-
}
550-
551526
@NotNull
552527
public File getDex2OatExec() {
553528
return safeVariable(MOE_SDK_DEX2OAT_EXEC, "MOE_SDK_DEX2OAT_EXEC");
@@ -619,14 +594,6 @@ public File getPlatformJar(final @NotNull MoePlatform platform) {
619594
throw new GradleException("platform jar is unsupported for " + platform.displayName);
620595
}
621596

622-
@NotNull
623-
public File getPlatformDex(final @NotNull MoePlatform platform) {
624-
if (platform == MoePlatform.IOS) {
625-
return getiOSDex();
626-
}
627-
throw new GradleException("platform dex is unsupported for " + platform.displayName);
628-
}
629-
630597
@NotNull
631598
private static <T> T safeVariable(@Nullable T variable, @NotNull String name) {
632599
return Require.nonNull(variable, "Unable to access MOE SDK variable '" + name + "'");

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ public Object doCall() {
148148

149149
@SuppressWarnings("unchecked")
150150
@NotNull
151+
@org.jetbrains.annotations.NotNull
151152
public <T> T getOrConvention(@Nullable T value, @NotNull String name) {
152153
Require.nonNull(name);
153154

@@ -165,6 +166,7 @@ public <T> T getOrConvention(@Nullable T value, @NotNull String name) {
165166

166167
@SuppressWarnings("unchecked")
167168
@Nullable
169+
@org.jetbrains.annotations.Nullable
168170
public <T> T nullableGetOrConvention(@Nullable T value, @NotNull String name) {
169171
Require.nonNull(name);
170172

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

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818

1919
import org.gradle.api.GradleException;
2020
import org.gradle.api.file.ConfigurableFileCollection;
21+
import org.gradle.api.logging.Logger;
22+
import org.gradle.api.logging.Logging;
2123
import org.gradle.api.tasks.Input;
2224
import org.gradle.api.tasks.InputFile;
2325
import org.gradle.api.tasks.InputFiles;
2426
import org.gradle.api.tasks.Internal;
25-
import org.gradle.api.tasks.OutputFile;
27+
import org.gradle.api.tasks.OutputDirectory;
2628
import org.gradle.api.tasks.SourceSet;
2729
import org.moe.gradle.MoePlugin;
2830
import org.moe.gradle.MoeSDK;
@@ -46,10 +48,12 @@
4648

4749
public class Dex extends AbstractBaseTask {
4850

51+
private static final Logger LOG = Logging.getLogger(ProGuard.class);
52+
4953
private static final String CONVENTION_DX_JAR = "dxJar";
5054
private static final String CONVENTION_INPUT_FILES = "inputFiles";
5155
private static final String CONVENTION_EXTRA_ARGS = "extraArgs";
52-
private static final String CONVENTION_DEST_JAR = "destJar";
56+
private static final String CONVENTION_DEST_DIR = "destDir";
5357

5458
@Nullable
5559
private Object dxJar;
@@ -94,36 +98,51 @@ public void setExtraArgs(@Nullable Collection<Object> extraArgs) {
9498
}
9599

96100
@Nullable
97-
private Object destJar;
101+
private Object destDir;
98102

99-
@OutputFile
103+
@OutputDirectory
100104
@NotNull
101-
public File getDestJar() {
102-
return getProject().file(getOrConvention(destJar, CONVENTION_DEST_JAR));
105+
public File getDestDir() {
106+
return getProject().file(getOrConvention(destDir, CONVENTION_DEST_DIR));
103107
}
104108

105109
@IgnoreUnused
106-
public void setDestJar(@Nullable Object destJar) {
107-
this.destJar = destJar;
110+
public void setDestDir(@Nullable Object destDir) {
111+
this.destDir = destDir;
112+
}
113+
114+
@Internal
115+
@NotNull
116+
public Set<File> getDestJars() {
117+
return getProject().fileTree(getDestDir()).filter(it->it.isFile() && it.getName().endsWith(".jar")).getFiles();
108118
}
109119

110120
@Override
111121
protected void run() {
112122
try {
113-
FileUtils.deleteFileOrFolder(getDestJar());
123+
FileUtils.deleteFileOrFolder(getDestDir());
114124
} catch (IOException e) {
115125
throw new GradleException("an IOException occurred", e);
116126
}
127+
getDestDir().mkdirs();
117128

118-
javaexec(spec -> {
119-
spec.setMain("-jar");
120-
spec.args(getDxJar().getAbsolutePath());
121-
prepareArgumentsList().forEach(spec::args);
122-
});
129+
int index = 0;
130+
for (File f : getInputFiles()) {
131+
File out = new File(getDestDir(), "classes-" + index + ".jar");
132+
LOG.info("Dxing {} to {}...", f, out);
133+
134+
javaexec(spec -> {
135+
spec.setMain("-jar");
136+
spec.args(getDxJar().getAbsolutePath());
137+
prepareArgumentsList(f, out).forEach(spec::args);
138+
});
139+
140+
index++;
141+
}
123142
}
124143

125144
@NotNull
126-
private List<String> prepareArgumentsList() {
145+
private List<String> prepareArgumentsList(File input, File output) {
127146
List<String> args = new ArrayList<>();
128147

129148
// Set mode
@@ -137,10 +156,10 @@ private List<String> prepareArgumentsList() {
137156
args.addAll(getExtraArgs().stream().map(Object::toString).collect(Collectors.toList()));
138157

139158
// Set output
140-
args.add("--output=" + getDestJar().getAbsolutePath());
159+
args.add("--output=" + output.getAbsolutePath());
141160

142-
// Set inputs
143-
getInputFiles().forEach(it -> args.add(it.getAbsolutePath()));
161+
// Set input
162+
args.add(input.getAbsolutePath());
144163
return args;
145164
}
146165

@@ -174,11 +193,15 @@ protected final void setupMoeTask(@NotNull SourceSet sourceSet, final @NotNull M
174193
addConvention(CONVENTION_INPUT_FILES, () -> {
175194
final ArrayList<Object> files = new ArrayList<>();
176195
files.add(classValidate.getClassesOutputDir());
196+
File rtOut = classValidate.getDesugarTaskDep().getRuntimeOutJar();
197+
if (rtOut.exists()) {
198+
files.add(rtOut);
199+
}
177200
return files;
178201

179202
});
180203
addConvention(CONVENTION_EXTRA_ARGS, ArrayList::new);
181-
addConvention(CONVENTION_DEST_JAR, () -> resolvePathInBuildDir(out, "classes.jar"));
204+
addConvention(CONVENTION_DEST_DIR, () -> resolvePathInBuildDir(out, "classes"));
182205
addConvention(CONVENTION_LOG_FILE, () -> resolvePathInBuildDir(out, "Dex.log"));
183206
}
184207
}

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

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,11 @@
2525
import org.gradle.api.tasks.OutputFile;
2626
import org.gradle.api.tasks.SourceSet;
2727
import org.moe.common.utils.NativeUtil;
28-
import org.moe.gradle.MoeExtension;
2928
import org.moe.gradle.MoePlugin;
3029
import org.moe.gradle.MoeSDK;
3130
import org.moe.gradle.anns.IgnoreUnused;
3231
import org.moe.gradle.anns.NotNull;
3332
import org.moe.gradle.anns.Nullable;
34-
import org.moe.gradle.options.ProGuardOptions;
3533
import org.moe.gradle.remote.Server;
3634
import org.moe.gradle.remote.file.FileList;
3735
import org.moe.gradle.utils.Arch;
@@ -328,7 +326,6 @@ protected final void setupMoeTask(@NotNull SourceSet sourceSet, @NotNull Mode mo
328326

329327
setSupportsRemoteBuild(true);
330328

331-
final MoeExtension ext = getMoeExtension();
332329
final MoeSDK sdk = getMoeSDK();
333330

334331
// Construct default output path
@@ -362,24 +359,7 @@ protected final void setupMoeTask(@NotNull SourceSet sourceSet, @NotNull Mode mo
362359
addConvention(CONVENTION_EMIT_DEBUG_INFO, () -> mode == Mode.DEBUG);
363360
addConvention(CONVENTION_INPUT_FILES, () -> {
364361
final Set<File> files = new HashSet<>();
365-
files.add(dexTask.getDestJar());
366-
367-
switch (ext.proguard.getLevelRaw()) {
368-
case ProGuardOptions.LEVEL_APP:
369-
files.add(sdk.getCoreDex());
370-
if (ext.getPlatformDex() != null) {
371-
files.add(ext.getPlatformDex());
372-
}
373-
break;
374-
case ProGuardOptions.LEVEL_PLATFORM:
375-
files.add(sdk.getCoreDex());
376-
break;
377-
case ProGuardOptions.LEVEL_ALL:
378-
break;
379-
default:
380-
throw new IllegalStateException();
381-
}
382-
362+
files.addAll(dexTask.getDestJars());
383363
return files;
384364
});
385365
addConvention(CONVENTION_COMPILER_BACKEND, () -> BACKEND_QUICK);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ private void composeConfigurationFile() {
372372
FileUtils.write(getComposedCfgFile(), conf.toString());
373373
}
374374

375-
private static void startSection(@NotNull final StringBuilder b, @NotNull final String comment) {
375+
static void startSection(@NotNull final StringBuilder b, @NotNull final String comment) {
376376
int l = comment.length();
377377
b.append("\n##");
378378
for (int i = 0; i < l; ++i)

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

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.moe.gradle.tasks;
1818

19+
import org.gradle.api.Action;
1920
import org.gradle.api.Project;
2021
import org.gradle.api.Rule;
2122
import org.gradle.api.file.CopySpec;
@@ -96,26 +97,28 @@ private static Jar create(@NotNull MoePlugin plugin, @NotNull SourceSet sourceSe
9697
final ProGuard proguardTask = plugin.getTaskBy(ProGuard.class, sourceSet, mode);
9798
resourcePackagerTask.dependsOn(proguardTask);
9899

99-
// Update settings
100-
resourcePackagerTask.setDestinationDir(project.file(project.getBuildDir().toPath().resolve(out).toFile()));
101-
resourcePackagerTask.setArchiveName("application.jar");
102-
resourcePackagerTask.from(project.zipTree(proguardTask.getOutJar()));
103-
resourcePackagerTask.exclude("**/*.class");
100+
Action<Project> configureTask = _project -> {
101+
// Update settings
102+
resourcePackagerTask.setDestinationDir(project.file(project.getBuildDir().toPath().resolve(out).toFile()));
103+
resourcePackagerTask.setArchiveName("application.jar");
104+
resourcePackagerTask.from(project.zipTree(proguardTask.getOutJar()));
105+
resourcePackagerTask.exclude("**/*.class");
104106

105-
project.afterEvaluate(_project -> {
106107
// When using full trim, ProGuard will copy the the resources from the common jar
107108
switch (ext.proguard.getLevelRaw()) {
108-
case ProGuardOptions.LEVEL_APP:
109-
resourcePackagerTask.from(_project.zipTree(sdk.getCoreJar()));
109+
case ProGuardOptions.LEVEL_APP:
110+
resourcePackagerTask.from(_project.zipTree(sdk.getCoreJar()));
111+
if (ext.getPlatformJar() != null) {
110112
resourcePackagerTask.from(_project.zipTree(ext.getPlatformJar()));
111-
break;
112-
case ProGuardOptions.LEVEL_PLATFORM:
113-
resourcePackagerTask.from(_project.zipTree(sdk.getCoreJar()));
114-
break;
115-
case ProGuardOptions.LEVEL_ALL:
116-
break;
117-
default:
118-
throw new IllegalStateException();
113+
}
114+
break;
115+
case ProGuardOptions.LEVEL_PLATFORM:
116+
resourcePackagerTask.from(_project.zipTree(sdk.getCoreJar()));
117+
break;
118+
case ProGuardOptions.LEVEL_ALL:
119+
break;
120+
default:
121+
throw new IllegalStateException();
119122
}
120123

121124
ext.packaging.getExcludes().forEach(resourcePackagerTask::exclude);
@@ -126,7 +129,14 @@ private static Jar create(@NotNull MoePlugin plugin, @NotNull SourceSet sourceSe
126129
SourceSet main = plugin.getJavaConvention().getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME);
127130
addResourceFromSources(ext, resourcePackagerTask, main);
128131
}
129-
});
132+
};
133+
134+
// Make sure the project is configured after project is evaluated
135+
if (project.getState().getExecuted()) {
136+
configureTask.execute(project);
137+
} else {
138+
project.afterEvaluate(configureTask);
139+
}
130140

131141
return resourcePackagerTask;
132142
}

0 commit comments

Comments
 (0)