From 167942f4bbec18350556e68a50b18bc0b6fb56df Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 7 Apr 2015 21:29:14 +0300 Subject: [PATCH] Add constant "invoke" to OperatorConventions --- .../kotlin/codegen/ClosureCodegen.java | 7 +-- .../kotlin/codegen/SamWrapperCodegen.java | 5 ++- .../codegen/inline/InlineCodegenUtil.java | 8 ++-- .../kotlin/codegen/state/JetTypeMapper.java | 5 ++- .../rendering/DefaultErrorMessages.java | 21 +++++---- .../kotlin/resolve/calls/CallResolver.java | 3 +- .../kotlin/resolve/calls/CallTransformer.java | 4 +- .../resolve/calls/checkers/InlineChecker.java | 3 +- .../expressions/OperatorConventions.java | 3 +- .../intentions/OperatorToFunctionIntention.kt | 12 ++--- .../idea/search/usagesSearch/conventions.kt | 12 +++-- .../inspections/UnusedSymbolInspection.kt | 3 +- .../ReplaceInvokeIntention.kt | 3 +- .../CreateInvokeFunctionActionFactory.kt | 17 ++++--- .../callTranslator/FunctionCallCases.kt | 44 +++++++------------ 15 files changed, 77 insertions(+), 73 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java index d29524d98c5..06490cce22c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java @@ -32,11 +32,11 @@ import org.jetbrains.kotlin.codegen.state.JetTypeMapper; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl; import org.jetbrains.kotlin.load.java.JvmAbi; -import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.JetElement; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.DescriptorUtils; import org.jetbrains.kotlin.types.JetType; +import org.jetbrains.kotlin.types.expressions.OperatorConventions; import org.jetbrains.org.objectweb.asm.MethodVisitor; import org.jetbrains.org.objectweb.asm.Type; import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter; @@ -48,7 +48,8 @@ import java.util.List; import static org.jetbrains.kotlin.codegen.AsmUtil.*; import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConst; -import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.*; +import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.CLOSURE; +import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.asmTypeForAnonymousClass; import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass; import static org.jetbrains.kotlin.resolve.jvm.diagnostics.DiagnosticsPackage.OtherOrigin; import static org.jetbrains.org.objectweb.asm.Opcodes.*; @@ -365,6 +366,6 @@ public class ClosureCodegen extends MemberCodegen { ClassDescriptor elementClass = elementDescriptor.getExtensionReceiverParameter() == null ? KotlinBuiltIns.getInstance().getFunction(arity) : KotlinBuiltIns.getInstance().getExtensionFunction(arity); - return elementClass.getDefaultType().getMemberScope().getFunctions(Name.identifier("invoke")).iterator().next(); + return elementClass.getDefaultType().getMemberScope().getFunctions(OperatorConventions.INVOKE).iterator().next(); } } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java index 44b38e43537..7d3b86c7c76 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.JetFile; import org.jetbrains.kotlin.resolve.DescriptorUtils; import org.jetbrains.kotlin.types.JetType; +import org.jetbrains.kotlin.types.expressions.OperatorConventions; import org.jetbrains.org.objectweb.asm.MethodVisitor; import org.jetbrains.org.objectweb.asm.Type; import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter; @@ -146,8 +147,8 @@ public class SamWrapperCodegen { FunctionCodegen codegen = new FunctionCodegen(CodegenContext.STATIC.intoClass( (ClassDescriptor) erasedInterfaceFunction.getContainingDeclaration(), OwnerKind.IMPLEMENTATION, state), cv, state, parentCodegen); - FunctionDescriptor invokeFunction = functionJetType.getMemberScope() - .getFunctions(Name.identifier("invoke")).iterator().next().getOriginal(); + FunctionDescriptor invokeFunction = + functionJetType.getMemberScope().getFunctions(OperatorConventions.INVOKE).iterator().next().getOriginal(); StackValue functionField = StackValue.field(functionType, ownerType, FUNCTION_FIELD_NAME, false, StackValue.none()); codegen.genDelegate(erasedInterfaceFunction, invokeFunction, functionField); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java index 00fd53ae5eb..6d2167ee378 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegenUtil.java @@ -48,6 +48,7 @@ import org.jetbrains.kotlin.resolve.jvm.JvmClassName; import org.jetbrains.kotlin.serialization.ProtoBuf; import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedSimpleFunctionDescriptor; import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf; +import org.jetbrains.kotlin.types.expressions.OperatorConventions; import org.jetbrains.org.objectweb.asm.*; import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter; import org.jetbrains.org.objectweb.asm.tree.*; @@ -67,7 +68,6 @@ import static org.jetbrains.kotlin.resolve.DescriptorUtils.isTrait; public class InlineCodegenUtil { public static final boolean GENERATE_SMAP = true; public static final int API = Opcodes.ASM5; - public static final String INVOKE = "invoke"; public static final String CAPTURED_FIELD_PREFIX = "$"; @@ -115,9 +115,8 @@ public class InlineCodegenUtil { ) { if (methodName.equals(name) && methodDescriptor.equals(desc)) { node[0] = new MethodNode(API, access, name, desc, signature, exceptions) { - @Override - public void visitLineNumber(int line, Label start) { + public void visitLineNumber(int line, @NotNull Label start) { super.visitLineNumber(line, start); lines[0] = Math.min(lines[0], line); lines[1] = Math.max(lines[1], line); @@ -252,9 +251,8 @@ public class InlineCodegenUtil { return getInlineName(codegenContext, currentDescriptor.getContainingDeclaration(), typeMapper) + "$" + suffix; } - public static boolean isInvokeOnLambda(String owner, String name) { - if (!INVOKE.equals(name)) { + if (!OperatorConventions.INVOKE.asString().equals(name)) { return false; } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java index fafd0f7ab5e..32e657fbd5e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java @@ -58,6 +58,7 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterSignature import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature; import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor; import org.jetbrains.kotlin.types.*; +import org.jetbrains.kotlin.types.expressions.OperatorConventions; import org.jetbrains.org.objectweb.asm.Type; import org.jetbrains.org.objectweb.asm.commons.Method; @@ -682,10 +683,10 @@ public class JetTypeMapper { } } - return "invoke"; + return OperatorConventions.INVOKE.asString(); } else if (isLocalFunction(descriptor) || isFunctionExpression(descriptor)) { - return "invoke"; + return OperatorConventions.INVOKE.asString(); } else { return descriptor.getName().asString(); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index 2c8e05f4e80..845f94cb8b5 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.renderer.MultiRenderer; import org.jetbrains.kotlin.renderer.Renderer; import org.jetbrains.kotlin.resolve.varianceChecker.VarianceChecker.VarianceConflictDiagnosticData; import org.jetbrains.kotlin.types.JetType; +import org.jetbrains.kotlin.types.expressions.OperatorConventions; import org.jetbrains.kotlin.util.MappedExtensionProvider; import java.lang.reflect.Field; @@ -500,15 +501,17 @@ public class DefaultErrorMessages { MAP.put(CONFLICTING_OVERLOADS, "''{0}'' is already defined in {1}", COMPACT_WITH_MODIFIERS, STRING); MAP.put(ILLEGAL_PLATFORM_NAME, "Illegal platform name: ''{0}''", STRING); - MAP.put(FUNCTION_EXPECTED, "Expression ''{0}''{1} cannot be invoked as a function. The function 'invoke()' is not found", ELEMENT_TEXT, new Renderer() { - @NotNull - @Override - public String render(@NotNull JetType type) { - if (type.isError()) return ""; - return " of type '" + RENDER_TYPE.render(type) + "'"; - } - }); - MAP.put(FUNCTION_CALL_EXPECTED, "Function invocation ''{0}({1})'' expected", ELEMENT_TEXT,new Renderer() { + MAP.put(FUNCTION_EXPECTED, "Expression ''{0}''{1} cannot be invoked as a function. " + + "The function '" + OperatorConventions.INVOKE.asString() + "()' is not found", + ELEMENT_TEXT, new Renderer() { + @NotNull + @Override + public String render(@NotNull JetType type) { + if (type.isError()) return ""; + return " of type '" + RENDER_TYPE.render(type) + "'"; + } + }); + MAP.put(FUNCTION_CALL_EXPECTED, "Function invocation ''{0}({1})'' expected", ELEMENT_TEXT, new Renderer() { @NotNull @Override public String render(@NotNull Boolean hasValueParameters) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallResolver.java index c60d11883aa..588f32c4dc5 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallResolver.java @@ -48,6 +48,7 @@ import org.jetbrains.kotlin.types.JetType; import org.jetbrains.kotlin.types.TypeSubstitutor; import org.jetbrains.kotlin.types.expressions.ExpressionTypingContext; import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices; +import org.jetbrains.kotlin.types.expressions.OperatorConventions; import javax.inject.Inject; import java.util.Collection; @@ -154,7 +155,7 @@ public class CallResolver { @NotNull TracingStrategy tracing ) { return computeTasksAndResolveCall( - context, Name.identifier("invoke"), tracing, + context, OperatorConventions.INVOKE, tracing, CallableDescriptorCollectors.FUNCTIONS, CallTransformer.FUNCTION_CALL_TRANSFORMER); } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallTransformer.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallTransformer.java index 095d489fec7..c8c83a5f27a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallTransformer.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallTransformer.java @@ -45,6 +45,7 @@ import org.jetbrains.kotlin.resolve.calls.util.DelegatingCall; import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver; import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.kotlin.types.JetType; +import org.jetbrains.kotlin.types.expressions.OperatorConventions; import java.util.Collection; import java.util.Collections; @@ -267,7 +268,8 @@ public class CallTransformer { this.outerCall = call; this.explicitExtensionReceiver = explicitExtensionReceiver; this.calleeExpressionAsDispatchReceiver = calleeExpressionAsDispatchReceiver; - this.fakeInvokeExpression = (JetSimpleNameExpression) JetPsiFactory(call.getCallElement()).createExpression( "invoke"); + this.fakeInvokeExpression = + (JetSimpleNameExpression) JetPsiFactory(call.getCallElement()).createExpression(OperatorConventions.INVOKE.asString()); } @Nullable diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/InlineChecker.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/InlineChecker.java index 62c6d69eedc..0da5b61f77b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/InlineChecker.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/InlineChecker.java @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver; import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver; import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.kotlin.types.JetType; +import org.jetbrains.kotlin.types.expressions.OperatorConventions; import java.util.LinkedHashSet; import java.util.Map; @@ -228,7 +229,7 @@ class InlineChecker implements CallChecker { } DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration(); - boolean isInvoke = descriptor.getName().asString().equals("invoke") && + boolean isInvoke = descriptor.getName().equals(OperatorConventions.INVOKE) && containingDeclaration instanceof ClassDescriptor && KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(((ClassDescriptor) containingDeclaration).getDefaultType()); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/OperatorConventions.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/OperatorConventions.java index 2d21c675e2f..4d50ad64151 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/OperatorConventions.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/OperatorConventions.java @@ -20,9 +20,9 @@ import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.lexer.JetToken; import org.jetbrains.kotlin.lexer.JetTokens; +import org.jetbrains.kotlin.name.Name; public class OperatorConventions { @@ -30,6 +30,7 @@ public class OperatorConventions { public static final Name IDENTITY_EQUALS = Name.identifier("identityEquals"); public static final Name COMPARE_TO = Name.identifier("compareTo"); public static final Name CONTAINS = Name.identifier("contains"); + public static final Name INVOKE = Name.identifier("invoke"); private OperatorConventions() {} diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/OperatorToFunctionIntention.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/OperatorToFunctionIntention.kt index ae685cedf82..bf60f29c01d 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/OperatorToFunctionIntention.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/OperatorToFunctionIntention.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.kotlin.types.expressions.OperatorConventions public class OperatorToFunctionIntention : JetSelfTargetingIntention(javaClass(), "Replace overloaded operator with function call") { companion object { @@ -69,10 +70,10 @@ public class OperatorToFunctionIntention : JetSelfTargetingIntention = ImmutableSet .builder() @@ -45,8 +45,6 @@ public val ALL_SEARCHABLE_OPERATION_PATTERNS: Set = public val INDEXING_OPERATION_NAMES: ImmutableSet = ImmutableSet.of(Name.identifier("get"), Name.identifier("set")) -public val INVOKE_OPERATION_NAME: Name = Name.identifier("invoke") - public val ITERATOR_OPERATION_NAME: Name = Name.identifier("iterator") public val IN_OPERATIONS_TO_SEARCH: ImmutableSet = ImmutableSet.of(JetTokens.IN_KEYWORD) diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt index 4970221f4f6..8f8a1fd26aa 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt @@ -44,6 +44,7 @@ import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext import org.jetbrains.kotlin.psi.psiUtil.isAncestor +import org.jetbrains.kotlin.types.expressions.OperatorConventions import org.jetbrains.kotlin.utils.singletonOrEmptyList import java.awt.GridBagConstraints import java.awt.GridBagLayout @@ -156,7 +157,7 @@ public class UnusedSymbolInspection : AbstractKotlinInspection() { private fun isConventionalName(namedDeclaration: JetNamedDeclaration): Boolean { val name = namedDeclaration.getNameAsName() - return name.getOperationSymbolsToSearch().isNotEmpty() || name == INVOKE_OPERATION_NAME + return name.getOperationSymbolsToSearch().isNotEmpty() || name == OperatorConventions.INVOKE } private fun hasNonTrivialUsages(declaration: JetNamedDeclaration): Boolean { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/attributeCallReplacements/ReplaceInvokeIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/attributeCallReplacements/ReplaceInvokeIntention.kt index a2aa831844b..ace56492d2a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/attributeCallReplacements/ReplaceInvokeIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/attributeCallReplacements/ReplaceInvokeIntention.kt @@ -18,11 +18,12 @@ package org.jetbrains.kotlin.idea.intentions.attributeCallReplacements import com.intellij.openapi.editor.Editor import org.jetbrains.kotlin.psi.JetPsiFactory +import org.jetbrains.kotlin.types.expressions.OperatorConventions public open class ReplaceInvokeIntention : AttributeCallReplacementIntention("replace.invoke.with.call") { override fun isApplicableToCall(call: CallDescription): Boolean { - return call.functionName == "invoke" + return call.functionName == OperatorConventions.INVOKE.asString() } override fun replaceCall(call: CallDescription, editor: Editor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateInvokeFunctionActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateInvokeFunctionActionFactory.kt index 33f4cdc58db..63f6cec0773 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateInvokeFunctionActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateInvokeFunctionActionFactory.kt @@ -16,15 +16,17 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable -import org.jetbrains.kotlin.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction -import org.jetbrains.kotlin.types.Variance -import org.jetbrains.kotlin.psi.JetCallExpression import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors -import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.* -import java.util.Collections import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory +import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.FunctionInfo +import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.ParameterInfo +import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.TypeInfo +import org.jetbrains.kotlin.psi.JetCallExpression +import org.jetbrains.kotlin.types.Variance +import org.jetbrains.kotlin.types.expressions.OperatorConventions object CreateInvokeFunctionActionFactory : JetIntentionActionsFactory() { override fun doCreateActions(diagnostic: Diagnostic): List? { @@ -44,6 +46,9 @@ object CreateInvokeFunctionActionFactory : JetIntentionActionsFactory() { } val returnType = TypeInfo(callExpr, Variance.OUT_VARIANCE) - return CreateCallableFromUsageFixes(callExpr, FunctionInfo("invoke", receiverType, returnType, Collections.emptyList(), parameters)) + return CreateCallableFromUsageFixes( + callExpr, + FunctionInfo(OperatorConventions.INVOKE.asString(), receiverType, returnType, emptyList(), parameters) + ) } } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt index d731f09afc8..2235fb08fb4 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/FunctionCallCases.kt @@ -16,37 +16,25 @@ package org.jetbrains.kotlin.js.translate.callTranslator -import com.google.dart.compiler.backend.js.ast.JsExpression -import com.google.dart.compiler.backend.js.ast.JsNameRef -import com.google.dart.compiler.backend.js.ast.JsInvocation -import java.util.ArrayList -import org.jetbrains.kotlin.js.translate.context.Namer -import org.jetbrains.kotlin.descriptors.CallableDescriptor -import com.google.dart.compiler.backend.js.ast.JsNew -import org.jetbrains.kotlin.descriptors.ConstructorDescriptor -import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import com.google.dart.compiler.backend.js.ast.JsLiteral -import com.google.dart.compiler.backend.js.ast.JsName -import org.jetbrains.kotlin.js.translate.context.TranslationContext -import org.jetbrains.kotlin.js.translate.reference.CallArgumentTranslator -import org.jetbrains.kotlin.descriptors.Visibilities +import com.google.dart.compiler.backend.js.ast.* import com.intellij.util.SmartList -import com.google.dart.compiler.backend.js.ast.JsArrayAccess -import org.jetbrains.kotlin.js.translate.utils.JsAstUtils -import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils +import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.descriptors.CallableDescriptor +import org.jetbrains.kotlin.descriptors.ConstructorDescriptor +import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.js.PredefinedAnnotation -import org.jetbrains.kotlin.resolve.calls.tasks.isDynamic -import org.jetbrains.kotlin.psi.Call +import org.jetbrains.kotlin.js.translate.context.Namer +import org.jetbrains.kotlin.js.translate.context.TranslationContext import org.jetbrains.kotlin.js.translate.operation.OperatorTable -import com.google.dart.compiler.backend.js.ast.JsBinaryOperation -import org.jetbrains.kotlin.psi.JetPrefixExpression -import com.google.dart.compiler.backend.js.ast.JsPrefixOperation -import org.jetbrains.kotlin.psi.JetPostfixExpression -import com.google.dart.compiler.backend.js.ast.JsPostfixOperation -import org.jetbrains.kotlin.psi.JetBinaryExpression -import org.jetbrains.kotlin.lexer.JetTokens -import org.jetbrains.kotlin.psi.JetOperationExpression +import org.jetbrains.kotlin.js.translate.reference.CallArgumentTranslator +import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils +import org.jetbrains.kotlin.js.translate.utils.JsAstUtils import org.jetbrains.kotlin.js.translate.utils.PsiUtils +import org.jetbrains.kotlin.lexer.JetTokens +import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.resolve.calls.tasks.isDynamic +import org.jetbrains.kotlin.types.expressions.OperatorConventions +import java.util.ArrayList public fun addReceiverToArgs(receiver: JsExpression, arguments: List): List { if (arguments.isEmpty()) @@ -178,7 +166,7 @@ object NativeSetterCallCase : AnnotatedAsNativeXCallCase(PredefinedAnnotation.NA object InvokeIntrinsic : FunctionCallCase { fun canApply(callInfo: FunctionCallInfo): Boolean { - if (!callInfo.callableDescriptor.getName().asString().equals("invoke")) + if (callInfo.callableDescriptor.getName() != OperatorConventions.INVOKE) return false val parameterCount = callInfo.callableDescriptor.getValueParameters().size() val funDeclaration = callInfo.callableDescriptor.getContainingDeclaration()