Exemplo n.º 1
0
  /**
   * @return true iff this is a top-level declaration or a class member with no expected "this"
   *     object (e.g. static members in Java, values() and valueOf() methods of enum classes, etc.)
   */
  public static boolean isStaticDeclaration(@NotNull CallableDescriptor descriptor) {
    if (descriptor instanceof ConstructorDescriptor) return false;

    DeclarationDescriptor container = descriptor.getContainingDeclaration();
    return container instanceof PackageFragmentDescriptor
        || (container instanceof ClassDescriptor
            && descriptor.getDispatchReceiverParameter() == null);
  }
Exemplo n.º 2
0
  public static boolean shouldBeInlined(@NotNull CallableDescriptor descriptor) {
    if (descriptor instanceof SimpleFunctionDescriptor) {
      return InlineUtil.isInline(descriptor);
    }

    if (descriptor instanceof ValueParameterDescriptor) {
      return InlineUtil.isInline(descriptor.getContainingDeclaration())
          && InlineUtil.isInlineLambdaParameter((ParameterDescriptor) descriptor);
    }

    return false;
  }
Exemplo n.º 3
0
  private static boolean isInvokeOrInlineExtension(@NotNull CallableDescriptor descriptor) {
    if (!(descriptor instanceof SimpleFunctionDescriptor)) {
      return false;
    }

    DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration();
    boolean isInvoke =
        descriptor.getName().equals(OperatorNameConventions.INVOKE)
            && containingDeclaration instanceof ClassDescriptor
            && FunctionTypesKt.isFunctionType(
                ((ClassDescriptor) containingDeclaration).getDefaultType());

    return isInvoke || InlineUtil.isInline(descriptor);
  }
  /** @return true if the member is an inherited implementation of a method from Any */
  private boolean isTrivial(@NotNull FunctionDescriptor function) {
    if (function.getKind() == CallableMemberDescriptor.Kind.DECLARATION) {
      return false;
    }

    for (CallableDescriptor overridden : OverrideResolver.getOverriddenDeclarations(function)) {
      if (overridden instanceof CallableMemberDescriptor
          && ((CallableMemberDescriptor) overridden).getKind()
              == CallableMemberDescriptor.Kind.DECLARATION
          && !overridden.getContainingDeclaration().equals(builtIns.getAny())) {
        return false;
      }
    }

    return true;
  }
Exemplo n.º 5
0
  private static boolean isInvokeOrInlineExtension(@NotNull CallableDescriptor descriptor) {
    if (!(descriptor instanceof SimpleFunctionDescriptor)) {
      return false;
    }

    DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration();
    boolean isInvoke =
        descriptor.getName().asString().equals("invoke")
            && containingDeclaration instanceof ClassDescriptor
            && KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(
                ((ClassDescriptor) containingDeclaration).getDefaultType());

    return isInvoke
        ||
        // or inline extension
        ((SimpleFunctionDescriptor) descriptor).getInlineStrategy().isInline();
  }