diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForConstructorDescriptor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForConstructorDescriptor.kt index 0268c16e4e8..e124529ab2c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForConstructorDescriptor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForConstructorDescriptor.kt @@ -48,6 +48,7 @@ public class AccessorForConstructorDescriptor( calleeDescriptor.returnType, Modality.FINAL, Visibilities.INTERNAL, + false, false ) } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.java index 2f8611bda38..9bba978bb7c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.java @@ -48,7 +48,8 @@ public class AccessorForFunctionDescriptor extends AbstractAccessorForFunctionDe descriptor.getReturnType(), Modality.FINAL, Visibilities.INTERNAL, - descriptor.isOperator()); + descriptor.isOperator(), + descriptor.isInfix()); } @NotNull diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java index 9696f4de08b..8036c736a9a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java @@ -198,7 +198,7 @@ public class ClosureCodegen extends MemberCodegen { descriptorForBridges .initialize(null, erasedInterfaceFunction.getDispatchReceiverParameter(), erasedInterfaceFunction.getTypeParameters(), erasedInterfaceFunction.getValueParameters(), erasedInterfaceFunction.getReturnType(), - Modality.OPEN, erasedInterfaceFunction.getVisibility(), false); + Modality.OPEN, erasedInterfaceFunction.getVisibility(), false, false); descriptorForBridges.addOverriddenDescriptor(erasedInterfaceFunction); functionCodegen.generateBridges(descriptorForBridges); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java index fc11a66e425..4beff346dba 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java @@ -337,7 +337,7 @@ public abstract class MemberCodegenemptyList(), Collections.emptyList(), DescriptorUtilPackage.getModule(descriptor).getBuiltIns().getUnitType(), - null, Visibilities.PRIVATE, false); + null, Visibilities.PRIVATE, false, false); this.clInit = new ExpressionCodegen(mv, new FrameMap(), Type.VOID_TYPE, context.intoFunction(clInit), state, this); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt index 478bed30c0d..5282696ae83 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyReferenceCodegen.kt @@ -150,7 +150,7 @@ public class PropertyReferenceCodegen( SourceElement.NO_SOURCE ) fakeDescriptor.initialize(null, classDescriptor.getThisAsReceiverParameter(), emptyList(), emptyList(), - classDescriptor.builtIns.getAnyType(), Modality.OPEN, Visibilities.PUBLIC, false) + classDescriptor.builtIns.getAnyType(), Modality.OPEN, Visibilities.PUBLIC, false, false) val fakeCodegen = ExpressionCodegen( this, FrameMap(), OBJECT_TYPE, context.intoFunction(fakeDescriptor), state, this@PropertyReferenceCodegen diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java index 99bcbe669bc..3b8d505e64b 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java @@ -163,7 +163,7 @@ public class SamWrapperCodegen { descriptorForBridges .initialize(null, originalInterfaceErased.getDispatchReceiverParameter(), originalInterfaceErased.getTypeParameters(), originalInterfaceErased.getValueParameters(), originalInterfaceErased.getReturnType(), - Modality.OPEN, originalInterfaceErased.getVisibility(), false); + Modality.OPEN, originalInterfaceErased.getVisibility(), false, false); descriptorForBridges.addOverriddenDescriptor(originalInterfaceErased); codegen.generateBridges(descriptorForBridges); diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/SingleAbstractMethodUtils.java b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/SingleAbstractMethodUtils.java index 983b6558565..82a6dd28dd3 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/SingleAbstractMethodUtils.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/SingleAbstractMethodUtils.java @@ -171,6 +171,7 @@ public class SingleAbstractMethodUtils { returnType, Modality.FINAL, samInterface.getVisibility(), + false, false ); @@ -208,6 +209,7 @@ public class SingleAbstractMethodUtils { returnType, Modality.FINAL, original.getVisibility(), + false, false ); } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java index c8dd055d8e2..f40e9183825 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java @@ -117,6 +117,7 @@ public class SignaturesPropagationData { autoReturnType, Modality.OPEN, Visibilities.PUBLIC, + false, false ); return autoMethodDescriptor; diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt index 611f2acd85e..59c130a0717 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt @@ -128,7 +128,8 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : JetScope by Jet val visibility = syntheticExtensionVisibility(sourceFunction) - descriptor.initialize(receiverType, null, typeParameters, valueParameters, returnType, Modality.FINAL, visibility, false) + descriptor.initialize(receiverType, null, typeParameters, valueParameters, returnType, + Modality.FINAL, visibility, false, false) return descriptor } @@ -149,6 +150,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : JetScope by Jet newModality: Modality, newVisibility: Visibility, newIsOperator: Boolean, + newIsInfix: Boolean, original: FunctionDescriptor?, copyOverrides: Boolean, kind: CallableMemberDescriptor.Kind, @@ -157,7 +159,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : JetScope by Jet newReturnType: JetType ): FunctionDescriptor? { val descriptor = super.doSubstitute( - originalSubstitutor, newOwner, newModality, newVisibility, newIsOperator, original, + originalSubstitutor, newOwner, newModality, newVisibility, newIsOperator, newIsInfix, original, copyOverrides, kind, newValueParameterDescriptors, newExtensionReceiverParameterType, newReturnType) as MyFunctionDescriptor? ?: return null diff --git a/compiler/frontend/src/org/jetbrains/kotlin/lexer/JetTokens.java b/compiler/frontend/src/org/jetbrains/kotlin/lexer/JetTokens.java index e56084c3c4c..269fd50b87a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/lexer/JetTokens.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/lexer/JetTokens.java @@ -177,6 +177,7 @@ public interface JetTokens { JetModifierKeywordToken ANNOTATION_KEYWORD = JetModifierKeywordToken.softKeywordModifier("annotation"); JetModifierKeywordToken CROSSINLINE_KEYWORD = JetModifierKeywordToken.softKeywordModifier("crossinline"); JetModifierKeywordToken OPERATOR_KEYWORD = JetModifierKeywordToken.softKeywordModifier("operator"); + JetModifierKeywordToken INFIX_KEYWORD = JetModifierKeywordToken.softKeywordModifier("infix"); JetModifierKeywordToken CONST_KEYWORD = JetModifierKeywordToken.softKeywordModifier("const"); @@ -197,7 +198,7 @@ public interface JetTokens { FIELD_KEYWORD, PROPERTY_KEYWORD, RECEIVER_KEYWORD, PARAM_KEYWORD, SPARAM_KEYWORD, LATE_INIT_KEYWORD, DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, - ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD, CONST_KEYWORD, OPERATOR_KEYWORD + ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD, CONST_KEYWORD, OPERATOR_KEYWORD, INFIX_KEYWORD ); /* @@ -211,7 +212,7 @@ public interface JetTokens { PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, REIFIED_KEYWORD, COMPANION_KEYWORD, SEALED_KEYWORD, LATE_INIT_KEYWORD, DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD, - CONST_KEYWORD, OPERATOR_KEYWORD + CONST_KEYWORD, OPERATOR_KEYWORD, INFIX_KEYWORD }; // Please synchronize this array with org.jetbrains.kotlin.descriptors.annotations.ANNOTATION_MODIFIERS_FQ_NAMES diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/stubs/elements/JetFileElementType.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/stubs/elements/JetFileElementType.java index ccd0650c68d..c707637550a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/stubs/elements/JetFileElementType.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/stubs/elements/JetFileElementType.java @@ -34,7 +34,7 @@ import org.jetbrains.kotlin.psi.stubs.KotlinFileStub; import java.io.IOException; public class JetFileElementType extends IStubFileElementType { - public static final int STUB_VERSION = 59; + public static final int STUB_VERSION = 60; private static final String NAME = "kotlin.FILE"; diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java index 46a5620f83e..f8a38adcede 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java @@ -242,7 +242,8 @@ public class DescriptorResolver { returnType, Modality.FINAL, property.getVisibility(), - true + true, + false ); trace.record(BindingContext.DATA_CLASS_COMPONENT_FUNCTION, parameter, functionDescriptor); @@ -291,6 +292,7 @@ public class DescriptorResolver { returnType, Modality.FINAL, Visibilities.PUBLIC, + false, false ); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt index 1ea9d15e820..e03fa7d0aed 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt @@ -173,7 +173,8 @@ class FunctionDescriptorResolver( returnType, modality, visibility, - function.hasModifier(JetTokens.OPERATOR_KEYWORD) + function.hasModifier(JetTokens.OPERATOR_KEYWORD), + function.hasModifier(JetTokens.INFIX_KEYWORD) ) receiverType?.let { ForceResolveUtil.forceResolveAllContents(it.getAnnotations()) } for (valueParameterDescriptor in valueParameterDescriptors) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorUtil.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorUtil.java index 8e36495ee42..90949c7db8f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorUtil.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorUtil.java @@ -104,6 +104,7 @@ public class FunctionDescriptorUtil { KotlinBuiltIns.getReturnTypeFromFunctionType(functionType), modality, visibility, + false, false); } @@ -157,7 +158,8 @@ public class FunctionDescriptorUtil { function.getReturnType(), function.getModality(), function.getVisibility(), - function.isOperator()); + function.isOperator(), + function.isInfix()); return descriptor; } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt index 447fcbdef04..b56fd3f2688 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt @@ -76,7 +76,8 @@ public object ModifierCheckerCore { ANNOTATION_KEYWORD to EnumSet.of(ANNOTATION_CLASS), CROSSINLINE_KEYWORD to EnumSet.of(VALUE_PARAMETER), CONST_KEYWORD to EnumSet.of(MEMBER_PROPERTY, TOP_LEVEL_PROPERTY), - OPERATOR_KEYWORD to EnumSet.of(FUNCTION) + OPERATOR_KEYWORD to EnumSet.of(FUNCTION), + INFIX_KEYWORD to EnumSet.of(FUNCTION) ) // NOTE: redundant targets must be possible! diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt index 587744be514..638cc38419c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt @@ -130,6 +130,7 @@ object DynamicCallableDescriptors { DynamicType, Modality.FINAL, Visibilities.PUBLIC, + false, false ) return functionDescriptor diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/synthesizedInvokes.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/synthesizedInvokes.kt index 52f9c65df17..02ab7bf894e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/synthesizedInvokes.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/synthesizedInvokes.kt @@ -81,7 +81,8 @@ private fun createSynthesizedFunctionWithFirstParameterAsReceiver(descriptor: Fu original.getReturnType(), original.getModality(), original.getVisibility(), - original.isOperator + original.isOperator, + original.isInfix ) return result diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ControlStructureTypingUtils.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ControlStructureTypingUtils.java index ba969676b06..4e8ba773e86 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ControlStructureTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ControlStructureTypingUtils.java @@ -125,6 +125,7 @@ public class ControlStructureTypingUtils { type, Modality.FINAL, Visibilities.PUBLIC, + false, false ); return function; diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java index 378c0eb8cab..75ac4cb889f 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java @@ -173,9 +173,12 @@ public class DescriptorSerializer { boolean lateInit = false; boolean isConst = false; boolean isOperator = false; + boolean isInfix = false; if (descriptor instanceof FunctionDescriptor) { - isOperator = ((FunctionDescriptor) descriptor).isOperator(); + FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor; + isOperator = functionDescriptor.isOperator(); + isInfix = functionDescriptor.isInfix(); } if (descriptor instanceof PropertyDescriptor) { @@ -233,7 +236,8 @@ public class DescriptorSerializer { hasConstant, lateInit, isConst, - isOperator + isOperator, + isInfix )); for (TypeParameterDescriptor typeParameterDescriptor : descriptor.getTypeParameters()) { diff --git a/compiler/testData/loadJava/compiledKotlin/fun/InfixKeyword.kt b/compiler/testData/loadJava/compiledKotlin/fun/InfixKeyword.kt new file mode 100644 index 00000000000..f822f7d2e5e --- /dev/null +++ b/compiler/testData/loadJava/compiledKotlin/fun/InfixKeyword.kt @@ -0,0 +1,5 @@ +package test + +class Example { + infix fun test(other: Example) {} +} \ No newline at end of file diff --git a/compiler/testData/loadJava/compiledKotlin/fun/InfixKeyword.txt b/compiler/testData/loadJava/compiledKotlin/fun/InfixKeyword.txt new file mode 100644 index 00000000000..0474683a408 --- /dev/null +++ b/compiler/testData/loadJava/compiledKotlin/fun/InfixKeyword.txt @@ -0,0 +1,6 @@ +package test + +public final class Example { + /*primary*/ public constructor Example() + public final infix fun test(/*0*/ other: test.Example): kotlin.Unit +} diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaTestGenerated.java index 3d08ac2081e..bc3a2544d35 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaTestGenerated.java @@ -4048,6 +4048,12 @@ public class LoadJavaTestGenerated extends AbstractLoadJavaTest { doTestCompiledKotlin(fileName); } + @TestMetadata("InfixKeyword.kt") + public void testInfixKeyword() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/InfixKeyword.kt"); + doTestCompiledKotlin(fileName); + } + @TestMetadata("InheritMethodsDifferentReturnTypesAndVisibilities.kt") public void testInheritMethodsDifferentReturnTypesAndVisibilities() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/InheritMethodsDifferentReturnTypesAndVisibilities.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/runtime/JvmRuntimeDescriptorLoaderTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/jvm/runtime/JvmRuntimeDescriptorLoaderTestGenerated.java index 54574eaed30..376dc79ce4c 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/runtime/JvmRuntimeDescriptorLoaderTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/runtime/JvmRuntimeDescriptorLoaderTestGenerated.java @@ -2157,6 +2157,12 @@ public class JvmRuntimeDescriptorLoaderTestGenerated extends AbstractJvmRuntimeD doTest(fileName); } + @TestMetadata("InfixKeyword.kt") + public void testInfixKeyword() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/InfixKeyword.kt"); + doTest(fileName); + } + @TestMetadata("InheritMethodsDifferentReturnTypesAndVisibilities.kt") public void testInheritMethodsDifferentReturnTypesAndVisibilities() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/InheritMethodsDifferentReturnTypesAndVisibilities.kt"); diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaConstructorDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaConstructorDescriptor.java index 82906059ba7..d8e8d65fabd 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaConstructorDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaConstructorDescriptor.java @@ -110,6 +110,7 @@ public class JavaConstructorDescriptor extends ConstructorDescriptorImpl impleme enhancedReturnType, getModality(), getVisibility(), + false, false ); diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaMethodDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaMethodDescriptor.java index 6cc6e720ff9..2ab58063bf6 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaMethodDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/JavaMethodDescriptor.java @@ -122,7 +122,7 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement // 1. creates full copy of descriptor // 2. copies method's type parameters (with new containing declaration) and properly substitute to them in value parameters, return type and etc. JavaMethodDescriptor enhancedMethod = (JavaMethodDescriptor) doSubstitute( - TypeSubstitutor.EMPTY, getContainingDeclaration(), getModality(), getVisibility(), false, getOriginal(), + TypeSubstitutor.EMPTY, getContainingDeclaration(), getModality(), getVisibility(), false, false, getOriginal(), /* copyOverrides = */ true, getKind(), enhancedValueParameters, enhancedReceiverType, enhancedReturnType ); diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt index 01bbc724821..1086773f901 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt @@ -127,6 +127,7 @@ public abstract class LazyJavaScope( effectiveSignature.getReturnType(), Modality.convertFromFlags(method.isAbstract(), !method.isFinal()), method.getVisibility(), + false, false ) diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInvokeDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInvokeDescriptor.kt index 684cbd63ba3..67358a45111 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInvokeDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInvokeDescriptor.kt @@ -61,7 +61,8 @@ public class FunctionInvokeDescriptor private constructor( typeParameters.last().getDefaultType(), Modality.ABSTRACT, Visibilities.PUBLIC, - true + true, + false ) return result } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java index 64ce69fa5e6..fcaed1b4889 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java @@ -42,4 +42,6 @@ public interface FunctionDescriptor extends CallableMemberDescriptor { FunctionDescriptor copy(DeclarationDescriptor newOwner, Modality modality, Visibility visibility, Kind kind, boolean copyOverrides); boolean isOperator(); + + boolean isInfix(); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ConstructorDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ConstructorDescriptorImpl.java index 2e7f47c1751..553b513f0b7 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ConstructorDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ConstructorDescriptorImpl.java @@ -60,7 +60,7 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements @NotNull Visibility visibility ) { super.initialize(null, calculateDispatchReceiverParameter(), typeParameters, unsubstitutedValueParameters, null, - Modality.FINAL, visibility, false); + Modality.FINAL, visibility, false, false); return this; } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java index 458fb842508..425487d7287 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java @@ -43,6 +43,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo private Modality modality; private Visibility visibility = Visibilities.UNKNOWN; private boolean isOperator; + private boolean isInfix; private final Set overriddenFunctions = SmartSet.create(); private final FunctionDescriptor original; private final Kind kind; @@ -69,7 +70,8 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo @Nullable JetType unsubstitutedReturnType, @Nullable Modality modality, @NotNull Visibility visibility, - boolean isOperator + boolean isOperator, + boolean isInfix ) { this.typeParameters = UtilsPackage.toReadOnlyList(typeParameters); this.unsubstitutedValueParameters = unsubstitutedValueParameters; @@ -77,6 +79,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo this.modality = modality; this.visibility = visibility; this.isOperator = isOperator; + this.isInfix = isInfix; this.extensionReceiverParameter = DescriptorFactory.createExtensionReceiverParameterForCallable(this, receiverParameterType); this.dispatchReceiverParameter = dispatchReceiverParameter; @@ -152,6 +155,17 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo return false; } + @Override + public boolean isInfix() { + if (isInfix) return true; + + for (FunctionDescriptor descriptor : overriddenFunctions) { + if (descriptor.isInfix()) return true; + } + + return false; + } + @Override public void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overriddenFunction) { overriddenFunctions.add((FunctionDescriptor) overriddenFunction); @@ -201,7 +215,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo if (originalSubstitutor.isEmpty()) { return this; } - return doSubstitute(originalSubstitutor, getContainingDeclaration(), modality, visibility, isOperator, getOriginal(), true, getKind()); + return doSubstitute(originalSubstitutor, getContainingDeclaration(), modality, visibility, isOperator, isInfix, getOriginal(), true, getKind()); } @Nullable @@ -210,12 +224,13 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo @NotNull Modality newModality, @NotNull Visibility newVisibility, boolean isOperator, + boolean isInfix, @Nullable FunctionDescriptor original, boolean copyOverrides, @NotNull Kind kind ) { return doSubstitute(originalSubstitutor, - newOwner, newModality, newVisibility, isOperator, original, copyOverrides, kind, + newOwner, newModality, newVisibility, isOperator, isInfix, original, copyOverrides, kind, getValueParameters(), getExtensionReceiverParameterType(), getReturnType() ); } @@ -233,6 +248,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo @NotNull Modality newModality, @NotNull Visibility newVisibility, boolean isOperator, + boolean isInfix, @Nullable FunctionDescriptor original, boolean copyOverrides, @NotNull Kind kind, @@ -294,7 +310,8 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo substitutedReturnType, newModality, newVisibility, - isOperator + isOperator, + isInfix ); if (copyOverrides) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyAccessorDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyAccessorDescriptorImpl.java index 78170674389..2b9da990326 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyAccessorDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyAccessorDescriptorImpl.java @@ -78,6 +78,11 @@ public abstract class PropertyAccessorDescriptorImpl extends DeclarationDescript return false; } + @Override + public boolean isInfix() { + return false; + } + @NotNull @Override public FunctionDescriptor substitute(@NotNull TypeSubstitutor substitutor) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ScriptCodeDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ScriptCodeDescriptor.java index 3217da8a932..c2f47e7345f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ScriptCodeDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ScriptCodeDescriptor.java @@ -37,7 +37,7 @@ public class ScriptCodeDescriptor extends FunctionDescriptorImpl { @NotNull List valueParameters, @NotNull JetType returnType) { super.initialize(null, dispatchReceiverParameter, Collections.emptyList(), valueParameters, returnType, - Modality.FINAL, Visibilities.INTERNAL, /*isOperator =*/ false); + Modality.FINAL, Visibilities.INTERNAL, false, false); } @NotNull diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SimpleFunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SimpleFunctionDescriptorImpl.java index 36dfb094a8e..9c8cd0214f4 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SimpleFunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SimpleFunctionDescriptorImpl.java @@ -59,10 +59,11 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme @Nullable JetType unsubstitutedReturnType, @Nullable Modality modality, @NotNull Visibility visibility, - boolean isOperator + boolean isOperator, + boolean isInfix ) { super.initialize(receiverParameterType, dispatchReceiverParameter, typeParameters, unsubstitutedValueParameters, - unsubstitutedReturnType, modality, visibility, isOperator); + unsubstitutedReturnType, modality, visibility, isOperator, isInfix); return this; } @@ -100,7 +101,7 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme boolean copyOverrides ) { return (SimpleFunctionDescriptorImpl) doSubstitute( - TypeSubstitutor.EMPTY, newOwner, modality, visibility, isOperator(), null, copyOverrides, kind + TypeSubstitutor.EMPTY, newOwner, modality, visibility, isOperator(), isInfix(), null, copyOverrides, kind ); } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index 94396721414..b26c5b38a16 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -461,10 +461,13 @@ internal class DescriptorRendererImpl( } } - private fun renderOperator(functionDescriptor: FunctionDescriptor, builder: StringBuilder) { + private fun renderAdditionalModifiers(functionDescriptor: FunctionDescriptor, builder: StringBuilder) { if (functionDescriptor.isOperator && functionDescriptor.overriddenDescriptors.none { it.isOperator }) { builder.append("operator ") } + if (functionDescriptor.isInfix && functionDescriptor.overriddenDescriptors.none { it.isInfix }) { + builder.append("infix ") + } } override fun render(declarationDescriptor: DeclarationDescriptor): String { @@ -554,7 +557,7 @@ internal class DescriptorRendererImpl( renderAnnotations(function, builder) renderVisibility(function.getVisibility(), builder) renderModalityForCallable(function, builder) - renderOperator(function, builder) + renderAdditionalModifiers(function, builder) renderOverride(function, builder) renderMemberKind(function, builder) diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorFactory.java b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorFactory.java index db974947e3a..81f96c33e0f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorFactory.java +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorFactory.java @@ -103,7 +103,7 @@ public class DescriptorFactory { return values.initialize(null, null, Collections.emptyList(), Collections.emptyList(), getBuiltIns(enumClass).getArrayType(Variance.INVARIANT, enumClass.getDefaultType()), - Modality.FINAL, Visibilities.PUBLIC, false); + Modality.FINAL, Visibilities.PUBLIC, false, false); } @NotNull @@ -117,7 +117,7 @@ public class DescriptorFactory { ); return valueOf.initialize(null, null, Collections.emptyList(), Collections.singletonList(parameterDescriptor), enumClass.getDefaultType(), - Modality.FINAL, Visibilities.PUBLIC, false); + Modality.FINAL, Visibilities.PUBLIC, false, false); } @Nullable diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java index a9f47706615..48245d0b4b1 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java @@ -424,6 +424,7 @@ public class ErrorUtils { createErrorType(""), Modality.OPEN, Visibilities.INTERNAL, + false, false ); return function; diff --git a/core/deserialization/src/descriptors.proto b/core/deserialization/src/descriptors.proto index 81c1e166815..b8d16393e01 100644 --- a/core/deserialization/src/descriptors.proto +++ b/core/deserialization/src/descriptors.proto @@ -238,6 +238,7 @@ message Callable { isConst lateinit isOperator + isInfix */ optional int32 flags = 1; diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java b/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java index 7e7372ef046..1337411b1e8 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java @@ -54,6 +54,8 @@ public class Flags { public static final FlagField IS_OPERATOR = FlagField.booleanAfter(LATE_INIT); + public static final FlagField IS_INFIX = FlagField.booleanAfter(IS_OPERATOR); + // Parameters public static final FlagField DECLARES_DEFAULT_VALUE = FlagField.booleanAfter(HAS_ANNOTATIONS); @@ -121,7 +123,8 @@ public class Flags { boolean hasConstant, boolean lateInit, boolean isConst, - boolean isOperator + boolean isOperator, + boolean isInfix ) { return HAS_ANNOTATIONS.toFlags(hasAnnotations) | MODALITY.toFlags(modality(modality)) @@ -134,6 +137,7 @@ public class Flags { | LATE_INIT.toFlags(lateInit) | IS_CONST.toFlags(isConst) | IS_OPERATOR.toFlags(isOperator) + | IS_INFIX.toFlags(isInfix) ; } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt index 5cfed041421..fad407d8ee9 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt @@ -151,7 +151,8 @@ public class MemberDeserializer(private val c: DeserializationContext) { local.typeDeserializer.type(proto.returnType), Deserialization.modality(Flags.MODALITY.get(proto.flags)), Deserialization.visibility(Flags.VISIBILITY.get(proto.flags)), - Flags.IS_OPERATOR.get(proto.flags) + Flags.IS_OPERATOR.get(proto.flags), + Flags.IS_INFIX.get(proto.flags) ) return function } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/CallableClsStubBuilder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/CallableClsStubBuilder.kt index f68383b3472..95c8a591d36 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/CallableClsStubBuilder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/CallableClsStubBuilder.kt @@ -99,7 +99,7 @@ private class CallableClsStubBuilder( val constModifiers = if (callableKind == CallableKind.VAL) listOf(CONST) else listOf() val additionalModifiers = when (callableKind) { - CallableKind.FUN -> arrayOf(OPERATOR) + CallableKind.FUN -> arrayOf(OPERATOR, INFIX) CallableKind.VAL, CallableKind.VAR -> arrayOf(LATEINIT) else -> emptyArray() } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt index 8009d1ff1bb..bdfbbcb375f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt @@ -202,6 +202,12 @@ enum class FlagsToModifiers { override fun getModifiers(flags: Int): JetModifierKeywordToken? { return if (Flags.IS_OPERATOR.get(flags)) JetTokens.OPERATOR_KEYWORD else null } + }, + + INFIX { + override fun getModifiers(flags: Int): JetModifierKeywordToken? { + return if (Flags.IS_INFIX.get(flags)) JetTokens.INFIX_KEYWORD else null + } }; abstract fun getModifiers(flags: Int): JetModifierKeywordToken? diff --git a/idea/idea-completion/testData/keywords/AfterClassProperty.kt b/idea/idea-completion/testData/keywords/AfterClassProperty.kt index f18484ed8cc..e0e0f98fc12 100644 --- a/idea/idea-completion/testData/keywords/AfterClassProperty.kt +++ b/idea/idea-completion/testData/keywords/AfterClassProperty.kt @@ -35,6 +35,7 @@ class MouseMovedEventArgs /*why?*/ // EXIST: companion object // EXIST: operator +// EXIST: infix // EXIST: sealed // EXIST: lateinit // EXIST: data diff --git a/idea/idea-completion/testData/keywords/AfterClasses.kt b/idea/idea-completion/testData/keywords/AfterClasses.kt index ec355117fc7..9e87000711f 100644 --- a/idea/idea-completion/testData/keywords/AfterClasses.kt +++ b/idea/idea-completion/testData/keywords/AfterClasses.kt @@ -38,6 +38,7 @@ class B { /*why?*/ // EXIST: companion object // EXIST: operator +// EXIST: infix // EXIST: sealed // EXIST: lateinit // EXIST: data diff --git a/idea/idea-completion/testData/keywords/AfterFuns.kt b/idea/idea-completion/testData/keywords/AfterFuns.kt index 4c350cf8085..5b96cf7e086 100644 --- a/idea/idea-completion/testData/keywords/AfterFuns.kt +++ b/idea/idea-completion/testData/keywords/AfterFuns.kt @@ -38,6 +38,7 @@ class A { /*why?*/ // EXIST: companion object // EXIST: operator +// EXIST: infix // EXIST: sealed // EXIST: lateinit // EXIST: data diff --git a/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt b/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt index 56c67da0dd0..50385f051fe 100644 --- a/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt +++ b/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt @@ -38,6 +38,7 @@ var a : Int /*why?*/ // EXIST: companion object // EXIST: operator +// EXIST: infix // EXIST: sealed // EXIST: lateinit // EXIST: data diff --git a/idea/idea-completion/testData/keywords/InClassBeforeFun.kt b/idea/idea-completion/testData/keywords/InClassBeforeFun.kt index 7dd1ab08453..372303cdb2e 100644 --- a/idea/idea-completion/testData/keywords/InClassBeforeFun.kt +++ b/idea/idea-completion/testData/keywords/InClassBeforeFun.kt @@ -36,6 +36,7 @@ public class Test { /*why?*/ // EXIST: companion object // EXIST: operator +// EXIST: infix // EXIST: sealed // EXIST: lateinit // EXIST: data diff --git a/idea/idea-completion/testData/keywords/InClassScope.kt b/idea/idea-completion/testData/keywords/InClassScope.kt index 5db8c9a85e1..a129836b77b 100644 --- a/idea/idea-completion/testData/keywords/InClassScope.kt +++ b/idea/idea-completion/testData/keywords/InClassScope.kt @@ -30,6 +30,7 @@ class TestClass { // EXIST: init // EXIST: companion object // EXIST: operator +// EXIST: infix // EXIST: sealed // EXIST: lateinit // EXIST: data diff --git a/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt b/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt index 4b33a82412e..06bc70f9f15 100644 --- a/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt +++ b/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt @@ -29,6 +29,7 @@ package Test /*why?*/ // EXIST: companion object // EXIST: operator +// EXIST: infix // EXIST: sealed // EXIST: lateinit // EXIST: data diff --git a/idea/idea-completion/testData/keywords/PropertyAccessors.kt b/idea/idea-completion/testData/keywords/PropertyAccessors.kt index 856f32a3edc..39dbf1db6d9 100644 --- a/idea/idea-completion/testData/keywords/PropertyAccessors.kt +++ b/idea/idea-completion/testData/keywords/PropertyAccessors.kt @@ -34,6 +34,7 @@ class Some { // EXIST: init // EXIST: companion object // EXIST: operator +// EXIST: infix // EXIST: sealed // EXIST: lateinit // EXIST: data diff --git a/idea/idea-completion/testData/keywords/PropertyAccessors2.kt b/idea/idea-completion/testData/keywords/PropertyAccessors2.kt index 21dcb1b4fb6..16cdaa6efcc 100644 --- a/idea/idea-completion/testData/keywords/PropertyAccessors2.kt +++ b/idea/idea-completion/testData/keywords/PropertyAccessors2.kt @@ -34,6 +34,7 @@ class Some { // EXIST: init // EXIST: companion object // EXIST: operator +// EXIST: infix // EXIST: sealed // EXIST: lateinit // EXIST: data diff --git a/idea/idea-completion/testData/keywords/PropertySetter.kt b/idea/idea-completion/testData/keywords/PropertySetter.kt index cb52f4b384a..2e94be6afb7 100644 --- a/idea/idea-completion/testData/keywords/PropertySetter.kt +++ b/idea/idea-completion/testData/keywords/PropertySetter.kt @@ -36,6 +36,7 @@ class Some { // EXIST: init // EXIST: companion object // EXIST: operator +// EXIST: infix // EXIST: sealed // EXIST: lateinit // EXIST: data diff --git a/idea/idea-completion/testData/keywords/TopScope.kt b/idea/idea-completion/testData/keywords/TopScope.kt index fafd5cd375b..a7fd580b01c 100644 --- a/idea/idea-completion/testData/keywords/TopScope.kt +++ b/idea/idea-completion/testData/keywords/TopScope.kt @@ -28,6 +28,7 @@ /*why?*/ // EXIST: companion object // EXIST: operator +// EXIST: infix // EXIST: sealed // EXIST: lateinit // EXIST: data diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt index 82fcb538a08..bb220ac81d7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt @@ -415,7 +415,8 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { ) } - return fakeFunction.initialize(null, null, typeParameters, Collections.emptyList(), null, null, Visibilities.INTERNAL, false) + return fakeFunction.initialize(null, null, typeParameters, Collections.emptyList(), null, + null, Visibilities.INTERNAL, false, false) } private fun renderTypeCandidates( diff --git a/idea/tests/org/jetbrains/kotlin/idea/stubs/ResolveByStubTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/stubs/ResolveByStubTestGenerated.java index e2b06eefcba..df6bd965994 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/stubs/ResolveByStubTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/stubs/ResolveByStubTestGenerated.java @@ -2155,6 +2155,12 @@ public class ResolveByStubTestGenerated extends AbstractResolveByStubTest { doTest(fileName); } + @TestMetadata("InfixKeyword.kt") + public void testInfixKeyword() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/InfixKeyword.kt"); + doTest(fileName); + } + @TestMetadata("InheritMethodsDifferentReturnTypesAndVisibilities.kt") public void testInheritMethodsDifferentReturnTypesAndVisibilities() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/InheritMethodsDifferentReturnTypesAndVisibilities.kt");