Clean-up change to repackaging for package private

Change-Id: Ie19dd120c44f1c4dbd50dcaeb63fdc139ae33a72
diff --git a/src/main/java/com/android/tools/r8/graph/DexDefinition.java b/src/main/java/com/android/tools/r8/graph/DexDefinition.java
index 33e0f72..c3e6998 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDefinition.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDefinition.java
@@ -105,7 +105,15 @@
 
   public abstract boolean isStaticMember();
 
-  public boolean isNotProgramDefinition() {
-    return isDexClass() ? !isProgramClass() : !asDexEncodedMember().isProgramClass();
+  public boolean isNotProgramDefinition(AppView<?> appView) {
+    if (isDexClass()) {
+      return asDexClass().isNotProgramClass();
+    }
+    DexClass clazz = appView.definitionFor(asDexEncodedMember().getHolderType());
+    return clazz == null || clazz.isNotProgramClass();
+  }
+
+  public DexType getContextType() {
+    return isDexClass() ? asDexClass().type : asDexEncodedMember().getHolderType();
   }
 }
diff --git a/src/main/java/com/android/tools/r8/repackaging/RepackagingConstraintGraph.java b/src/main/java/com/android/tools/r8/repackaging/RepackagingConstraintGraph.java
index 49107ea..bcbba53 100644
--- a/src/main/java/com/android/tools/r8/repackaging/RepackagingConstraintGraph.java
+++ b/src/main/java/com/android/tools/r8/repackaging/RepackagingConstraintGraph.java
@@ -42,13 +42,13 @@
   private final ProgramPackage pkg;
   private final Map<DexDefinition, Node> nodes = new IdentityHashMap<>();
   private final Set<Node> pinnedNodes = Sets.newIdentityHashSet();
-  public final Node LIBRARY_BOUNDARY_NODE;
+  private final Node libraryBoundaryNode;
 
   public RepackagingConstraintGraph(AppView<AppInfoWithLiveness> appView, ProgramPackage pkg) {
     this.appView = appView;
     this.pkg = pkg;
-    LIBRARY_BOUNDARY_NODE = createNode(appView.definitionFor(appView.dexItemFactory().objectType));
-    pinnedNodes.add(LIBRARY_BOUNDARY_NODE);
+    libraryBoundaryNode = createNode(appView.definitionFor(appView.dexItemFactory().objectType));
+    pinnedNodes.add(libraryBoundaryNode);
   }
 
   /** Returns true if all classes in the package can be repackaged. */
@@ -79,11 +79,14 @@
   }
 
   Node getNode(DexDefinition definition) {
-    Node node = nodes.get(definition);
-    if (node == null && definition.isNotProgramDefinition()) {
-      return LIBRARY_BOUNDARY_NODE;
+    if (definition.isNotProgramDefinition(appView)) {
+      String packageDescriptor = definition.getContextType().getPackageDescriptor();
+      if (packageDescriptor.equals(pkg.getPackageDescriptor())) {
+        return libraryBoundaryNode;
+      }
+      return null;
     }
-    return node;
+    return nodes.get(definition);
   }
 
   public void populateConstraints(ExecutorService executorService) throws ExecutionException {
diff --git a/src/main/java/com/android/tools/r8/repackaging/RepackagingUseRegistry.java b/src/main/java/com/android/tools/r8/repackaging/RepackagingUseRegistry.java
index f8006a5..91484f7 100644
--- a/src/main/java/com/android/tools/r8/repackaging/RepackagingUseRegistry.java
+++ b/src/main/java/com/android/tools/r8/repackaging/RepackagingUseRegistry.java
@@ -10,7 +10,7 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.ClassAccessFlags;
 import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.graph.DexEncodedMember;
+import com.android.tools.r8.graph.DexClassAndMember;
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexProgramClass;
@@ -48,10 +48,6 @@
     this.node = constraintGraph.getNode(context.getDefinition());
   }
 
-  private Predicate<DexClass> isSamePackagePredicate(DexClass one) {
-    return other -> one.type.getPackageDescriptor().equals(other.type.getPackageDescriptor());
-  }
-
   private boolean isOnlyAccessibleFromSamePackage(DexClass referencedClass) {
     ClassAccessFlags accessFlags = referencedClass.getAccessFlags();
     if (accessFlags.isPackagePrivate()) {
@@ -64,8 +60,8 @@
     return false;
   }
 
-  private boolean isOnlyAccessibleFromSamePackage(DexEncodedMember<?, ?> member) {
-    AccessFlags<?> accessFlags = member.asDexEncodedMember().getAccessFlags();
+  private boolean isOnlyAccessibleFromSamePackage(DexClassAndMember<?, ?> member) {
+    AccessFlags<?> accessFlags = member.getAccessFlags();
     if (accessFlags.isPackagePrivate()) {
       return true;
     }
@@ -103,11 +99,11 @@
     registerClassTypeAccess(successfulResolutionResult.getInitialResolutionHolder());
 
     // Similarly, check access to the resolved member.
-    DexEncodedMember<?, ?> resolvedMember = successfulResolutionResult.getResolvedMember();
-    if (resolvedMember != null) {
+    DexClassAndMember<?, ?> resolutionPair = successfulResolutionResult.getResolutionPair();
+    if (resolutionPair != null) {
       RepackagingConstraintGraph.Node resolvedMemberNode =
-          constraintGraph.getNode(resolvedMember.asDexEncodedMember());
-      if (resolvedMemberNode != null && isOnlyAccessibleFromSamePackage(resolvedMember)) {
+          constraintGraph.getNode(resolutionPair.getDefinition());
+      if (resolvedMemberNode != null && isOnlyAccessibleFromSamePackage(resolutionPair)) {
         node.addNeighbor(resolvedMemberNode);
       }
     }
@@ -233,10 +229,7 @@
     // For references in inner class attributes we add an edge from the context to the referenced
     // class even if the referenced class would be accessible from another package, to make sure
     // that we don't split such classes into different packages.
-    Predicate<DexClass> samePackagePredicate = isSamePackagePredicate(outer);
     innerClassAttribute.forEachType(
-        type ->
-            registerTypeAccess(
-                type, clazz -> registerClassTypeAccess(clazz, samePackagePredicate)));
+        type -> registerTypeAccess(type, clazz -> registerClassTypeAccess(clazz, alwaysTrue())));
   }
 }