Merge "Reproduce b/80083341."
diff --git a/src/test/java/com/android/tools/r8/naming/b80083341/AnotherClass.java b/src/test/java/com/android/tools/r8/naming/b80083341/AnotherClass.java
new file mode 100644
index 0000000..e612fec
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/naming/b80083341/AnotherClass.java
@@ -0,0 +1,7 @@
+// Copyright (c) 2018, 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.naming.b80083341;
+
+public class AnotherClass {
+}
diff --git a/src/test/java/com/android/tools/r8/naming/b80083341/B80083341.java b/src/test/java/com/android/tools/r8/naming/b80083341/B80083341.java
new file mode 100644
index 0000000..1a1ae50
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/naming/b80083341/B80083341.java
@@ -0,0 +1,54 @@
+// Copyright (c) 2018, 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.naming.b80083341;
+
+import static com.android.tools.r8.utils.DescriptorUtils.getClassNameFromDescriptor;
+import static com.android.tools.r8.utils.DexInspectorMatchers.isPresent;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.ToolHelper.ProcessResult;
+import com.android.tools.r8.VmTestRunner;
+import com.android.tools.r8.utils.AndroidApp;
+import com.android.tools.r8.utils.DexInspector;
+import com.android.tools.r8.utils.DexInspector.ClassSubject;
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(VmTestRunner.class)
+public class B80083341 extends TestBase {
+
+ @Ignore("b/80083341")
+ @Test
+ public void test() throws Exception {
+ Class mainClass = TestMain.class;
+ List<String> config = ImmutableList.of(
+ "-printmapping",
+ "-keepattributes EnclosingMethod,InnerClasses,Signature",
+ "-repackageclasses",
+ "-keepclassmembers class " + mainClass.getCanonicalName() + " {",
+ " public void main(...);",
+ "}",
+ "-keep,allowobfuscation class " + mainClass.getCanonicalName() + " {",
+ "}"
+ );
+ AndroidApp app = readClassesAndAndriodJar(ImmutableList.of(
+ mainClass, TestClass.class, AnotherClass.class,
+ PackagePrivateClass.class, PackagePrivateClass.Itf.class, PackagePrivateClass.Impl.class
+ ));
+ AndroidApp processedApp = compileWithR8(app, String.join(System.lineSeparator(), config));
+ DexInspector inspector = new DexInspector(processedApp);
+ ClassSubject mainSubject = inspector.clazz(mainClass);
+ assertThat(mainSubject, isPresent());
+
+ ProcessResult artResult =
+ runOnArtRaw(processedApp, getClassNameFromDescriptor(mainSubject.getFinalDescriptor()));
+ assertEquals(0, artResult.exitCode);
+ assertEquals(-1, artResult.stderr.indexOf("IllegalAccessError"));
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/naming/b80083341/PackagePrivateClass.java b/src/test/java/com/android/tools/r8/naming/b80083341/PackagePrivateClass.java
new file mode 100644
index 0000000..62a4181
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/naming/b80083341/PackagePrivateClass.java
@@ -0,0 +1,27 @@
+// Copyright (c) 2018, 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.naming.b80083341;
+
+final class PackagePrivateClass {
+ private static final boolean flag = false;
+
+ private PackagePrivateClass() {}
+
+ interface Itf<T> {
+ boolean foo();
+ }
+
+ static class Impl<T> implements Itf<T> {
+ private final Object[] objs;
+
+ Impl(int size) {
+ objs = new Object[size];
+ }
+
+ @Override
+ public boolean foo() {
+ return flag;
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/naming/b80083341/TestClass.java b/src/test/java/com/android/tools/r8/naming/b80083341/TestClass.java
new file mode 100644
index 0000000..a5dc174
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/naming/b80083341/TestClass.java
@@ -0,0 +1,8 @@
+// Copyright (c) 2018, 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.naming.b80083341;
+
+public class TestClass {
+ PackagePrivateClass.Impl<AnotherClass> anotherClasses = new PackagePrivateClass.Impl<>(8);
+}
diff --git a/src/test/java/com/android/tools/r8/naming/b80083341/TestMain.java b/src/test/java/com/android/tools/r8/naming/b80083341/TestMain.java
new file mode 100644
index 0000000..6be514c
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/naming/b80083341/TestMain.java
@@ -0,0 +1,10 @@
+// Copyright (c) 2018, 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.naming.b80083341;
+
+public class TestMain {
+ public static void main(String[] args) {
+ new TestClass().anotherClasses.foo();
+ }
+}