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