Add 'operator' keyword
This commit is contained in:
+2
-1
@@ -47,7 +47,8 @@ public class AccessorForConstructorDescriptor(
|
||||
copyValueParameters(calleeDescriptor),
|
||||
calleeDescriptor.returnType,
|
||||
Modality.FINAL,
|
||||
Visibilities.INTERNAL
|
||||
Visibilities.INTERNAL,
|
||||
false
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -47,7 +47,8 @@ public class AccessorForFunctionDescriptor extends AbstractAccessorForFunctionDe
|
||||
copyValueParameters(descriptor),
|
||||
descriptor.getReturnType(),
|
||||
Modality.FINAL,
|
||||
Visibilities.INTERNAL);
|
||||
Visibilities.INTERNAL,
|
||||
descriptor.isOperator());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -197,8 +197,8 @@ public class ClosureCodegen extends MemberCodegen<JetElement> {
|
||||
|
||||
descriptorForBridges
|
||||
.initialize(null, erasedInterfaceFunction.getDispatchReceiverParameter(), erasedInterfaceFunction.getTypeParameters(),
|
||||
erasedInterfaceFunction.getValueParameters(), erasedInterfaceFunction.getReturnType(), Modality.OPEN,
|
||||
erasedInterfaceFunction.getVisibility());
|
||||
erasedInterfaceFunction.getValueParameters(), erasedInterfaceFunction.getReturnType(),
|
||||
Modality.OPEN, erasedInterfaceFunction.getVisibility(), false);
|
||||
|
||||
descriptorForBridges.addOverriddenDescriptor(erasedInterfaceFunction);
|
||||
functionCodegen.generateBridges(descriptorForBridges);
|
||||
|
||||
@@ -337,7 +337,7 @@ public abstract class MemberCodegen<T extends JetElement/* TODO: & JetDeclaratio
|
||||
clInit.initialize(null, null, Collections.<TypeParameterDescriptor>emptyList(),
|
||||
Collections.<ValueParameterDescriptor>emptyList(),
|
||||
DescriptorUtilPackage.getModule(descriptor).getBuiltIns().getUnitType(),
|
||||
null, Visibilities.PRIVATE);
|
||||
null, Visibilities.PRIVATE, false);
|
||||
|
||||
this.clInit = new ExpressionCodegen(mv, new FrameMap(), Type.VOID_TYPE, context.intoFunction(clInit), state, this);
|
||||
}
|
||||
|
||||
@@ -150,7 +150,7 @@ public class PropertyReferenceCodegen(
|
||||
SourceElement.NO_SOURCE
|
||||
)
|
||||
fakeDescriptor.initialize(null, classDescriptor.getThisAsReceiverParameter(), emptyList(), emptyList(),
|
||||
classDescriptor.builtIns.getAnyType(), Modality.OPEN, Visibilities.PUBLIC)
|
||||
classDescriptor.builtIns.getAnyType(), Modality.OPEN, Visibilities.PUBLIC, false)
|
||||
|
||||
val fakeCodegen = ExpressionCodegen(
|
||||
this, FrameMap(), OBJECT_TYPE, context.intoFunction(fakeDescriptor), state, this@PropertyReferenceCodegen
|
||||
|
||||
@@ -162,8 +162,8 @@ public class SamWrapperCodegen {
|
||||
|
||||
descriptorForBridges
|
||||
.initialize(null, originalInterfaceErased.getDispatchReceiverParameter(), originalInterfaceErased.getTypeParameters(),
|
||||
originalInterfaceErased.getValueParameters(), originalInterfaceErased.getReturnType(), Modality.OPEN,
|
||||
originalInterfaceErased.getVisibility());
|
||||
originalInterfaceErased.getValueParameters(), originalInterfaceErased.getReturnType(),
|
||||
Modality.OPEN, originalInterfaceErased.getVisibility(), false);
|
||||
|
||||
descriptorForBridges.addOverriddenDescriptor(originalInterfaceErased);
|
||||
codegen.generateBridges(descriptorForBridges);
|
||||
|
||||
+4
-2
@@ -170,7 +170,8 @@ public class SingleAbstractMethodUtils {
|
||||
Arrays.asList(parameter),
|
||||
returnType,
|
||||
Modality.FINAL,
|
||||
samInterface.getVisibility()
|
||||
samInterface.getVisibility(),
|
||||
false
|
||||
);
|
||||
|
||||
return result;
|
||||
@@ -206,7 +207,8 @@ public class SingleAbstractMethodUtils {
|
||||
valueParameters,
|
||||
returnType,
|
||||
Modality.FINAL,
|
||||
original.getVisibility()
|
||||
original.getVisibility(),
|
||||
false
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
+2
-1
@@ -116,7 +116,8 @@ public class SignaturesPropagationData {
|
||||
autoValueParameters,
|
||||
autoReturnType,
|
||||
Modality.OPEN,
|
||||
Visibilities.PUBLIC
|
||||
Visibilities.PUBLIC,
|
||||
false
|
||||
);
|
||||
return autoMethodDescriptor;
|
||||
}
|
||||
|
||||
+3
-2
@@ -128,7 +128,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : JetScope by Jet
|
||||
|
||||
val visibility = syntheticExtensionVisibility(sourceFunction)
|
||||
|
||||
descriptor.initialize(receiverType, null, typeParameters, valueParameters, returnType, Modality.FINAL, visibility)
|
||||
descriptor.initialize(receiverType, null, typeParameters, valueParameters, returnType, Modality.FINAL, visibility, false)
|
||||
|
||||
return descriptor
|
||||
}
|
||||
@@ -148,6 +148,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : JetScope by Jet
|
||||
newOwner: DeclarationDescriptor,
|
||||
newModality: Modality,
|
||||
newVisibility: Visibility,
|
||||
newIsOperator: Boolean,
|
||||
original: FunctionDescriptor?,
|
||||
copyOverrides: Boolean,
|
||||
kind: CallableMemberDescriptor.Kind,
|
||||
@@ -156,7 +157,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : JetScope by Jet
|
||||
newReturnType: JetType
|
||||
): FunctionDescriptor? {
|
||||
val descriptor = super<SimpleFunctionDescriptorImpl>.doSubstitute(
|
||||
originalSubstitutor, newOwner, newModality, newVisibility, original,
|
||||
originalSubstitutor, newOwner, newModality, newVisibility, newIsOperator, original,
|
||||
copyOverrides, kind, newValueParameterDescriptors, newExtensionReceiverParameterType, newReturnType)
|
||||
as MyFunctionDescriptor? ?: return null
|
||||
|
||||
|
||||
@@ -176,6 +176,7 @@ public interface JetTokens {
|
||||
JetModifierKeywordToken EXTERNAL_KEYWORD = JetModifierKeywordToken.softKeywordModifier("external");
|
||||
JetModifierKeywordToken ANNOTATION_KEYWORD = JetModifierKeywordToken.softKeywordModifier("annotation");
|
||||
JetModifierKeywordToken CROSSINLINE_KEYWORD = JetModifierKeywordToken.softKeywordModifier("crossinline");
|
||||
JetModifierKeywordToken OPERATOR_KEYWORD = JetModifierKeywordToken.softKeywordModifier("operator");
|
||||
|
||||
JetModifierKeywordToken CONST_KEYWORD = JetModifierKeywordToken.softKeywordModifier("const");
|
||||
|
||||
@@ -196,7 +197,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
|
||||
ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD, CONST_KEYWORD, OPERATOR_KEYWORD
|
||||
);
|
||||
|
||||
/*
|
||||
@@ -210,7 +211,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
|
||||
CONST_KEYWORD, OPERATOR_KEYWORD
|
||||
};
|
||||
|
||||
// Please synchronize this array with org.jetbrains.kotlin.descriptors.annotations.ANNOTATION_MODIFIERS_FQ_NAMES
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.psi.stubs.KotlinFileStub;
|
||||
import java.io.IOException;
|
||||
|
||||
public class JetFileElementType extends IStubFileElementType<KotlinFileStub> {
|
||||
public static final int STUB_VERSION = 58;
|
||||
public static final int STUB_VERSION = 59;
|
||||
|
||||
private static final String NAME = "kotlin.FILE";
|
||||
|
||||
|
||||
@@ -241,7 +241,8 @@ public class DescriptorResolver {
|
||||
Collections.<ValueParameterDescriptor>emptyList(),
|
||||
returnType,
|
||||
Modality.FINAL,
|
||||
property.getVisibility()
|
||||
property.getVisibility(),
|
||||
false
|
||||
);
|
||||
|
||||
trace.record(BindingContext.DATA_CLASS_COMPONENT_FUNCTION, parameter, functionDescriptor);
|
||||
@@ -289,7 +290,8 @@ public class DescriptorResolver {
|
||||
parameterDescriptors,
|
||||
returnType,
|
||||
Modality.FINAL,
|
||||
Visibilities.PUBLIC
|
||||
Visibilities.PUBLIC,
|
||||
false
|
||||
);
|
||||
|
||||
trace.record(BindingContext.DATA_CLASS_COPY_FUNCTION, classDescriptor, functionDescriptor);
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl.create
|
||||
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
|
||||
import org.jetbrains.kotlin.diagnostics.Errors.*
|
||||
import org.jetbrains.kotlin.lexer.JetTokens
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.resolve.DescriptorResolver.*
|
||||
@@ -170,7 +171,8 @@ class FunctionDescriptorResolver(
|
||||
valueParameterDescriptors,
|
||||
returnType,
|
||||
modality,
|
||||
visibility
|
||||
visibility,
|
||||
function.hasModifier(JetTokens.OPERATOR_KEYWORD)
|
||||
)
|
||||
receiverType?.let { ForceResolveUtil.forceResolveAllContents(it.getAnnotations()) }
|
||||
for (valueParameterDescriptor in valueParameterDescriptors) {
|
||||
|
||||
@@ -103,7 +103,8 @@ public class FunctionDescriptorUtil {
|
||||
KotlinBuiltIns.getValueParameters(functionDescriptor, functionType),
|
||||
KotlinBuiltIns.getReturnTypeFromFunctionType(functionType),
|
||||
modality,
|
||||
visibility);
|
||||
visibility,
|
||||
false);
|
||||
}
|
||||
|
||||
public static <D extends CallableDescriptor> D alphaConvertTypeParameters(D candidate) {
|
||||
@@ -155,7 +156,8 @@ public class FunctionDescriptorUtil {
|
||||
parameters,
|
||||
function.getReturnType(),
|
||||
function.getModality(),
|
||||
function.getVisibility());
|
||||
function.getVisibility(),
|
||||
function.isOperator());
|
||||
return descriptor;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,7 +66,8 @@ public object ModifierCheckerCore {
|
||||
EXTERNAL_KEYWORD to EnumSet.of(FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER),
|
||||
ANNOTATION_KEYWORD to EnumSet.of(ANNOTATION_CLASS),
|
||||
CROSSINLINE_KEYWORD to EnumSet.of(VALUE_PARAMETER),
|
||||
CONST_KEYWORD to EnumSet.of(MEMBER_PROPERTY, TOP_LEVEL_PROPERTY)
|
||||
CONST_KEYWORD to EnumSet.of(MEMBER_PROPERTY, TOP_LEVEL_PROPERTY),
|
||||
OPERATOR_KEYWORD to EnumSet.of(FUNCTION)
|
||||
)
|
||||
|
||||
// NOTE: redundant targets must be possible!
|
||||
|
||||
@@ -129,7 +129,8 @@ object DynamicCallableDescriptors {
|
||||
createValueParameters(functionDescriptor, call),
|
||||
DynamicType,
|
||||
Modality.FINAL,
|
||||
Visibilities.PUBLIC
|
||||
Visibilities.PUBLIC,
|
||||
false
|
||||
)
|
||||
return functionDescriptor
|
||||
}
|
||||
|
||||
+2
-1
@@ -80,7 +80,8 @@ private fun createSynthesizedFunctionWithFirstParameterAsReceiver(descriptor: Fu
|
||||
},
|
||||
original.getReturnType(),
|
||||
original.getModality(),
|
||||
original.getVisibility()
|
||||
original.getVisibility(),
|
||||
original.isOperator
|
||||
)
|
||||
|
||||
return result
|
||||
|
||||
+2
-1
@@ -124,7 +124,8 @@ public class ControlStructureTypingUtils {
|
||||
valueParameters,
|
||||
type,
|
||||
Modality.FINAL,
|
||||
Visibilities.PUBLIC
|
||||
Visibilities.PUBLIC,
|
||||
false
|
||||
);
|
||||
return function;
|
||||
}
|
||||
|
||||
+7
-1
@@ -180,6 +180,11 @@ public class DescriptorSerializer {
|
||||
boolean hasConstant = false;
|
||||
boolean lateInit = false;
|
||||
boolean isConst = false;
|
||||
boolean isOperator = false;
|
||||
|
||||
if (descriptor instanceof FunctionDescriptor) {
|
||||
isOperator = ((FunctionDescriptor) descriptor).isOperator();
|
||||
}
|
||||
|
||||
if (descriptor instanceof PropertyDescriptor) {
|
||||
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
|
||||
@@ -235,7 +240,8 @@ public class DescriptorSerializer {
|
||||
hasSetter,
|
||||
hasConstant,
|
||||
lateInit,
|
||||
isConst
|
||||
isConst,
|
||||
isOperator
|
||||
));
|
||||
|
||||
for (TypeParameterDescriptor typeParameterDescriptor : descriptor.getTypeParameters()) {
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package test
|
||||
|
||||
class Example {
|
||||
operator fun plus(other: Example) {}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package test
|
||||
|
||||
public final class Example {
|
||||
/*primary*/ public constructor Example()
|
||||
public final operator fun plus(/*0*/ other: test.Example): kotlin.Unit
|
||||
}
|
||||
+1
-1
@@ -5,7 +5,7 @@ fun bar(f: Int.()->Unit) {
|
||||
|
||||
Resolved call:
|
||||
|
||||
Resulting descriptor: fun Int.invoke(): Unit defined in kotlin.Function1
|
||||
Resulting descriptor: operator fun Int.invoke(): Unit defined in kotlin.Function1
|
||||
|
||||
Explicit receiver kind = BOTH_RECEIVERS
|
||||
Dispatch receiver = f {[@kotlin.Extension] Function1<Int, Unit>}
|
||||
|
||||
@@ -5,7 +5,7 @@ fun bar(f: ()->Unit) {
|
||||
|
||||
Resolved call:
|
||||
|
||||
Resulting descriptor: fun invoke(): Unit defined in kotlin.Function0
|
||||
Resulting descriptor: operator fun invoke(): Unit defined in kotlin.Function0
|
||||
|
||||
Explicit receiver kind = DISPATCH_RECEIVER
|
||||
Dispatch receiver = f {Function0<Unit>}
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ interface A {
|
||||
|
||||
Resolved call:
|
||||
|
||||
Resulting descriptor: fun Int.invoke(): Unit defined in kotlin.Function1
|
||||
Resulting descriptor: operator fun Int.invoke(): Unit defined in kotlin.Function1
|
||||
|
||||
Explicit receiver kind = BOTH_RECEIVERS
|
||||
Dispatch receiver = foo {[@kotlin.Extension] Function1<Int, Unit>}
|
||||
|
||||
@@ -9,7 +9,7 @@ fun test(a: A) {
|
||||
|
||||
Resolved call:
|
||||
|
||||
Resulting descriptor: fun invoke(p1: Int): Int defined in kotlin.Function1
|
||||
Resulting descriptor: operator fun invoke(p1: Int): Int defined in kotlin.Function1
|
||||
|
||||
Explicit receiver kind = DISPATCH_RECEIVER
|
||||
Dispatch receiver = foo {Function1<Int, Int>}
|
||||
|
||||
@@ -4078,6 +4078,12 @@ public class LoadJavaTestGenerated extends AbstractLoadJavaTest {
|
||||
doTestCompiledKotlin(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("OperatorKeyword.kt")
|
||||
public void testOperatorKeyword() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/OperatorKeyword.kt");
|
||||
doTestCompiledKotlin(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("PropagateDeepSubclass.kt")
|
||||
public void testPropagateDeepSubclass() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/PropagateDeepSubclass.kt");
|
||||
|
||||
+6
@@ -2187,6 +2187,12 @@ public class JvmRuntimeDescriptorLoaderTestGenerated extends AbstractJvmRuntimeD
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("OperatorKeyword.kt")
|
||||
public void testOperatorKeyword() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/OperatorKeyword.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("PropagateDeepSubclass.kt")
|
||||
public void testPropagateDeepSubclass() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/PropagateDeepSubclass.kt");
|
||||
|
||||
Reference in New Issue
Block a user