Add a few accessors
Change-Id: Idde6c9910b9dac7c70c45e2d338b4e857337e070
diff --git a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
index 3f72483..b0aea08 100644
--- a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
+++ b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
@@ -777,7 +777,7 @@
new PrimitiveTypesBoxedTypeFields();
public final AtomicFieldUpdaterMethods atomicFieldUpdaterMethods =
new AtomicFieldUpdaterMethods();
- public final Kotlin kotlin;
+ private final Kotlin kotlin;
public final PolymorphicMethods polymorphicMethods = new PolymorphicMethods();
public final ProxyMethods proxyMethods = new ProxyMethods();
diff --git a/src/main/java/com/android/tools/r8/graph/analysis/ClassInitializerAssertionEnablingAnalysis.java b/src/main/java/com/android/tools/r8/graph/analysis/ClassInitializerAssertionEnablingAnalysis.java
index 31237bb..a6d88f2 100644
--- a/src/main/java/com/android/tools/r8/graph/analysis/ClassInitializerAssertionEnablingAnalysis.java
+++ b/src/main/java/com/android/tools/r8/graph/analysis/ClassInitializerAssertionEnablingAnalysis.java
@@ -76,7 +76,7 @@
}
private boolean isUsingKotlinAssertionsEnabledField(DexField field) {
- return field.isIdenticalTo(dexItemFactory.kotlin.assertions.enabledField);
+ return field.isIdenticalTo(dexItemFactory.kotlin().assertions().enabledField);
}
@Override
@@ -201,7 +201,7 @@
@SuppressWarnings("ReferenceEquality")
private boolean hasKotlincClinitAssertionCode(ProgramMethod method) {
- if (method.getHolderType() == dexItemFactory.kotlin.assertions.type) {
+ if (method.getHolderType() == dexItemFactory.kotlin().assertions().type) {
CfCode code = method.getDefinition().getCode().asCfCode();
List<CfInstruction> instructions = code.getInstructions();
for (int i = 1; i < instructions.size(); i++) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/modeling/LibraryMethodReadSetModeling.java b/src/main/java/com/android/tools/r8/ir/analysis/modeling/LibraryMethodReadSetModeling.java
index ecaa39d..eb5dfd6 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/modeling/LibraryMethodReadSetModeling.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/modeling/LibraryMethodReadSetModeling.java
@@ -32,8 +32,9 @@
// Model that checkNotNullParameter() does not read any instance fields of the app. This is
// currently needed for constructors that call checkNotNullParameter() not to be marked as
// reading any field.
- if (invokedMethod == appView.dexItemFactory().kotlin.intrinsics.checkNotNullParameter
- || invokedMethod == appView.dexItemFactory().kotlin.intrinsics.checkParameterIsNotNull) {
+ if (invokedMethod == appView.dexItemFactory().kotlin().intrinsics().checkNotNullParameter
+ || invokedMethod
+ == appView.dexItemFactory().kotlin().intrinsics().checkParameterIsNotNull) {
return EmptyFieldSet.getInstance();
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/AssertionsRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/AssertionsRewriter.java
index 87e548e..28b242c 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/AssertionsRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/AssertionsRewriter.java
@@ -135,7 +135,7 @@
.map(entry -> new ConfigurationEntryWithDexString(entry, appView.dexItemFactory()))
.collect(Collectors.toList());
kotlinTransformation =
- getTransformationForType(appView.dexItemFactory().kotlin.assertions.type);
+ getTransformationForType(appView.dexItemFactory().kotlin().assertions().type);
}
// Static method used by other analyses to see if additional analysis is required to support
@@ -439,7 +439,7 @@
if (current.isInvokeMethod()) {
InvokeMethod invoke = current.asInvokeMethod();
if (invoke.getInvokedMethod() == dexItemFactory.classMethods.desiredAssertionStatus) {
- if (method.getHolderType() == dexItemFactory.kotlin.assertions.type) {
+ if (method.getHolderType() == dexItemFactory.kotlin().assertions().type) {
rewriteKotlinAssertionEnable(code, configuration, iterator, invoke);
} else {
iterator.replaceCurrentInstruction(code.createIntConstant(0, current.getLocalInfo()));
@@ -464,7 +464,7 @@
}
}
// Rewrite kotlin._Assertions.ENABLED getter.
- if (staticGet.getField() == dexItemFactory.kotlin.assertions.enabledField) {
+ if (staticGet.getField() == dexItemFactory.kotlin().assertions().enabledField) {
// For assertion handler rewrite just leave the static get, as it will become dead code.
if (!configuration.isAssertionHandler()) {
iterator.replaceCurrentInstruction(
@@ -520,7 +520,7 @@
Instruction nextInstruction = iterator.next();
if (nextInstruction.isStaticPut()
&& nextInstruction.asStaticPut().getField().holder
- == dexItemFactory.kotlin.assertions.type
+ == dexItemFactory.kotlin().assertions().type
&& nextInstruction.asStaticPut().getField().name == dexItemFactory.enabledFieldName
&& invoke.outValue().numberOfUsers() == 1
&& invoke.outValue().numberOfPhiUsers() == 0
@@ -559,7 +559,7 @@
@SuppressWarnings("ReferenceEquality")
private boolean isUsingKotlinAssertionsEnabledField(FieldInstruction instruction) {
- return instruction.getField() == dexItemFactory.kotlin.assertions.enabledField;
+ return instruction.getField() == dexItemFactory.kotlin().assertions().enabledField;
}
private If isCheckAssertionsEnabledBlock(BasicBlock basicBlock) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java b/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
index 164a8c7..0568f12 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
@@ -691,7 +691,7 @@
AppView<?> appView, InvokeStatic invoke, Value value) {
// We need to ignore the holder, since Kotlin adds different versions of null-check machinery,
// e.g., kotlin.collections.ArraysKt___ArraysKt... or kotlin.jvm.internal.ArrayIteratorKt...
- Intrinsics intrinsics = appView.dexItemFactory().kotlin.intrinsics;
+ Intrinsics intrinsics = appView.dexItemFactory().kotlin().intrinsics();
DexMethod originalInvokedMethod =
appView.graphLens().getOriginalMethodSignature(invoke.getInvokedMethod());
boolean isCheckNotNullMethod =
@@ -709,7 +709,7 @@
AppView<?> appView, InvokeStatic invoke) {
// We need to ignore the holder, since Kotlin adds different versions of null-check machinery,
// e.g., kotlin.collections.ArraysKt___ArraysKt... or kotlin.jvm.internal.ArrayIteratorKt...
- Intrinsics intrinsics = appView.dexItemFactory().kotlin.intrinsics;
+ Intrinsics intrinsics = appView.dexItemFactory().kotlin().intrinsics();
DexMethod originalInvokedMethod =
appView.graphLens().getOriginalMethodSignature(invoke.getInvokedMethod());
return (originalInvokedMethod.match(intrinsics.throwParameterIsNullException)
diff --git a/src/main/java/com/android/tools/r8/kotlin/Kotlin.java b/src/main/java/com/android/tools/r8/kotlin/Kotlin.java
index 0d3b4d7..4ae2224 100644
--- a/src/main/java/com/android/tools/r8/kotlin/Kotlin.java
+++ b/src/main/java/com/android/tools/r8/kotlin/Kotlin.java
@@ -22,10 +22,10 @@
public final DexItemFactory factory;
- public final Functional functional;
- public final Intrinsics intrinsics;
- public final Metadata metadata;
- public final _Assertions assertions;
+ private final Functional functional;
+ private final Intrinsics intrinsics;
+ private final Metadata metadata;
+ private final _Assertions assertions;
public static final String NAME = "kotlin";
public static final String PACKAGE_PREFIX = "L" + NAME + "/";
@@ -99,10 +99,22 @@
this.assertions = new _Assertions();
}
+ public Functional functional() {
+ return functional;
+ }
+
public Intrinsics intrinsics() {
return intrinsics;
}
+ public Metadata metadata() {
+ return metadata;
+ }
+
+ public _Assertions assertions() {
+ return assertions;
+ }
+
public final class Functional {
// NOTE: Kotlin stdlib defines interface Function0 till Function22 explicitly, see:
// https://github.com/JetBrains/kotlin/blob/master/libraries/
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java
index 411c29f..8750c74 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java
@@ -88,7 +88,7 @@
new StringDiagnostic(
"Class "
+ clazz.type.toSourceString()
- + " has malformed kotlin.Metadata: "
+ + " has malformed kotlin.metadata(): "
+ e.getMessage()));
return getInvalidKotlinInfo();
} catch (Throwable e) {
@@ -101,7 +101,7 @@
new StringDiagnostic(
"Unexpected error while reading "
+ clazz.type.toSourceString()
- + "'s kotlin.Metadata: "
+ + "'s kotlin.metadata(): "
+ e.getMessage()));
return getNoKotlinInfo();
}
@@ -114,7 +114,7 @@
DexAnnotation annotation,
BiConsumer<DexEncodedMember<?, ?>, KotlinMemberLevelInfo> memberInfoConsumer)
throws KotlinMetadataException {
- Kotlin kotlin = appView.dexItemFactory().kotlin;
+ Kotlin kotlin = appView.dexItemFactory().kotlin();
KotlinClassMetadata kMetadata = toKotlinClassMetadata(kotlin, annotation.annotation);
if (kMetadata == null) {
throw new KotlinMetadataException(
@@ -126,7 +126,7 @@
public static boolean isLambda(
AppView<?> appView, DexClass clazz, Supplier<Boolean> reportUnknownMetadata) {
DexItemFactory dexItemFactory = appView.dexItemFactory();
- Kotlin kotlin = dexItemFactory.kotlin;
+ Kotlin kotlin = dexItemFactory.kotlin();
Flavour flavour = getFlavour(clazz, kotlin);
if (flavour == Flavour.Unclassified) {
return false;
@@ -158,7 +158,7 @@
new StringDiagnostic(
"Class "
+ clazz.type.toSourceString()
- + " has malformed kotlin.Metadata: "
+ + " has malformed kotlin.metadata(): "
+ exception.getMessage()));
return false;
}
@@ -186,17 +186,17 @@
Kotlin kotlin, Map<DexString, DexAnnotationElement> elementMap)
throws KotlinMetadataException {
int k = getKind(kotlin, elementMap);
- DexAnnotationElement metadataVersion = elementMap.get(kotlin.metadata.metadataVersion);
+ DexAnnotationElement metadataVersion = elementMap.get(kotlin.metadata().metadataVersion);
int[] mv = metadataVersion == null ? null : getUnboxedIntArray(metadataVersion.value, "mv");
- DexAnnotationElement data1 = elementMap.get(kotlin.metadata.data1);
+ DexAnnotationElement data1 = elementMap.get(kotlin.metadata().data1);
String[] d1 = data1 == null ? null : getUnboxedStringArray(data1.value, "d1");
- DexAnnotationElement data2 = elementMap.get(kotlin.metadata.data2);
+ DexAnnotationElement data2 = elementMap.get(kotlin.metadata().data2);
String[] d2 = data2 == null ? null : getUnboxedStringArray(data2.value, "d2");
- DexAnnotationElement extraString = elementMap.get(kotlin.metadata.extraString);
+ DexAnnotationElement extraString = elementMap.get(kotlin.metadata().extraString);
String xs = extraString == null ? null : getUnboxedString(extraString.value, "xs");
- DexAnnotationElement packageName = elementMap.get(kotlin.metadata.packageName);
+ DexAnnotationElement packageName = elementMap.get(kotlin.metadata().packageName);
String pn = packageName == null ? null : getUnboxedString(packageName.value, "pn");
- DexAnnotationElement extraInt = elementMap.get(kotlin.metadata.extraInt);
+ DexAnnotationElement extraInt = elementMap.get(kotlin.metadata().extraInt);
Integer xi = extraInt == null ? null : (Integer) extraInt.value.getBoxedValue();
try {
@@ -208,7 +208,7 @@
}
private static int getKind(Kotlin kotlin, Map<DexString, DexAnnotationElement> elementMap) {
- DexAnnotationElement kind = elementMap.get(kotlin.metadata.kind);
+ DexAnnotationElement kind = elementMap.get(kotlin.metadata().kind);
if (kind == null) {
throw new MetadataError("element 'k' is missing.");
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
index e8a830c..8c3f780 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
@@ -76,7 +76,7 @@
public KotlinMetadataRewriter(AppView<?> appView) {
this.appView = appView;
this.factory = appView.dexItemFactory();
- this.kotlin = factory.kotlin;
+ this.kotlin = factory.kotlin();
}
@SuppressWarnings("ReferenceEquality")
@@ -97,13 +97,14 @@
kotlinMetadata == null
? WriteMetadataFieldInfo.rewriteAll()
: new WriteMetadataFieldInfo(
- kotlinMetadataFieldExists(kotlinMetadata, appView, kotlin.metadata.kind),
- kotlinMetadataFieldExists(kotlinMetadata, appView, kotlin.metadata.metadataVersion),
- kotlinMetadataFieldExists(kotlinMetadata, appView, kotlin.metadata.data1),
- kotlinMetadataFieldExists(kotlinMetadata, appView, kotlin.metadata.data2),
- kotlinMetadataFieldExists(kotlinMetadata, appView, kotlin.metadata.extraString),
- kotlinMetadataFieldExists(kotlinMetadata, appView, kotlin.metadata.packageName),
- kotlinMetadataFieldExists(kotlinMetadata, appView, kotlin.metadata.extraInt));
+ kotlinMetadataFieldExists(kotlinMetadata, appView, kotlin.metadata().kind),
+ kotlinMetadataFieldExists(
+ kotlinMetadata, appView, kotlin.metadata().metadataVersion),
+ kotlinMetadataFieldExists(kotlinMetadata, appView, kotlin.metadata().data1),
+ kotlinMetadataFieldExists(kotlinMetadata, appView, kotlin.metadata().data2),
+ kotlinMetadataFieldExists(kotlinMetadata, appView, kotlin.metadata().extraString),
+ kotlinMetadataFieldExists(kotlinMetadata, appView, kotlin.metadata().packageName),
+ kotlinMetadataFieldExists(kotlinMetadata, appView, kotlin.metadata().extraInt));
ThreadUtils.processItems(
appView.appInfo().classes(),
clazz -> {
@@ -309,35 +310,36 @@
if (writeMetadataFieldInfo.writeMetadataVersion) {
elements.add(
new DexAnnotationElement(
- kotlin.metadata.metadataVersion,
+ kotlin.metadata().metadataVersion,
createIntArray(KotlinJvmMetadataVersionUtils.toIntArray(metadataVersion))));
}
if (writeMetadataFieldInfo.writeKind) {
elements.add(
- new DexAnnotationElement(kotlin.metadata.kind, DexValueInt.create(metadata.k())));
+ new DexAnnotationElement(kotlin.metadata().kind, DexValueInt.create(metadata.k())));
}
if (writeMetadataFieldInfo.writeData1) {
elements.add(
- new DexAnnotationElement(kotlin.metadata.data1, createStringArray(metadata.d1())));
+ new DexAnnotationElement(kotlin.metadata().data1, createStringArray(metadata.d1())));
}
if (writeMetadataFieldInfo.writeData2) {
elements.add(
- new DexAnnotationElement(kotlin.metadata.data2, createStringArray(metadata.d2())));
+ new DexAnnotationElement(kotlin.metadata().data2, createStringArray(metadata.d2())));
}
if (writeMetadataFieldInfo.writePackageName && packageName != null && !packageName.isEmpty()) {
elements.add(
new DexAnnotationElement(
- kotlin.metadata.packageName, new DexValueString(factory.createString(packageName))));
+ kotlin.metadata().packageName,
+ new DexValueString(factory.createString(packageName))));
}
if (writeMetadataFieldInfo.writeExtraString && !metadata.xs().isEmpty()) {
elements.add(
new DexAnnotationElement(
- kotlin.metadata.extraString,
+ kotlin.metadata().extraString,
new DexValueString(factory.createString(metadata.xs()))));
}
if (writeMetadataFieldInfo.writeExtraInt && metadata.xi() != 0) {
elements.add(
- new DexAnnotationElement(kotlin.metadata.extraInt, DexValueInt.create(metadata.xi())));
+ new DexAnnotationElement(kotlin.metadata().extraInt, DexValueInt.create(metadata.xi())));
}
DexEncodedAnnotation encodedAnnotation =
new DexEncodedAnnotation(
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
index 48e79a9..3619c05 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
@@ -108,7 +108,7 @@
public static Flavour getFlavour(DexClass clazz, Kotlin kotlin) {
// Returns KotlinStyleLambda if the given clazz has shape of a Kotlin-style lambda:
// a class that directly extends kotlin.jvm.internal.Lambda
- if (clazz.superType == kotlin.functional.lambdaType) {
+ if (clazz.superType == kotlin.functional().lambdaType) {
return Flavour.KotlinStyleLambda;
}
// Returns JavaStyleLambda if the given clazz has shape of a Java-style lambda:
diff --git a/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
index 645ec45..63dfcdb 100644
--- a/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
+++ b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
@@ -567,7 +567,7 @@
try {
metadata =
KotlinClassMetadataReader.toKotlinClassMetadata(
- codeInspector.getFactory().kotlin, annotationSubject.getAnnotation());
+ codeInspector.getFactory().kotlin(), annotationSubject.getAnnotation());
} catch (KotlinMetadataException e) {
throw new RuntimeException(e);
}
@@ -586,7 +586,7 @@
try {
metadata =
KotlinClassMetadataReader.toKotlinClassMetadata(
- codeInspector.getFactory().kotlin, annotationSubject.getAnnotation());
+ codeInspector.getFactory().kotlin(), annotationSubject.getAnnotation());
} catch (KotlinMetadataException e) {
throw new RuntimeException(e);
}
@@ -610,7 +610,7 @@
}
try {
return KotlinClassMetadataReader.toKotlinClassMetadata(
- codeInspector.getFactory().kotlin, annotationSubject.getAnnotation());
+ codeInspector.getFactory().kotlin(), annotationSubject.getAnnotation());
} catch (KotlinMetadataException e) {
throw new RuntimeException(e);
}