Remove NonNullParameterHintCollector.
We've no longer used non-null parameter hints from metadata since:
https://r8-review.googlesource.com/c/r8/+/32444
That is, we already examine code and compute non-null-param-or-throw
(as well as non-null-param-on-normal-exit).
Bug: 138975804, 121377154
Change-Id: Ia22f41de74b789d54df265cad71ab95541c22acf
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 87c976d..be491f4 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -76,7 +76,6 @@
import com.android.tools.r8.ir.optimize.string.StringOptimizer;
import com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator;
import com.android.tools.r8.ir.regalloc.RegisterAllocator;
-import com.android.tools.r8.kotlin.KotlinInfo;
import com.android.tools.r8.logging.Log;
import com.android.tools.r8.naming.IdentifierNameStringMarker;
import com.android.tools.r8.origin.Origin;
@@ -1359,30 +1358,6 @@
}
}
if (paramsCheckedForNull.length() > 0) {
- // Check if collected information conforms to non-null parameter hints in Kotlin metadata.
- // These hints are on the original holder. To find the original holder, we first find the
- // original method signature (this could have changed as a result of, for example, class
- // merging). Then, we find the type that now corresponds to the the original holder.
- DexMethod originalSignature = appView.graphLense().getOriginalMethodSignature(method.method);
- DexClass originalHolder =
- appView.definitionFor(appView.graphLense().lookupType(originalSignature.holder));
- if (originalHolder.hasKotlinInfo()) {
- KotlinInfo kotlinInfo = originalHolder.getKotlinInfo();
- if (kotlinInfo.hasNonNullParameterHints()) {
- BitSet hintFromMetadata =
- kotlinInfo.lookupNonNullParameterHint(
- originalSignature.name.toString(), originalSignature.proto.toDescriptorString());
- if (hintFromMetadata != null && hintFromMetadata.length() > 0) {
- if (!paramsCheckedForNull.equals(hintFromMetadata) && Log.ENABLED) {
- Log.debug(getClass(), "Mismatching non-null param hints for %s: %s v.s. %s\n%s",
- paramsCheckedForNull.toString(),
- hintFromMetadata.toString(),
- method.toSourceString(),
- logCode(options, method));
- }
- }
- }
- }
feedback.setNonNullParamOrThrow(method, paramsCheckedForNull);
}
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
index 4f79660..e25e05d 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
@@ -4,8 +4,6 @@
package com.android.tools.r8.kotlin;
-import static kotlinx.metadata.Flag.Property.IS_VAR;
-
import com.android.tools.r8.graph.DexClass;
import kotlinx.metadata.KmClassVisitor;
import kotlinx.metadata.KmConstructorVisitor;
@@ -29,26 +27,24 @@
@Override
void processMetadata(KotlinClassMetadata.Class metadata) {
// To avoid lazy parsing/verifying metadata.
+ // TODO(jsjeon): once migration is complete, use #toKmClass and store a mutable model.
metadata.accept(new ClassVisitorForNonNullParameterHints());
}
- private class ClassVisitorForNonNullParameterHints extends KmClassVisitor {
+ private static class ClassVisitorForNonNullParameterHints extends KmClassVisitor {
@Override
public KmFunctionVisitor visitFunction(int functionFlags, String functionName) {
- return new NonNullParameterHintCollector.FunctionVisitor(nonNullparamHints);
+ return null;
}
@Override
public KmConstructorVisitor visitConstructor(int ctorFlags) {
- return new NonNullParameterHintCollector.ConstructorVisitor(nonNullparamHints, clazz);
+ return null;
}
@Override
public KmPropertyVisitor visitProperty(
int propertyFlags, String name, int getterFlags, int setterFlags) {
- if (IS_VAR.invoke(propertyFlags)) {
- return new NonNullParameterHintCollector.PropertyVisitor(nonNullparamHints);
- }
return null;
}
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
index 225e63a..633788f 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
@@ -4,8 +4,6 @@
package com.android.tools.r8.kotlin;
-import static kotlinx.metadata.Flag.Property.IS_VAR;
-
import kotlinx.metadata.KmFunctionVisitor;
import kotlinx.metadata.KmPackageVisitor;
import kotlinx.metadata.KmPropertyVisitor;
@@ -27,21 +25,19 @@
@Override
void processMetadata(KotlinClassMetadata.MultiFileClassPart metadata) {
// To avoid lazy parsing/verifying metadata.
+ // TODO(jsjeon): once migration is complete, use #toKmPackage and store a mutable model.
metadata.accept(new PackageVisitorForNonNullParameterHints());
}
- private class PackageVisitorForNonNullParameterHints extends KmPackageVisitor {
+ private static class PackageVisitorForNonNullParameterHints extends KmPackageVisitor {
@Override
public KmFunctionVisitor visitFunction(int functionFlags, String functionName) {
- return new NonNullParameterHintCollector.FunctionVisitor(nonNullparamHints);
+ return null;
}
@Override
public KmPropertyVisitor visitProperty(
int propertyFlags, String name, int getterFlags, int setterFlags) {
- if (IS_VAR.invoke(propertyFlags)) {
- return new NonNullParameterHintCollector.PropertyVisitor(nonNullparamHints);
- }
return null;
}
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java b/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
index 2f9477e..2b4c326 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
@@ -4,8 +4,6 @@
package com.android.tools.r8.kotlin;
-import static kotlinx.metadata.Flag.Property.IS_VAR;
-
import kotlinx.metadata.KmFunctionVisitor;
import kotlinx.metadata.KmPackageVisitor;
import kotlinx.metadata.KmPropertyVisitor;
@@ -27,21 +25,19 @@
@Override
void processMetadata(KotlinClassMetadata.FileFacade metadata) {
// To avoid lazy parsing/verifying metadata.
+ // TODO(jsjeon): once migration is complete, use #toKmPackage and store a mutable model.
metadata.accept(new PackageVisitorForNonNullParameterHints());
}
- private class PackageVisitorForNonNullParameterHints extends KmPackageVisitor {
+ private static class PackageVisitorForNonNullParameterHints extends KmPackageVisitor {
@Override
public KmFunctionVisitor visitFunction(int functionFlags, String functionName) {
- return new NonNullParameterHintCollector.FunctionVisitor(nonNullparamHints);
+ return null;
}
@Override
public KmPropertyVisitor visitProperty(
int propertyFlags, String name, int getterFlags, int setterFlags) {
- if (IS_VAR.invoke(propertyFlags)) {
- return new NonNullParameterHintCollector.PropertyVisitor(nonNullparamHints);
- }
return null;
}
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
index ef90173..9d7be0e 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
@@ -5,18 +5,12 @@
package com.android.tools.r8.kotlin;
import com.android.tools.r8.graph.DexClass;
-import com.google.common.collect.HashBasedTable;
-import java.util.BitSet;
import kotlinx.metadata.jvm.KotlinClassMetadata;
// Provides access to kotlin information.
public abstract class KotlinInfo<MetadataKind extends KotlinClassMetadata> {
MetadataKind metadata;
DexClass clazz;
- final HashBasedTable<String, String, BitSet> nonNullparamHints = HashBasedTable.create();
-
- KotlinInfo() {
- }
KotlinInfo(MetadataKind metadata) {
this(metadata, null);
@@ -76,12 +70,4 @@
public KotlinClassFacade asClassFacade() {
return null;
}
-
- public boolean hasNonNullParameterHints() {
- return !nonNullparamHints.isEmpty();
- }
-
- public BitSet lookupNonNullParameterHint(String name, String descriptor) {
- return nonNullparamHints.get(name, descriptor);
- }
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
index fc11f8c..12823c5 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
@@ -41,14 +41,15 @@
void processMetadata(KotlinClassMetadata.SyntheticClass metadata) {
if (metadata.isLambda()) {
// To avoid lazy parsing/verifying metadata.
+ // TODO(jsjeon): once migration is complete, use #toKmLambda and store a mutable model.
metadata.accept(new LambdaVisitorForNonNullParameterHints());
}
}
- private class LambdaVisitorForNonNullParameterHints extends KmLambdaVisitor {
+ private static class LambdaVisitorForNonNullParameterHints extends KmLambdaVisitor {
@Override
public KmFunctionVisitor visitFunction(int functionFlags, String functionName) {
- return new NonNullParameterHintCollector.FunctionVisitor(nonNullparamHints);
+ return null;
}
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/NonNullParameterHintCollector.java b/src/main/java/com/android/tools/r8/kotlin/NonNullParameterHintCollector.java
deleted file mode 100644
index 0fee156..0000000
--- a/src/main/java/com/android/tools/r8/kotlin/NonNullParameterHintCollector.java
+++ /dev/null
@@ -1,196 +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.kotlin;
-
-import static kotlinx.metadata.Flag.Type.IS_NULLABLE;
-
-import com.android.tools.r8.graph.DexClass;
-import com.google.common.collect.HashBasedTable;
-import java.util.BitSet;
-import kotlinx.metadata.KmConstructorExtensionVisitor;
-import kotlinx.metadata.KmConstructorVisitor;
-import kotlinx.metadata.KmExtensionType;
-import kotlinx.metadata.KmFunctionExtensionVisitor;
-import kotlinx.metadata.KmFunctionVisitor;
-import kotlinx.metadata.KmPropertyExtensionVisitor;
-import kotlinx.metadata.KmPropertyVisitor;
-import kotlinx.metadata.KmTypeVisitor;
-import kotlinx.metadata.KmValueParameterVisitor;
-import kotlinx.metadata.jvm.JvmConstructorExtensionVisitor;
-import kotlinx.metadata.jvm.JvmFieldSignature;
-import kotlinx.metadata.jvm.JvmFunctionExtensionVisitor;
-import kotlinx.metadata.jvm.JvmMethodSignature;
-import kotlinx.metadata.jvm.JvmPropertyExtensionVisitor;
-
-class NonNullParameterHintCollector {
-
- static class FunctionVisitor extends KmFunctionVisitor {
-
- private final HashBasedTable<String, String, BitSet> paramHints;
-
- private BitSet paramHint = new BitSet();
- private int paramIndex = 0;
- private String name = "";
- private String descriptor = "";
-
- FunctionVisitor(HashBasedTable<String, String, BitSet> paramHints) {
- this.paramHints = paramHints;
- }
-
- @Override
- public KmTypeVisitor visitReceiverParameterType(int typeFlags) {
- if (!IS_NULLABLE.invoke(typeFlags)) {
- paramHint.set(paramIndex);
- }
- paramIndex++;
- return null;
- }
-
- @Override
- public KmValueParameterVisitor visitValueParameter(int paramFlags, String paramName) {
- return new KmValueParameterVisitor() {
- @Override
- public KmTypeVisitor visitType(int typeFlags) {
- if (!IS_NULLABLE.invoke(typeFlags)) {
- paramHint.set(paramIndex);
- }
- paramIndex++;
- return null;
- }
- };
- }
-
- @Override
- public KmFunctionExtensionVisitor visitExtensions(KmExtensionType type) {
- if (type != JvmFunctionExtensionVisitor.TYPE) {
- return null;
- }
- return new JvmFunctionExtensionVisitor() {
- @Override
- public void visit(JvmMethodSignature desc) {
- if (desc != null) {
- name = desc.getName();
- descriptor = desc.getDesc();
- }
- }
- };
- }
-
- @Override
- public void visitEnd() {
- if (name.isEmpty() || descriptor.isEmpty()) {
- return;
- }
- paramHints.put(name, descriptor, paramHint);
- }
- }
-
- static class ConstructorVisitor extends KmConstructorVisitor {
- private final HashBasedTable<String, String, BitSet> paramHints;
-
- private BitSet paramHint = new BitSet();
- private int paramIndex = 0;
- private final String name = "<init>";
- private String descriptor = "";
-
- ConstructorVisitor(HashBasedTable<String, String, BitSet> paramHints, DexClass clazz) {
- this.paramHints = paramHints;
- // Enum constructor has two synthetic arguments to java.lang.Enum's sole constructor:
- // https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#Enum-java.lang.String-int-
- // whereas Kotlin @Metadata is still based on constructor signature, not descriptor.
- if (clazz != null && clazz.isEnum()) {
- // name - The name of this enum constant, which is the identifier used to declare it.
- paramIndex++;
- // ordinal - The ordinal of this enumeration constant (its position in the enum declaration,
- // where the initial constant is assigned an ordinal of zero).
- paramIndex++;
- }
- }
-
- @Override
- public KmValueParameterVisitor visitValueParameter(int paramFlags, String paramName) {
- return new KmValueParameterVisitor() {
- @Override
- public KmTypeVisitor visitType(int typeFlags) {
- if (!IS_NULLABLE.invoke(typeFlags)) {
- paramHint.set(paramIndex);
- }
- paramIndex++;
- return null;
- }
- };
- }
-
- @Override
- public KmConstructorExtensionVisitor visitExtensions(KmExtensionType type) {
- if (type != JvmConstructorExtensionVisitor.TYPE) {
- return null;
- }
- return new JvmConstructorExtensionVisitor() {
- @Override
- public void visit(JvmMethodSignature desc) {
- descriptor = desc.getDesc();
- }
- };
- }
-
- @Override
- public void visitEnd() {
- if (descriptor.isEmpty()) {
- return;
- }
- paramHints.put(name, descriptor, paramHint);
- }
- }
-
- static class PropertyVisitor extends KmPropertyVisitor {
- private final HashBasedTable<String, String, BitSet> paramHints;
-
- private BitSet paramHint = new BitSet();
- private int paramIndex = 0;
- private String name = "";
- private String descriptor = "";
-
- PropertyVisitor(HashBasedTable<String, String, BitSet> paramHints) {
- this.paramHints = paramHints;
- }
-
- @Override
- public KmTypeVisitor visitReturnType(int typeFlags) {
- if (!IS_NULLABLE.invoke(typeFlags)) {
- paramHint.set(paramIndex);
- }
- paramIndex++;
- return null;
- }
-
- @Override
- public KmPropertyExtensionVisitor visitExtensions(KmExtensionType type) {
- if (type != JvmPropertyExtensionVisitor.TYPE) {
- return null;
- }
- return new JvmPropertyExtensionVisitor() {
- @Override
- public void visit(
- JvmFieldSignature fieldDesc,
- JvmMethodSignature getterDesc,
- JvmMethodSignature setterDesc) {
- if (setterDesc != null) {
- name = setterDesc.getName();
- descriptor = setterDesc.getDesc();
- }
- }
- };
- }
-
- @Override
- public void visitEnd() {
- if (name.isEmpty() || descriptor.isEmpty()) {
- return;
- }
- paramHints.put(name, descriptor, paramHint);
- }
- }
-}
\ No newline at end of file