Fix NPE in synthetic finalization when no new lens is generated
Change-Id: I92ca0ca24326ccf92ad759b55b7f78e5d0a0fc8b
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 46bb432..79097e5 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
@@ -257,9 +257,15 @@
SyntheticFinalizationGraphLens syntheticFinalizationGraphLens = lensBuilder.build(appView);
- ImmutableSet.Builder<DexType> finalInputSyntheticsBuilder = ImmutableSet.builder();
- committed.forEachSyntheticInput(
- type -> finalInputSyntheticsBuilder.add(syntheticFinalizationGraphLens.lookupType(type)));
+ ImmutableSet<DexType> finalInputSynthetics =
+ syntheticFinalizationGraphLens != null
+ ? SetUtils.newImmutableSet(
+ builder ->
+ committed.forEachSyntheticInput(
+ syntheticInputType ->
+ builder.accept(
+ syntheticFinalizationGraphLens.lookupType(syntheticInputType))))
+ : committed.syntheticInputs;
// TODO(b/181858113): Remove once deprecated main-dex-list is removed.
MainDexInfo.Builder mainDexInfoBuilder = appView.appInfo().getMainDexInfo().builderFromCopy();
@@ -270,10 +276,7 @@
SyntheticItems.INVALID_ID_AFTER_SYNTHETIC_FINALIZATION,
application,
new CommittedSyntheticsCollection(
- committed.getLegacyTypes(),
- finalMethods,
- finalClasses,
- finalInputSyntheticsBuilder.build()),
+ committed.getLegacyTypes(), finalMethods, finalClasses, finalInputSynthetics),
ImmutableList.of()),
syntheticFinalizationGraphLens,
PrunedItems.builder().setPrunedApp(application).addRemovedClasses(prunedSynthetics).build(),
diff --git a/src/main/java/com/android/tools/r8/utils/SetUtils.java b/src/main/java/com/android/tools/r8/utils/SetUtils.java
index a278196..98ea2c4 100644
--- a/src/main/java/com/android/tools/r8/utils/SetUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/SetUtils.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.utils;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import java.util.Collections;
import java.util.IdentityHashMap;
@@ -55,6 +56,12 @@
return result;
}
+ public static <T> ImmutableSet<T> newImmutableSet(ForEachable<T> forEachable) {
+ ImmutableSet.Builder<T> builder = ImmutableSet.builder();
+ forEachable.forEach(builder::add);
+ return builder.build();
+ }
+
public static <T, S> Set<T> mapIdentityHashSet(Set<S> set, Function<S, T> fn) {
Set<T> out = newIdentityHashSet(set.size());
for (S element : set) {