Model System for not having static initializer side effect
Bug: 207736382
Change-Id: I8392370e765928aca42418448469a387c7009dc3
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 d72df8c..4879d46 100644
--- a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
+++ b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
@@ -883,6 +883,7 @@
boxedShortType,
boxedVoidType,
enumType,
+ javaLangSystemType,
npeType,
objectType,
stringBufferType,
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
index 50b5572..8c843eb 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
@@ -9,7 +9,6 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.KotlinTestParameters;
import com.android.tools.r8.R8TestBuilder;
@@ -81,8 +80,6 @@
KotlinTestParameters kotlinParameters,
boolean allowAccessModification) {
super(parameters, kotlinParameters, allowAccessModification);
- // TODO(b/207736382): Figure out why we cannot inline/merge.
- assumeTrue(kotlinParameters.getCompiler().isNot(KOTLINC_1_6_0));
}
@Test
@@ -374,22 +371,30 @@
}
ClassSubject classSubject = checkClassIsKept(inspector, testedClass.getClassName());
+
+ // For kotlin 1.6 we completely remove the field and accessors. We are unable to
+ // remove the entire class because we are not reprocessing TestMain.main.
String propertyName = "property";
+ if (kotlinParameters.isNewerThanOrEqualTo(KOTLINC_1_6_0)) {
+ checkFieldIsAbsent(classSubject, JAVA_LANG_STRING, propertyName);
+ return;
+ }
+
FieldSubject fieldSubject =
checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
assertFalse(fieldSubject.getField().accessFlags.isStatic());
+ assertTrue(fieldSubject.getField().accessFlags.isPrivate());
AccessorKind accessorKind =
- kotlinc.getCompilerVersion() == KOTLINC_1_5_0
+ kotlinc.getCompilerVersion().isGreaterThanOrEqualTo(KOTLINC_1_5_0)
? AccessorKind.FROM_INNER
: AccessorKind.FROM_LAMBDA;
MemberNaming.MethodSignature getterAccessor =
testedClass.getGetterAccessorForProperty(propertyName, accessorKind);
MemberNaming.MethodSignature setterAccessor =
testedClass.getSetterAccessorForProperty(propertyName, accessorKind);
- assertTrue(fieldSubject.getField().accessFlags.isPrivate());
- checkMethodIsKept(classSubject, getterAccessor);
- checkMethodIsKept(classSubject, setterAccessor);
+ checkMethodIsKept(classSubject, getterAccessor);
+ checkMethodIsKept(classSubject, setterAccessor);
});
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
index 66da10d..5a60483 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.kotlin;
-import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_6_0;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.KotlinTestParameters;
import com.android.tools.r8.TestParameters;
@@ -109,8 +107,6 @@
KotlinTestParameters kotlinParameters,
boolean allowAccessModification) {
super(parameters, kotlinParameters, allowAccessModification);
- // TODO(b/207736382): Figure out why we cannot inline/merge.
- assumeTrue(kotlinParameters.getCompiler().isNot(KOTLINC_1_6_0));
}
@Test