@Nullable static OverrideCompatibilityInfo checkReceiverAndParameterCount( CallableDescriptor superDescriptor, CallableDescriptor subDescriptor) { if ((superDescriptor.getExtensionReceiverParameter() == null) != (subDescriptor.getExtensionReceiverParameter() == null)) { return OverrideCompatibilityInfo.incompatible("Receiver presence mismatch"); } if (superDescriptor.getValueParameters().size() != subDescriptor.getValueParameters().size()) { return OverrideCompatibilityInfo.incompatible("Value parameter number mismatch"); } return null; }
@Nullable static OverrideCompatibilityInfo checkReceiverAndParameterCount( CallableDescriptor superDescriptor, CallableDescriptor subDescriptor) { if ((superDescriptor.getExtensionReceiverParameter() == null) != (subDescriptor.getExtensionReceiverParameter() == null)) { return OverrideCompatibilityInfo.receiverPresenceMismatch(); } if (superDescriptor.getValueParameters().size() != subDescriptor.getValueParameters().size()) { return OverrideCompatibilityInfo.valueParameterNumberMismatch(); } return null; }
private void checkCallWithReceiver( @NotNull CallCheckerContext context, @NotNull CallableDescriptor targetDescriptor, @Nullable ReceiverValue receiver, @Nullable KtExpression expression) { if (receiver == null) return; CallableDescriptor varDescriptor = null; KtExpression receiverExpression = null; if (receiver instanceof ExpressionReceiver) { receiverExpression = ((ExpressionReceiver) receiver).getExpression(); varDescriptor = getCalleeDescriptor(context, receiverExpression, true); } else if (receiver instanceof ExtensionReceiver) { ExtensionReceiver extensionReceiver = (ExtensionReceiver) receiver; CallableDescriptor extension = extensionReceiver.getDeclarationDescriptor(); varDescriptor = extension.getExtensionReceiverParameter(); assert varDescriptor != null : "Extension should have receiverParameterDescriptor: " + extension; receiverExpression = expression; } if (inlinableParameters.contains(varDescriptor)) { // check that it's invoke or inlinable extension checkLambdaInvokeOrExtensionCall( context, varDescriptor, targetDescriptor, receiverExpression); } }
static List<KotlinType> compiledValueParameters(CallableDescriptor callableDescriptor) { ReceiverParameterDescriptor receiverParameter = callableDescriptor.getExtensionReceiverParameter(); List<KotlinType> parameters = new ArrayList<KotlinType>(); if (receiverParameter != null) { parameters.add(receiverParameter.getType()); } for (ValueParameterDescriptor valueParameterDescriptor : callableDescriptor.getValueParameters()) { parameters.add(valueParameterDescriptor.getType()); } return parameters; }
public static boolean isExtension(@NotNull CallableDescriptor descriptor) { return (descriptor.getExtensionReceiverParameter() != null); }