Exemplo n.º 1
0
  @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;
  }
Exemplo n.º 2
0
  @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;
  }
Exemplo n.º 3
0
  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);
    }
  }
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 5
0
 public static boolean isExtension(@NotNull CallableDescriptor descriptor) {
   return (descriptor.getExtensionReceiverParameter() != null);
 }