Explicitly consider globals when computing external type and prefix.

Change-Id: I489b14e49ecf0f0bef840d4c308e5ffc1c2e4a61
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
index 07f65be..ef3cdbd 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
@@ -315,7 +315,7 @@
     // Check that the prefix of each synthetic is never itself synthetic.
     committed.forEachNonLegacyItem(
         item -> {
-          if (item.getKind().allowSyntheticContext()) {
+          if (item.getKind().isGlobal()) {
             return;
           }
           String prefix =
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticMarker.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticMarker.java
index c21954b..ceb9a37 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticMarker.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticMarker.java
@@ -147,6 +147,9 @@
 
   private static DexType getSyntheticContextType(
       DexType type, SyntheticKind kind, DexItemFactory factory) {
+    if (kind.isGlobal()) {
+      return type;
+    }
     String prefix = SyntheticNaming.getPrefixForExternalSyntheticType(kind, type);
     return factory.createType(DescriptorUtils.getDescriptorFromClassBinaryName(prefix));
   }
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticNaming.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticNaming.java
index e95c6a1..37e327f 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticNaming.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticNaming.java
@@ -122,15 +122,15 @@
     }
 
     SyntheticKind forFixedClass(String descriptor) {
-      return register(new SyntheticFixedClassKind(getNextId(), descriptor, false, false));
+      return register(new SyntheticFixedClassKind(getNextId(), descriptor, false));
     }
 
     SyntheticKind forGlobalClass() {
-      return register(new SyntheticFixedClassKind(getNextId(), "", true, true));
+      return register(new SyntheticFixedClassKind(getNextId(), "", true));
     }
 
     SyntheticKind forGlobalClasspathClass() {
-      return register(new SyntheticFixedClassKind(getNextId(), "", false, false));
+      return register(new SyntheticFixedClassKind(getNextId(), "", false));
     }
 
     List<SyntheticKind> getAllKinds() {
@@ -192,7 +192,6 @@
 
     public abstract boolean isMayOverridesNonProgramType();
 
-    public abstract boolean allowSyntheticContext();
   }
 
   private static class SyntheticMethodKind extends SyntheticKind {
@@ -227,10 +226,6 @@
       return false;
     }
 
-    @Override
-    public boolean allowSyntheticContext() {
-      return false;
-    }
   }
 
   private static class SyntheticClassKind extends SyntheticKind {
@@ -268,24 +263,14 @@
       return false;
     }
 
-    @Override
-    public boolean allowSyntheticContext() {
-      return false;
-    }
   }
 
   private static class SyntheticFixedClassKind extends SyntheticClassKind {
     private final boolean mayOverridesNonProgramType;
-    private final boolean allowSyntheticContext;
 
-    private SyntheticFixedClassKind(
-        int id,
-        String descriptor,
-        boolean mayOverridesNonProgramType,
-        boolean allowSyntheticContext) {
+    private SyntheticFixedClassKind(int id, String descriptor, boolean mayOverridesNonProgramType) {
       super(id, descriptor, false);
       this.mayOverridesNonProgramType = mayOverridesNonProgramType;
-      this.allowSyntheticContext = allowSyntheticContext;
     }
 
     @Override
@@ -308,10 +293,6 @@
       return mayOverridesNonProgramType;
     }
 
-    @Override
-    public boolean allowSyntheticContext() {
-      return allowSyntheticContext;
-    }
   }
 
   private static final String SYNTHETIC_CLASS_SEPARATOR = "$$";
@@ -333,6 +314,9 @@
 
   static String getPrefixForExternalSyntheticType(SyntheticKind kind, DexType type) {
     String binaryName = type.toBinaryName();
+    if (kind.isGlobal()) {
+      return binaryName;
+    }
     int index =
         binaryName.lastIndexOf(
             kind.isFixedSuffixSynthetic() ? kind.descriptor : SYNTHETIC_CLASS_SEPARATOR);