Forward AppView to NonIdentityGraphLens
Change-Id: I479e5040a97e091dff7711e3563319df0d124c9e
diff --git a/src/main/java/com/android/tools/r8/graph/AppView.java b/src/main/java/com/android/tools/r8/graph/AppView.java
index d93fae1..693d2ac 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.graph.analysis.InitializedClassesInInstanceMethodsAnalysis.InitializedClassesInInstanceMethods;
import com.android.tools.r8.graph.analysis.ResourceAccessAnalysis.ResourceAnalysisResult;
import com.android.tools.r8.graph.classmerging.MergedClassesCollection;
+import com.android.tools.r8.graph.lens.ClearCodeRewritingGraphLens;
import com.android.tools.r8.graph.lens.GraphLens;
import com.android.tools.r8.graph.lens.InitClassLens;
import com.android.tools.r8.graph.lens.NonIdentityGraphLens;
@@ -433,10 +434,8 @@
allCodeProcessed = true;
}
- public GraphLens clearCodeRewritings() {
- GraphLens newLens = graphLens.withCodeRewritingsApplied(dexItemFactory());
- setGraphLens(newLens);
- return newLens;
+ public void clearCodeRewritings() {
+ setGraphLens(new ClearCodeRewritingGraphLens(withClassHierarchy()));
}
public AppServices appServices() {
diff --git a/src/main/java/com/android/tools/r8/graph/lens/AppliedGraphLens.java b/src/main/java/com/android/tools/r8/graph/lens/AppliedGraphLens.java
index e6ecef1..866cc8a 100644
--- a/src/main/java/com/android/tools/r8/graph/lens/AppliedGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/lens/AppliedGraphLens.java
@@ -46,7 +46,7 @@
@SuppressWarnings("ReferenceEquality")
public AppliedGraphLens(AppView<? extends AppInfoWithClassHierarchy> appView) {
- super(appView.dexItemFactory(), GraphLens.getIdentityLens());
+ super(appView, GraphLens.getIdentityLens());
for (DexProgramClass clazz : appView.appInfo().classes()) {
// TODO(b/169395592): If merged classes were removed from the application this would not be
// necessary.
diff --git a/src/main/java/com/android/tools/r8/graph/lens/ClearCodeRewritingGraphLens.java b/src/main/java/com/android/tools/r8/graph/lens/ClearCodeRewritingGraphLens.java
index 0b5348c..f53708a 100644
--- a/src/main/java/com/android/tools/r8/graph/lens/ClearCodeRewritingGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/lens/ClearCodeRewritingGraphLens.java
@@ -5,8 +5,9 @@
package com.android.tools.r8.graph.lens;
import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
+import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexField;
-import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.proto.RewrittenPrototypeDescription;
import com.android.tools.r8.ir.code.InvokeType;
@@ -15,8 +16,8 @@
// relies on the previous lens for names (getRenamed/Original methods).
public class ClearCodeRewritingGraphLens extends DefaultNonIdentityGraphLens {
- public ClearCodeRewritingGraphLens(DexItemFactory dexItemFactory, GraphLens previousLens) {
- super(dexItemFactory, previousLens);
+ public ClearCodeRewritingGraphLens(AppView<? extends AppInfoWithClassHierarchy> appView) {
+ super(appView);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/lens/DefaultNonIdentityGraphLens.java b/src/main/java/com/android/tools/r8/graph/lens/DefaultNonIdentityGraphLens.java
index ffab2e0..df70495 100644
--- a/src/main/java/com/android/tools/r8/graph/lens/DefaultNonIdentityGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/lens/DefaultNonIdentityGraphLens.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexField;
-import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.proto.RewrittenPrototypeDescription;
@@ -14,11 +13,11 @@
public class DefaultNonIdentityGraphLens extends NonIdentityGraphLens {
public DefaultNonIdentityGraphLens(AppView<?> appView) {
- this(appView.dexItemFactory(), appView.graphLens());
+ this(appView, appView.graphLens());
}
- public DefaultNonIdentityGraphLens(DexItemFactory dexItemFactory, GraphLens previousLens) {
- super(dexItemFactory, previousLens);
+ public DefaultNonIdentityGraphLens(AppView<?> appView, GraphLens previousLens) {
+ super(appView, previousLens);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/lens/GraphLens.java b/src/main/java/com/android/tools/r8/graph/lens/GraphLens.java
index 7dfa9ec..a7ef09b 100644
--- a/src/main/java/com/android/tools/r8/graph/lens/GraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/lens/GraphLens.java
@@ -13,7 +13,6 @@
import com.android.tools.r8.graph.DexEncodedField;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexField;
-import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexMember;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexProgramClass;
@@ -465,13 +464,6 @@
return false;
}
- public GraphLens withCodeRewritingsApplied(DexItemFactory dexItemFactory) {
- if (hasCodeRewritings()) {
- return new ClearCodeRewritingGraphLens(dexItemFactory, this);
- }
- return this;
- }
-
@SuppressWarnings("ReferenceEquality")
public boolean assertFieldsNotModified(Iterable<DexEncodedField> fields) {
for (DexEncodedField field : fields) {
diff --git a/src/main/java/com/android/tools/r8/graph/lens/NonIdentityGraphLens.java b/src/main/java/com/android/tools/r8/graph/lens/NonIdentityGraphLens.java
index 33f5aeb..07fac2c 100644
--- a/src/main/java/com/android/tools/r8/graph/lens/NonIdentityGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/lens/NonIdentityGraphLens.java
@@ -17,17 +17,19 @@
public abstract class NonIdentityGraphLens extends GraphLens {
+ protected final AppView<?> appView;
private final DexItemFactory dexItemFactory;
private GraphLens previousLens;
private final Map<DexType, DexType> arrayTypeCache = new ConcurrentHashMap<>();
public NonIdentityGraphLens(AppView<?> appView) {
- this(appView.dexItemFactory(), appView.graphLens());
+ this(appView, appView.graphLens());
}
- public NonIdentityGraphLens(DexItemFactory dexItemFactory, GraphLens previousLens) {
- this.dexItemFactory = dexItemFactory;
+ public NonIdentityGraphLens(AppView<?> appView, GraphLens previousLens) {
+ this.appView = appView;
+ this.dexItemFactory = appView.dexItemFactory();
this.previousLens = previousLens;
}
diff --git a/src/main/java/com/android/tools/r8/optimize/FieldRebindingIdentityLens.java b/src/main/java/com/android/tools/r8/optimize/FieldRebindingIdentityLens.java
index 2e641f6..4b71a32 100644
--- a/src/main/java/com/android/tools/r8/optimize/FieldRebindingIdentityLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/FieldRebindingIdentityLens.java
@@ -4,8 +4,9 @@
package com.android.tools.r8.optimize;
+import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
+import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexField;
-import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.lens.DefaultNonIdentityGraphLens;
import com.android.tools.r8.graph.lens.FieldLookupResult;
import com.android.tools.r8.graph.lens.GraphLens;
@@ -24,9 +25,9 @@
private FieldRebindingIdentityLens(
Map<DexField, DexField> nonReboundFieldReferenceToDefinitionMap,
- DexItemFactory dexItemFactory,
+ AppView<? extends AppInfoWithClassHierarchy> appView,
GraphLens previousLens) {
- super(dexItemFactory, previousLens);
+ super(appView, previousLens);
this.nonReboundFieldReferenceToDefinitionMap = nonReboundFieldReferenceToDefinitionMap;
}
@@ -65,12 +66,12 @@
nonReboundFieldReferenceToDefinitionMap.put(nonReboundFieldReference, reboundFieldReference);
}
- FieldRebindingIdentityLens build(DexItemFactory dexItemFactory) {
+ FieldRebindingIdentityLens build(AppView<? extends AppInfoWithClassHierarchy> appView) {
// This intentionally does not return null when the map is empty. In this case there are no
// non-rebound field references, but the member rebinding lens is still needed to populate the
// rebound reference during field lookup.
return new FieldRebindingIdentityLens(
- nonReboundFieldReferenceToDefinitionMap, dexItemFactory, GraphLens.getIdentityLens());
+ nonReboundFieldReferenceToDefinitionMap, appView, GraphLens.getIdentityLens());
}
}
}
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java
index 616ac22..60d5c62 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java
@@ -33,9 +33,9 @@
private MemberRebindingIdentityLens(
Map<DexField, DexField> nonReboundFieldReferenceToDefinitionMap,
Map<DexMethod, DexMethod> nonReboundMethodReferenceToDefinitionMap,
- DexItemFactory dexItemFactory,
+ AppView<? extends AppInfoWithClassHierarchy> appView,
GraphLens previousLens) {
- super(dexItemFactory, previousLens);
+ super(appView, previousLens);
this.nonReboundFieldReferenceToDefinitionMap = nonReboundFieldReferenceToDefinitionMap;
this.nonReboundMethodReferenceToDefinitionMap = nonReboundMethodReferenceToDefinitionMap;
}
@@ -202,7 +202,7 @@
return new MemberRebindingIdentityLens(
nonReboundFieldReferenceToDefinitionMap,
nonReboundMethodReferenceToDefinitionMap,
- appView.dexItemFactory(),
+ appView,
previousLens);
}
}
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
index 283581a..6b2903e 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
@@ -25,7 +25,6 @@
public class MemberRebindingLens extends DefaultNonIdentityGraphLens {
- private final AppView<AppInfoWithLiveness> appView;
private final Map<InvokeType, Map<DexMethod, DexMethod>> methodMaps;
private final Map<DexField, DexField> nonReboundFieldReferenceToDefinitionMap;
@@ -33,8 +32,7 @@
AppView<AppInfoWithLiveness> appView,
Map<InvokeType, Map<DexMethod, DexMethod>> methodMaps,
Map<DexField, DexField> nonReboundFieldReferenceToDefinitionMap) {
- super(appView.dexItemFactory(), appView.graphLens());
- this.appView = appView;
+ super(appView);
this.methodMaps = methodMaps;
this.nonReboundFieldReferenceToDefinitionMap = nonReboundFieldReferenceToDefinitionMap;
}
@@ -111,7 +109,7 @@
builder.recordDefinitionForNonReboundFieldReference(
rewrittenNonReboundFieldReference, rewrittenReboundFieldReference);
});
- return builder.build(dexItemFactory);
+ return builder.build(appView);
}
public static class Builder {
diff --git a/src/main/java/com/android/tools/r8/optimize/PublicizerLens.java b/src/main/java/com/android/tools/r8/optimize/PublicizerLens.java
deleted file mode 100644
index 969887e..0000000
--- a/src/main/java/com/android/tools/r8/optimize/PublicizerLens.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// 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.optimize;
-
-import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.graph.lens.FieldLookupResult;
-import com.android.tools.r8.graph.lens.GraphLens;
-import com.android.tools.r8.graph.lens.MethodLookupResult;
-import com.android.tools.r8.graph.lens.NestedGraphLens;
-import com.android.tools.r8.ir.code.InvokeType;
-import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import com.google.common.collect.Sets;
-import java.util.Set;
-
-final class PublicizerLens extends NestedGraphLens {
-
- private final AppView<?> appView;
- private final Set<DexMethod> publicizedMethods;
-
- private PublicizerLens(AppView<?> appView, Set<DexMethod> publicizedMethods) {
- super(appView, EMPTY_FIELD_MAP, EMPTY_METHOD_MAP, EMPTY_TYPE_MAP);
- this.appView = appView;
- this.publicizedMethods = publicizedMethods;
- }
-
- @Override
- protected boolean isLegitimateToHaveEmptyMappings() {
- // This lens does not map any DexItem's at all.
- // It will just tweak invoke type for publicized methods from invoke-direct to invoke-virtual.
- return true;
- }
-
- @Override
- public boolean isPublicizerLens() {
- return true;
- }
-
- @Override
- protected FieldLookupResult internalDescribeLookupField(FieldLookupResult previous) {
- return previous;
- }
-
- @Override
- public MethodLookupResult internalDescribeLookupMethod(
- MethodLookupResult previous, DexMethod context, GraphLens codeLens) {
- if (previous.getType() == InvokeType.DIRECT
- && publicizedMethods.contains(previous.getReference())) {
- assert publicizedMethodIsPresentOnHolder(previous.getReference(), context);
- return MethodLookupResult.builder(this)
- .setReference(previous.getReference())
- .setPrototypeChanges(previous.getPrototypeChanges())
- .setType(InvokeType.VIRTUAL)
- .build();
- }
- return previous;
- }
-
- private boolean publicizedMethodIsPresentOnHolder(DexMethod method, DexMethod context) {
- MethodLookupResult lookup =
- appView.graphLens().lookupMethod(method, context, InvokeType.VIRTUAL);
- DexMethod signatureInCurrentWorld = lookup.getReference();
- DexClass clazz = appView.definitionFor(signatureInCurrentWorld.holder);
- assert clazz != null;
- DexEncodedMethod actualEncodedTarget = clazz.lookupVirtualMethod(signatureInCurrentWorld);
- assert actualEncodedTarget != null;
- assert actualEncodedTarget.isPublic();
- return true;
- }
-
- static PublicizedLensBuilder createBuilder() {
- return new PublicizedLensBuilder();
- }
-
- static class PublicizedLensBuilder {
- private final Set<DexMethod> publicizedMethods = Sets.newIdentityHashSet();
-
- private PublicizedLensBuilder() {}
-
- public PublicizerLens build(AppView<AppInfoWithLiveness> appView) {
- if (publicizedMethods.isEmpty()) {
- return null;
- }
- return new PublicizerLens(appView, publicizedMethods);
- }
-
- public void add(DexMethod publicizedMethod) {
- publicizedMethods.add(publicizedMethod);
- }
- }
-}
diff --git a/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingLens.java b/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingLens.java
index 694096a..6e8a445 100644
--- a/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoistingLens.java
@@ -18,7 +18,7 @@
public BridgeHoistingLens(
AppView<?> appView,
BidirectionalManyToOneMap<DexMethod, DexMethod> bridgeToHoistedBridgeMap) {
- super(appView.dexItemFactory(), appView.graphLens());
+ super(appView);
this.bridgeToHoistedBridgeMap = bridgeToHoistedBridgeMap;
}
diff --git a/src/main/java/com/android/tools/r8/verticalclassmerging/SingleTypeMapperGraphLens.java b/src/main/java/com/android/tools/r8/verticalclassmerging/SingleTypeMapperGraphLens.java
index 7042bd5..55a1a0a 100644
--- a/src/main/java/com/android/tools/r8/verticalclassmerging/SingleTypeMapperGraphLens.java
+++ b/src/main/java/com/android/tools/r8/verticalclassmerging/SingleTypeMapperGraphLens.java
@@ -23,7 +23,6 @@
public class SingleTypeMapperGraphLens extends NonIdentityGraphLens {
- private final AppView<AppInfoWithLiveness> appView;
private final VerticalClassMergerGraphLens.Builder lensBuilder;
private final MutableBidirectionalManyToOneRepresentativeMap<DexType, DexType> mergedClasses;
@@ -36,8 +35,7 @@
MutableBidirectionalManyToOneRepresentativeMap<DexType, DexType> mergedClasses,
DexProgramClass source,
DexProgramClass target) {
- super(appView.dexItemFactory(), GraphLens.getIdentityLens());
- this.appView = appView;
+ super(appView, GraphLens.getIdentityLens());
this.lensBuilder = lensBuilder;
this.mergedClasses = mergedClasses;
this.source = source;
diff --git a/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMergerGraphLens.java b/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMergerGraphLens.java
index e3ad747..eebae8e 100644
--- a/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMergerGraphLens.java
+++ b/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMergerGraphLens.java
@@ -63,8 +63,6 @@
MethodLookupResult get(RewrittenPrototypeDescription prototypeChanges);
}
- private final AppView<?> appView;
-
private VerticallyMergedClasses mergedClasses;
private final Map<DexType, Map<DexMethod, GraphLensLookupResultProvider>>
contextualVirtualToDirectMethodMaps;
@@ -84,7 +82,6 @@
Map<DexMethod, DexMethod> originalMethodSignaturesForBridges,
Map<DexMethod, RewrittenPrototypeDescription> prototypeChanges) {
super(appView, fieldMap, methodMap, mergedClasses.getBidirectionalMap(), newMethodSignatures);
- this.appView = appView;
this.mergedClasses = mergedClasses;
this.contextualVirtualToDirectMethodMaps = contextualVirtualToDirectMethodMaps;
this.mergedMethods = mergedMethods;