Exempt android.arch.* from core package checks, as those packages, like android.support.*, can (only) appear in APKs and are therefore desugared. PiperOrigin-RevId: 242179442
diff --git a/src/test/java/com/google/devtools/build/android/desugar/CorePackageRenamerTest.java b/src/test/java/com/google/devtools/build/android/desugar/CorePackageRenamerTest.java index fc40459..b7a2a7b 100644 --- a/src/test/java/com/google/devtools/build/android/desugar/CorePackageRenamerTest.java +++ b/src/test/java/com/google/devtools/build/android/desugar/CorePackageRenamerTest.java
@@ -14,6 +14,7 @@ package com.google.devtools.build.android.desugar; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertThrows; import com.google.common.collect.ImmutableList; import com.google.devtools.build.android.desugar.io.CoreLibraryRewriter; @@ -65,6 +66,44 @@ assertThat(out.mv.desc).isEqualTo("Lj$/time/Instant;"); } + @Test + public void testCorePackageCheck() throws Exception { + MockClassVisitor out = new MockClassVisitor(); + CorePackageRenamer renamer = + new CorePackageRenamer( + out, + new CoreLibrarySupport( + new CoreLibraryRewriter(""), + null, + ImmutableList.of("java/time/"), + ImmutableList.of(), + ImmutableList.of(), + ImmutableList.of())); + MethodVisitor mv = renamer.visitMethod(0, "test", "()V", null, null); + + mv.visitMethodInsn( + Opcodes.INVOKESTATIC, "android/support/Instant", "now", "()Ljava/time/Instant;", false); + assertThat(out.mv.owner).isEqualTo("android/support/Instant"); + assertThat(out.mv.desc).isEqualTo("()Lj$/time/Instant;"); + + mv.visitMethodInsn( + Opcodes.INVOKESTATIC, "android/arch/Instant", "now", "()Ljava/time/Instant;", false); + assertThat(out.mv.owner).isEqualTo("android/arch/Instant"); + assertThat(out.mv.desc).isEqualTo("()Lj$/time/Instant;"); + + assertThrows( + IllegalStateException.class, + () -> { + mv.visitMethodInsn( + Opcodes.INVOKESTATIC, "android/time/Instant", "now", "()Ljava/time/Instant;", false); + }); + assertThrows( + IllegalStateException.class, + () -> { + mv.visitFieldInsn(Opcodes.GETFIELD, "android/time/Instant", "now", "Ljava/time/Instant;"); + }); + } + private static class MockClassVisitor extends ClassVisitor { final MockMethodVisitor mv = new MockMethodVisitor();
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/CorePackageRenamer.java b/src/tools/android/java/com/google/devtools/build/android/desugar/CorePackageRenamer.java index ebe64dd..7119e2c 100644 --- a/src/tools/android/java/com/google/devtools/build/android/desugar/CorePackageRenamer.java +++ b/src/tools/android/java/com/google/devtools/build/android/desugar/CorePackageRenamer.java
@@ -58,10 +58,17 @@ remapper.didSomething = false; super.visitMethodInsn(opcode, owner, name, descriptor, isInterface); // TODO(b/79121791): Make this more precise: look for all unsupported core library members - checkState(!remapper.didSomething - || !owner.startsWith("android/") || owner.startsWith("android/support/"), + checkState( + !remapper.didSomething + || !owner.startsWith("android/") + || owner.startsWith("android/arch/") + || owner.startsWith("android/support/"), "%s calls %s.%s%s which is not supported with core library desugaring. Please file " - + "a feature request to support this method", internalName, owner, name, descriptor); + + "a feature request to support this method", + internalName, + owner, + name, + descriptor); } @Override @@ -70,10 +77,17 @@ remapper.didSomething = false; super.visitFieldInsn(opcode, owner, name, descriptor); // TODO(b/79121791): Make this more precise: look for all unsupported core library members - checkState(!remapper.didSomething - || !owner.startsWith("android/") || owner.startsWith("android/support/"), + checkState( + !remapper.didSomething + || !owner.startsWith("android/") + || owner.startsWith("android/arch/") + || owner.startsWith("android/support/"), "%s accesses %s.%s: %s which is not supported with core library desugaring. Please file " - + "a feature request to support this field", internalName, owner, name, descriptor); + + "a feature request to support this field", + internalName, + owner, + name, + descriptor); } }