/** * @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); }
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; }
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; }
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(); }