Populate D8 build metadata
Change-Id: I8012f376569894436498ddb817b7ba1508392d3e
diff --git a/src/main/java/com/android/tools/r8/metadata/BuildMetadataFactory.java b/src/main/java/com/android/tools/r8/metadata/BuildMetadataFactory.java
index 7ebfa5a..c8ae112 100644
--- a/src/main/java/com/android/tools/r8/metadata/BuildMetadataFactory.java
+++ b/src/main/java/com/android/tools/r8/metadata/BuildMetadataFactory.java
@@ -13,9 +13,11 @@
public class BuildMetadataFactory {
- @SuppressWarnings("UnusedParameter")
public static D8BuildMetadata create(AppView<AppInfo> appView) {
- return D8BuildMetadataImpl.builder().setVersion(Version.LABEL).build();
+ return D8BuildMetadataImpl.builder()
+ .setOptions(new D8OptionsImpl(appView.options()))
+ .setVersion(Version.LABEL)
+ .build();
}
public static R8BuildMetadata create(
diff --git a/src/main/java/com/android/tools/r8/metadata/D8ApiModelingOptions.java b/src/main/java/com/android/tools/r8/metadata/D8ApiModelingOptions.java
new file mode 100644
index 0000000..4531502
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8ApiModelingOptions.java
@@ -0,0 +1,9 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
+@KeepForApi
+public interface D8ApiModelingOptions {}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8ApiModelingOptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/D8ApiModelingOptionsImpl.java
new file mode 100644
index 0000000..58f9f56
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8ApiModelingOptionsImpl.java
@@ -0,0 +1,30 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.AnnotationPattern;
+import com.android.tools.r8.keepanno.annotations.FieldAccessFlags;
+import com.android.tools.r8.keepanno.annotations.KeepConstraint;
+import com.android.tools.r8.keepanno.annotations.KeepItemKind;
+import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
+import com.google.gson.annotations.SerializedName;
+
+@UsedByReflection(
+ description = "Keep and preserve @SerializedName for correct (de)serialization",
+ constraints = {KeepConstraint.LOOKUP},
+ constrainAnnotations = @AnnotationPattern(constant = SerializedName.class),
+ kind = KeepItemKind.CLASS_AND_FIELDS,
+ fieldAccess = {FieldAccessFlags.PRIVATE},
+ fieldAnnotatedByClassConstant = SerializedName.class)
+public class D8ApiModelingOptionsImpl implements D8ApiModelingOptions {
+
+ private D8ApiModelingOptionsImpl() {}
+
+ public static D8ApiModelingOptionsImpl create(InternalOptions options) {
+ return options.apiModelingOptions().enableLibraryApiModeling
+ ? new D8ApiModelingOptionsImpl()
+ : null;
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8BuildMetadata.java b/src/main/java/com/android/tools/r8/metadata/D8BuildMetadata.java
index 652d320..eed136e 100644
--- a/src/main/java/com/android/tools/r8/metadata/D8BuildMetadata.java
+++ b/src/main/java/com/android/tools/r8/metadata/D8BuildMetadata.java
@@ -5,6 +5,7 @@
import com.android.tools.r8.keepanno.annotations.KeepForApi;
import com.google.gson.GsonBuilder;
+import com.google.gson.JsonDeserializer;
@KeepForApi
public interface D8BuildMetadata {
@@ -12,10 +13,21 @@
static D8BuildMetadata fromJson(String json) {
return new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
+ .registerTypeAdapter(D8Options.class, deserializeTo(D8OptionsImpl.class))
+ .registerTypeAdapter(
+ D8ApiModelingOptions.class, deserializeTo(D8ApiModelingOptionsImpl.class))
+ .registerTypeAdapter(
+ D8LibraryDesugaringOptions.class, deserializeTo(D8LibraryDesugaringOptionsImpl.class))
.create()
.fromJson(json, D8BuildMetadataImpl.class);
}
+ private static <T> JsonDeserializer<T> deserializeTo(Class<T> implClass) {
+ return (element, type, context) -> context.deserialize(element, implClass);
+ }
+
+ D8Options getOptions();
+
String getVersion();
String toJson();
diff --git a/src/main/java/com/android/tools/r8/metadata/D8BuildMetadataImpl.java b/src/main/java/com/android/tools/r8/metadata/D8BuildMetadataImpl.java
index 7e4239e..532027e 100644
--- a/src/main/java/com/android/tools/r8/metadata/D8BuildMetadataImpl.java
+++ b/src/main/java/com/android/tools/r8/metadata/D8BuildMetadataImpl.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.keepanno.annotations.KeepConstraint;
import com.android.tools.r8.keepanno.annotations.KeepItemKind;
import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.metadata.R8BuildMetadataImpl.Builder;
import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
@@ -22,10 +23,15 @@
public class D8BuildMetadataImpl implements D8BuildMetadata {
@Expose
+ @SerializedName("options")
+ private final D8Options options;
+
+ @Expose
@SerializedName("version")
private final String version;
- public D8BuildMetadataImpl(String version) {
+ public D8BuildMetadataImpl(D8Options options, String version) {
+ this.options = options;
this.version = version;
}
@@ -34,6 +40,11 @@
}
@Override
+ public D8Options getOptions() {
+ return options;
+ }
+
+ @Override
public String getVersion() {
return version;
}
@@ -45,15 +56,21 @@
public static class Builder {
+ private D8Options options;
private String version;
+ public Builder setOptions(D8Options options) {
+ this.options = options;
+ return this;
+ }
+
public Builder setVersion(String version) {
this.version = version;
return this;
}
public D8BuildMetadataImpl build() {
- return new D8BuildMetadataImpl(version);
+ return new D8BuildMetadataImpl(options, version);
}
}
}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8LibraryDesugaringOptions.java b/src/main/java/com/android/tools/r8/metadata/D8LibraryDesugaringOptions.java
new file mode 100644
index 0000000..893be57
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8LibraryDesugaringOptions.java
@@ -0,0 +1,9 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
+@KeepForApi
+public interface D8LibraryDesugaringOptions extends D8R8LibraryDesugaringOptions {}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8LibraryDesugaringOptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/D8LibraryDesugaringOptionsImpl.java
new file mode 100644
index 0000000..1d87662
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8LibraryDesugaringOptionsImpl.java
@@ -0,0 +1,33 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.AnnotationPattern;
+import com.android.tools.r8.keepanno.annotations.FieldAccessFlags;
+import com.android.tools.r8.keepanno.annotations.KeepConstraint;
+import com.android.tools.r8.keepanno.annotations.KeepItemKind;
+import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
+import com.google.gson.annotations.SerializedName;
+
+@UsedByReflection(
+ description = "Keep and preserve @SerializedName for correct (de)serialization",
+ constraints = {KeepConstraint.LOOKUP},
+ constrainAnnotations = @AnnotationPattern(constant = SerializedName.class),
+ kind = KeepItemKind.CLASS_AND_FIELDS,
+ fieldAccess = {FieldAccessFlags.PRIVATE},
+ fieldAnnotatedByClassConstant = SerializedName.class)
+public class D8LibraryDesugaringOptionsImpl extends D8R8LibraryDesugaringOptionsImpl
+ implements D8LibraryDesugaringOptions {
+
+ private D8LibraryDesugaringOptionsImpl(InternalOptions options) {
+ super(options);
+ }
+
+ public static D8LibraryDesugaringOptionsImpl create(InternalOptions options) {
+ return !options.machineDesugaredLibrarySpecification.isEmpty()
+ ? new D8LibraryDesugaringOptionsImpl(options)
+ : null;
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8Options.java b/src/main/java/com/android/tools/r8/metadata/D8Options.java
new file mode 100644
index 0000000..c7bd25c
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8Options.java
@@ -0,0 +1,9 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
+@KeepForApi
+public interface D8Options extends D8R8Options<D8ApiModelingOptions, D8LibraryDesugaringOptions> {}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8OptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/D8OptionsImpl.java
new file mode 100644
index 0000000..021b9ba
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8OptionsImpl.java
@@ -0,0 +1,30 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.AnnotationPattern;
+import com.android.tools.r8.keepanno.annotations.FieldAccessFlags;
+import com.android.tools.r8.keepanno.annotations.KeepConstraint;
+import com.android.tools.r8.keepanno.annotations.KeepItemKind;
+import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
+import com.google.gson.annotations.SerializedName;
+
+@UsedByReflection(
+ description = "Keep and preserve @SerializedName for correct (de)serialization",
+ constraints = {KeepConstraint.LOOKUP},
+ constrainAnnotations = @AnnotationPattern(constant = SerializedName.class),
+ kind = KeepItemKind.CLASS_AND_FIELDS,
+ fieldAccess = {FieldAccessFlags.PRIVATE},
+ fieldAnnotatedByClassConstant = SerializedName.class)
+public class D8OptionsImpl extends D8R8OptionsImpl<D8ApiModelingOptions, D8LibraryDesugaringOptions>
+ implements D8Options {
+
+ public D8OptionsImpl(InternalOptions options) {
+ super(
+ D8ApiModelingOptionsImpl.create(options),
+ D8LibraryDesugaringOptionsImpl.create(options),
+ options);
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8R8LibraryDesugaringOptions.java b/src/main/java/com/android/tools/r8/metadata/D8R8LibraryDesugaringOptions.java
new file mode 100644
index 0000000..9679857
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8R8LibraryDesugaringOptions.java
@@ -0,0 +1,9 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+public interface D8R8LibraryDesugaringOptions {
+
+ String getIdentifier();
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8R8LibraryDesugaringOptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/D8R8LibraryDesugaringOptionsImpl.java
new file mode 100644
index 0000000..92cd481
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8R8LibraryDesugaringOptionsImpl.java
@@ -0,0 +1,36 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.AnnotationPattern;
+import com.android.tools.r8.keepanno.annotations.FieldAccessFlags;
+import com.android.tools.r8.keepanno.annotations.KeepConstraint;
+import com.android.tools.r8.keepanno.annotations.KeepItemKind;
+import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+
+@UsedByReflection(
+ description = "Keep and preserve @SerializedName for correct (de)serialization",
+ constraints = {KeepConstraint.LOOKUP},
+ constrainAnnotations = @AnnotationPattern(constant = SerializedName.class),
+ kind = KeepItemKind.CLASS_AND_FIELDS,
+ fieldAccess = {FieldAccessFlags.PRIVATE},
+ fieldAnnotatedByClassConstant = SerializedName.class)
+abstract class D8R8LibraryDesugaringOptionsImpl implements D8R8LibraryDesugaringOptions {
+
+ @Expose
+ @SerializedName("identifier")
+ private final String identifier;
+
+ public D8R8LibraryDesugaringOptionsImpl(InternalOptions options) {
+ this.identifier = options.machineDesugaredLibrarySpecification.getIdentifier();
+ }
+
+ @Override
+ public String getIdentifier() {
+ return identifier;
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8R8Options.java b/src/main/java/com/android/tools/r8/metadata/D8R8Options.java
new file mode 100644
index 0000000..07b4844
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8R8Options.java
@@ -0,0 +1,22 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+public interface D8R8Options<
+ ApiModelingOptions, LibraryDesugaringOptions extends D8R8LibraryDesugaringOptions> {
+
+ /**
+ * @return null if API modeling is disabled.
+ */
+ ApiModelingOptions getApiModelingOptions();
+
+ /**
+ * @return null if library desugaring is disabled.
+ */
+ LibraryDesugaringOptions getLibraryDesugaringOptions();
+
+ int getMinApiLevel();
+
+ boolean isDebugModeEnabled();
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/D8R8OptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/D8R8OptionsImpl.java
new file mode 100644
index 0000000..0e4801a
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/metadata/D8R8OptionsImpl.java
@@ -0,0 +1,71 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.metadata;
+
+import com.android.tools.r8.keepanno.annotations.AnnotationPattern;
+import com.android.tools.r8.keepanno.annotations.FieldAccessFlags;
+import com.android.tools.r8.keepanno.annotations.KeepConstraint;
+import com.android.tools.r8.keepanno.annotations.KeepItemKind;
+import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+
+@UsedByReflection(
+ description = "Keep and preserve @SerializedName for correct (de)serialization",
+ constraints = {KeepConstraint.LOOKUP},
+ constrainAnnotations = @AnnotationPattern(constant = SerializedName.class),
+ kind = KeepItemKind.CLASS_AND_FIELDS,
+ fieldAccess = {FieldAccessFlags.PRIVATE},
+ fieldAnnotatedByClassConstant = SerializedName.class)
+abstract class D8R8OptionsImpl<
+ ApiModelingOptions, LibraryDesugaringOptions extends D8R8LibraryDesugaringOptions>
+ implements D8R8Options<ApiModelingOptions, LibraryDesugaringOptions> {
+
+ @Expose
+ @SerializedName("apiModelingOptions")
+ private final ApiModelingOptions apiModelingOptions;
+
+ @Expose
+ @SerializedName("libraryDesugaringOptions")
+ private final LibraryDesugaringOptions libraryDesugaringOptions;
+
+ @Expose
+ @SerializedName("minApiLevel")
+ private final int minApiLevel;
+
+ @Expose
+ @SerializedName("isDebugModeEnabled")
+ private final boolean isDebugModeEnabled;
+
+ public D8R8OptionsImpl(
+ ApiModelingOptions apiModelingOptions,
+ LibraryDesugaringOptions libraryDesugaringOptions,
+ InternalOptions options) {
+ this.apiModelingOptions = apiModelingOptions;
+ this.libraryDesugaringOptions = libraryDesugaringOptions;
+ this.minApiLevel = options.getMinApiLevel().getLevel();
+ this.isDebugModeEnabled = options.debug;
+ }
+
+ @Override
+ public ApiModelingOptions getApiModelingOptions() {
+ return apiModelingOptions;
+ }
+
+ @Override
+ public LibraryDesugaringOptions getLibraryDesugaringOptions() {
+ return libraryDesugaringOptions;
+ }
+
+ @Override
+ public int getMinApiLevel() {
+ return minApiLevel;
+ }
+
+ @Override
+ public boolean isDebugModeEnabled() {
+ return isDebugModeEnabled;
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/R8ApiModelingOptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/R8ApiModelingOptionsImpl.java
index c9d3e06..33be1b4 100644
--- a/src/main/java/com/android/tools/r8/metadata/R8ApiModelingOptionsImpl.java
+++ b/src/main/java/com/android/tools/r8/metadata/R8ApiModelingOptionsImpl.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.keepanno.annotations.KeepConstraint;
import com.android.tools.r8.keepanno.annotations.KeepItemKind;
import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
import com.google.gson.annotations.SerializedName;
@UsedByReflection(
@@ -17,4 +18,13 @@
kind = KeepItemKind.CLASS_AND_FIELDS,
fieldAccess = {FieldAccessFlags.PRIVATE},
fieldAnnotatedByClassConstant = SerializedName.class)
-public class R8ApiModelingOptionsImpl implements R8ApiModelingOptions {}
+public class R8ApiModelingOptionsImpl implements R8ApiModelingOptions {
+
+ private R8ApiModelingOptionsImpl() {}
+
+ public static R8ApiModelingOptionsImpl create(InternalOptions options) {
+ return options.apiModelingOptions().enableLibraryApiModeling
+ ? new R8ApiModelingOptionsImpl()
+ : null;
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptions.java b/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptions.java
index 9a80853..5549ac8 100644
--- a/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptions.java
+++ b/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptions.java
@@ -6,4 +6,4 @@
import com.android.tools.r8.keepanno.annotations.KeepForApi;
@KeepForApi
-public interface R8LibraryDesugaringOptions {}
+public interface R8LibraryDesugaringOptions extends D8R8LibraryDesugaringOptions {}
diff --git a/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptionsImpl.java
index e65fcb0..c88249e 100644
--- a/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptionsImpl.java
+++ b/src/main/java/com/android/tools/r8/metadata/R8LibraryDesugaringOptionsImpl.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.keepanno.annotations.KeepConstraint;
import com.android.tools.r8.keepanno.annotations.KeepItemKind;
import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.utils.InternalOptions;
import com.google.gson.annotations.SerializedName;
@UsedByReflection(
@@ -17,4 +18,16 @@
kind = KeepItemKind.CLASS_AND_FIELDS,
fieldAccess = {FieldAccessFlags.PRIVATE},
fieldAnnotatedByClassConstant = SerializedName.class)
-public class R8LibraryDesugaringOptionsImpl implements R8LibraryDesugaringOptions {}
+public class R8LibraryDesugaringOptionsImpl extends D8R8LibraryDesugaringOptionsImpl
+ implements R8LibraryDesugaringOptions {
+
+ private R8LibraryDesugaringOptionsImpl(InternalOptions options) {
+ super(options);
+ }
+
+ public static R8LibraryDesugaringOptionsImpl create(InternalOptions options) {
+ return !options.machineDesugaredLibrarySpecification.isEmpty()
+ ? new R8LibraryDesugaringOptionsImpl(options)
+ : null;
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/metadata/R8OptionsImpl.java b/src/main/java/com/android/tools/r8/metadata/R8OptionsImpl.java
index f5bf5bd..756f637 100644
--- a/src/main/java/com/android/tools/r8/metadata/R8OptionsImpl.java
+++ b/src/main/java/com/android/tools/r8/metadata/R8OptionsImpl.java
@@ -19,33 +19,18 @@
kind = KeepItemKind.CLASS_AND_FIELDS,
fieldAccess = {FieldAccessFlags.PRIVATE},
fieldAnnotatedByClassConstant = SerializedName.class)
-public class R8OptionsImpl implements R8Options {
-
- @Expose
- @SerializedName("apiModelingOptions")
- private final R8ApiModelingOptions apiModelingOptions;
+public class R8OptionsImpl extends D8R8OptionsImpl<R8ApiModelingOptions, R8LibraryDesugaringOptions>
+ implements R8Options {
@Expose
@SerializedName("keepAttributesOptions")
private final R8KeepAttributesOptions keepAttributesOptions;
@Expose
- @SerializedName("libraryDesugaringOptions")
- private final R8LibraryDesugaringOptions libraryDesugaringOptions;
-
- @Expose
- @SerializedName("minApiLevel")
- private final int minApiLevel;
-
- @Expose
@SerializedName("isAccessModificationEnabled")
private final boolean isAccessModificationEnabled;
@Expose
- @SerializedName("isDebugModeEnabled")
- private final boolean isDebugModeEnabled;
-
- @Expose
@SerializedName("isProGuardCompatibilityModeEnabled")
private final boolean isProGuardCompatibilityModeEnabled;
@@ -62,22 +47,16 @@
private final boolean isShrinkingEnabled;
public R8OptionsImpl(InternalOptions options) {
- this.apiModelingOptions =
- options.apiModelingOptions().enableLibraryApiModeling
- ? new R8ApiModelingOptionsImpl()
- : null;
+ super(
+ R8ApiModelingOptionsImpl.create(options),
+ R8LibraryDesugaringOptionsImpl.create(options),
+ options);
this.keepAttributesOptions =
options.hasProguardConfiguration()
? new R8KeepAttributesOptionsImpl(
options.getProguardConfiguration().getKeepAttributes())
: null;
- this.libraryDesugaringOptions =
- !options.machineDesugaredLibrarySpecification.isEmpty()
- ? new R8LibraryDesugaringOptionsImpl()
- : null;
- this.minApiLevel = options.getMinApiLevel().getLevel();
this.isAccessModificationEnabled = options.isAccessModificationEnabled();
- this.isDebugModeEnabled = options.debug;
this.isProGuardCompatibilityModeEnabled = options.forceProguardCompatibility;
this.isObfuscationEnabled = options.isMinifying();
this.isOptimizationsEnabled = options.isOptimizing();
@@ -85,36 +64,16 @@
}
@Override
- public R8ApiModelingOptions getApiModelingOptions() {
- return apiModelingOptions;
- }
-
- @Override
public R8KeepAttributesOptions getKeepAttributesOptions() {
return keepAttributesOptions;
}
@Override
- public R8LibraryDesugaringOptions getLibraryDesugaringOptions() {
- return libraryDesugaringOptions;
- }
-
- @Override
- public int getMinApiLevel() {
- return minApiLevel;
- }
-
- @Override
public boolean isAccessModificationEnabled() {
return isAccessModificationEnabled;
}
@Override
- public boolean isDebugModeEnabled() {
- return isDebugModeEnabled;
- }
-
- @Override
public boolean isProGuardCompatibilityModeEnabled() {
return isProGuardCompatibilityModeEnabled;
}