Use Intrinsics.checkNotNullParameter to throw NPE in parameter null checks

Similarly to previous commits, this method was unused, so we're changing
its semantics in API version >= 1.4.

 #KT-22275 In Progress
This commit is contained in:
Alexander Udalov
2019-08-06 10:56:44 +02:00
parent 480313210a
commit 2baddb029c
23 changed files with 173 additions and 16 deletions
@@ -954,7 +954,7 @@ public class AsmUtil {
ReceiverParameterDescriptor receiverParameter = descriptor.getExtensionReceiverParameter();
if (receiverParameter != null) {
String name = getNameForReceiverParameter(descriptor, state.getBindingContext(), state.getLanguageVersionSettings());
genParamAssertion(v, state.getTypeMapper(), frameMap, receiverParameter, name, descriptor);
genParamAssertion(v, state, frameMap, receiverParameter, name, descriptor);
}
}
return;
@@ -963,17 +963,17 @@ public class AsmUtil {
ReceiverParameterDescriptor receiverParameter = descriptor.getExtensionReceiverParameter();
if (receiverParameter != null) {
String name = getNameForReceiverParameter(descriptor, state.getBindingContext(), state.getLanguageVersionSettings());
genParamAssertion(v, state.getTypeMapper(), frameMap, receiverParameter, name, descriptor);
genParamAssertion(v, state, frameMap, receiverParameter, name, descriptor);
}
for (ValueParameterDescriptor parameter : descriptor.getValueParameters()) {
genParamAssertion(v, state.getTypeMapper(), frameMap, parameter, parameter.getName().asString(), descriptor);
genParamAssertion(v, state, frameMap, parameter, parameter.getName().asString(), descriptor);
}
}
private static void genParamAssertion(
@NotNull InstructionAdapter v,
@NotNull KotlinTypeMapper typeMapper,
@NotNull GenerationState state,
@NotNull FrameMap frameMap,
@NotNull ParameterDescriptor parameter,
@NotNull String name,
@@ -982,7 +982,7 @@ public class AsmUtil {
KotlinType type = parameter.getType();
if (isNullableType(type) || InlineClassesUtilsKt.isNullableUnderlyingType(type)) return;
Type asmType = typeMapper.mapType(type);
Type asmType = state.getTypeMapper().mapType(type);
if (asmType.getSort() == Type.OBJECT || asmType.getSort() == Type.ARRAY) {
StackValue value;
if (JvmCodegenUtil.isDeclarationOfBigArityFunctionInvoke(containingDeclaration) ||
@@ -998,9 +998,10 @@ public class AsmUtil {
}
value.put(asmType, v);
v.visitLdcInsn(name);
v.invokestatic(
IntrinsicMethods.INTRINSICS_CLASS_NAME, "checkParameterIsNotNull", "(Ljava/lang/Object;Ljava/lang/String;)V", false
);
String methodName = state.getLanguageVersionSettings().getApiVersion().compareTo(ApiVersion.KOTLIN_1_4) >= 0
? "checkNotNullParameter"
: "checkParameterIsNotNull";
v.invokestatic(IntrinsicMethods.INTRINSICS_CLASS_NAME, methodName, "(Ljava/lang/Object;Ljava/lang/String;)V", false);
}
}
@@ -433,7 +433,7 @@ internal fun AbstractInsnNode.isCheckNotNull() =
internal fun AbstractInsnNode.isCheckParameterIsNotNull() =
isInsn<MethodInsnNode>(Opcodes.INVOKESTATIC) {
owner == IntrinsicMethods.INTRINSICS_CLASS_NAME &&
name == "checkParameterIsNotNull" &&
(name == "checkParameterIsNotNull" || name == "checkNotNullParameter") &&
desc == "(Ljava/lang/Object;Ljava/lang/String;)V"
}