Do not inspect cf code before parsing in ProtoEnqueuerExtension
Bug: b/402328454
Change-Id: I98d827929788a988249ed5eab3b1a81f487a83ae
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
index f796499..db04931 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
@@ -16,13 +16,12 @@
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.FieldResolutionResult;
-import com.android.tools.r8.graph.ProgramDefinition;
import com.android.tools.r8.graph.ProgramField;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.graph.analysis.EnqueuerAnalysisCollection;
import com.android.tools.r8.graph.analysis.FixpointEnqueuerAnalysis;
import com.android.tools.r8.graph.analysis.NewlyLiveClassEnqueuerAnalysis;
-import com.android.tools.r8.graph.analysis.NewlyLiveMethodEnqueuerAnalysis;
+import com.android.tools.r8.graph.analysis.NewlyLiveCodeEnqueuerAnalysis;
import com.android.tools.r8.ir.analysis.proto.GeneratedMessageLiteShrinker;
import com.android.tools.r8.ir.analysis.proto.ProtoEnqueuerUseRegistry;
import com.android.tools.r8.ir.analysis.proto.ProtoReferences;
@@ -40,6 +39,7 @@
import com.android.tools.r8.ir.code.Value;
import com.android.tools.r8.ir.conversion.MethodConversionOptions;
import com.android.tools.r8.ir.optimize.info.FieldOptimizationInfo;
+import com.android.tools.r8.shaking.DefaultEnqueuerUseRegistry;
import com.android.tools.r8.shaking.Enqueuer;
import com.android.tools.r8.shaking.EnqueuerWorklist;
import com.android.tools.r8.shaking.InstantiationReason;
@@ -69,11 +69,12 @@
// keep fields that could reach extensions to be conservative.
public class ProtoEnqueuerExtension
implements NewlyLiveClassEnqueuerAnalysis,
- NewlyLiveMethodEnqueuerAnalysis,
+ NewlyLiveCodeEnqueuerAnalysis,
FixpointEnqueuerAnalysis {
private final AppView<? extends AppInfoWithClassHierarchy> appView;
private final RawMessageInfoDecoder decoder;
+ private final Enqueuer enqueuer;
private final ProtoFieldTypeFactory factory;
private final ProtoReferences references;
@@ -101,22 +102,25 @@
// Mapping from extension container types to the extensions for that type.
private final Map<DexType, Set<DexType>> extensionGraph = new IdentityHashMap<>();
- public ProtoEnqueuerExtension(AppView<? extends AppInfoWithClassHierarchy> appView) {
+ public ProtoEnqueuerExtension(
+ AppView<? extends AppInfoWithClassHierarchy> appView, Enqueuer enqueuer) {
ProtoShrinker protoShrinker = appView.protoShrinker();
this.appView = appView;
this.decoder = protoShrinker.decoder;
+ this.enqueuer = enqueuer;
this.factory = protoShrinker.factory;
this.references = protoShrinker.references;
}
public static void register(
AppView<? extends AppInfoWithClassHierarchy> appView,
+ Enqueuer enqueuer,
EnqueuerAnalysisCollection.Builder builder) {
if (appView.options().protoShrinking().enableGeneratedMessageLiteShrinking) {
- ProtoEnqueuerExtension analysis = new ProtoEnqueuerExtension(appView);
+ ProtoEnqueuerExtension analysis = new ProtoEnqueuerExtension(appView, enqueuer);
builder
.addNewlyLiveClassAnalysis(analysis)
- .addNewlyLiveMethodAnalysis(analysis)
+ .addNewlyLiveCodeAnalysis(analysis)
.addFixpointAnalysis(analysis);
}
}
@@ -155,11 +159,8 @@
* ProtoMessageInfo} object, and create a mapping from the holder to it.
*/
@Override
- public void processNewlyLiveMethod(
- ProgramMethod method,
- ProgramDefinition context,
- Enqueuer enqueuer,
- EnqueuerWorklist worklist) {
+ public void processNewlyLiveCode(
+ ProgramMethod method, DefaultEnqueuerUseRegistry registry, EnqueuerWorklist worklist) {
if (references.isFindLiteExtensionByNumberMethod(method.getReference())) {
enqueuer.applyMinimumKeepInfoWhenLiveOrTargeted(
method, KeepMethodInfo.newEmptyJoiner().disallowParameterReordering());
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index fcb3ed2..8414307 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -551,7 +551,7 @@
IsolatedFeatureSplitsChecker.register(appView, analysesBuilder);
KotlinMetadataEnqueuerExtension.register(
appView, enqueuerDefinitionSupplier, initialPrunedTypes, analysesBuilder);
- ProtoEnqueuerExtension.register(appView, analysesBuilder);
+ ProtoEnqueuerExtension.register(appView, this, analysesBuilder);
ResourceAccessAnalysis.register(appView, this, analysesBuilder);
RuntimeTypeCheckInfo.register(runtimeTypeCheckInfoBuilder, analysesBuilder);
EnqueuerMockitoAnalysis.register(appView, this, analysesBuilder);