Add 'operator' keyword
This commit is contained in:
+2
-1
@@ -47,7 +47,8 @@ public class AccessorForConstructorDescriptor(
|
|||||||
copyValueParameters(calleeDescriptor),
|
copyValueParameters(calleeDescriptor),
|
||||||
calleeDescriptor.returnType,
|
calleeDescriptor.returnType,
|
||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
Visibilities.INTERNAL
|
Visibilities.INTERNAL,
|
||||||
|
false
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -47,7 +47,8 @@ public class AccessorForFunctionDescriptor extends AbstractAccessorForFunctionDe
|
|||||||
copyValueParameters(descriptor),
|
copyValueParameters(descriptor),
|
||||||
descriptor.getReturnType(),
|
descriptor.getReturnType(),
|
||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
Visibilities.INTERNAL);
|
Visibilities.INTERNAL,
|
||||||
|
descriptor.isOperator());
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
@@ -197,8 +197,8 @@ public class ClosureCodegen extends MemberCodegen<JetElement> {
|
|||||||
|
|
||||||
descriptorForBridges
|
descriptorForBridges
|
||||||
.initialize(null, erasedInterfaceFunction.getDispatchReceiverParameter(), erasedInterfaceFunction.getTypeParameters(),
|
.initialize(null, erasedInterfaceFunction.getDispatchReceiverParameter(), erasedInterfaceFunction.getTypeParameters(),
|
||||||
erasedInterfaceFunction.getValueParameters(), erasedInterfaceFunction.getReturnType(), Modality.OPEN,
|
erasedInterfaceFunction.getValueParameters(), erasedInterfaceFunction.getReturnType(),
|
||||||
erasedInterfaceFunction.getVisibility());
|
Modality.OPEN, erasedInterfaceFunction.getVisibility(), false);
|
||||||
|
|
||||||
descriptorForBridges.addOverriddenDescriptor(erasedInterfaceFunction);
|
descriptorForBridges.addOverriddenDescriptor(erasedInterfaceFunction);
|
||||||
functionCodegen.generateBridges(descriptorForBridges);
|
functionCodegen.generateBridges(descriptorForBridges);
|
||||||
|
|||||||
@@ -337,7 +337,7 @@ public abstract class MemberCodegen<T extends JetElement/* TODO: & JetDeclaratio
|
|||||||
clInit.initialize(null, null, Collections.<TypeParameterDescriptor>emptyList(),
|
clInit.initialize(null, null, Collections.<TypeParameterDescriptor>emptyList(),
|
||||||
Collections.<ValueParameterDescriptor>emptyList(),
|
Collections.<ValueParameterDescriptor>emptyList(),
|
||||||
DescriptorUtilPackage.getModule(descriptor).getBuiltIns().getUnitType(),
|
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);
|
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
|
SourceElement.NO_SOURCE
|
||||||
)
|
)
|
||||||
fakeDescriptor.initialize(null, classDescriptor.getThisAsReceiverParameter(), emptyList(), emptyList(),
|
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(
|
val fakeCodegen = ExpressionCodegen(
|
||||||
this, FrameMap(), OBJECT_TYPE, context.intoFunction(fakeDescriptor), state, this@PropertyReferenceCodegen
|
this, FrameMap(), OBJECT_TYPE, context.intoFunction(fakeDescriptor), state, this@PropertyReferenceCodegen
|
||||||
|
|||||||
@@ -162,8 +162,8 @@ public class SamWrapperCodegen {
|
|||||||
|
|
||||||
descriptorForBridges
|
descriptorForBridges
|
||||||
.initialize(null, originalInterfaceErased.getDispatchReceiverParameter(), originalInterfaceErased.getTypeParameters(),
|
.initialize(null, originalInterfaceErased.getDispatchReceiverParameter(), originalInterfaceErased.getTypeParameters(),
|
||||||
originalInterfaceErased.getValueParameters(), originalInterfaceErased.getReturnType(), Modality.OPEN,
|
originalInterfaceErased.getValueParameters(), originalInterfaceErased.getReturnType(),
|
||||||
originalInterfaceErased.getVisibility());
|
Modality.OPEN, originalInterfaceErased.getVisibility(), false);
|
||||||
|
|
||||||
descriptorForBridges.addOverriddenDescriptor(originalInterfaceErased);
|
descriptorForBridges.addOverriddenDescriptor(originalInterfaceErased);
|
||||||
codegen.generateBridges(descriptorForBridges);
|
codegen.generateBridges(descriptorForBridges);
|
||||||
|
|||||||
+4
-2
@@ -170,7 +170,8 @@ public class SingleAbstractMethodUtils {
|
|||||||
Arrays.asList(parameter),
|
Arrays.asList(parameter),
|
||||||
returnType,
|
returnType,
|
||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
samInterface.getVisibility()
|
samInterface.getVisibility(),
|
||||||
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -206,7 +207,8 @@ public class SingleAbstractMethodUtils {
|
|||||||
valueParameters,
|
valueParameters,
|
||||||
returnType,
|
returnType,
|
||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
original.getVisibility()
|
original.getVisibility(),
|
||||||
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
+2
-1
@@ -116,7 +116,8 @@ public class SignaturesPropagationData {
|
|||||||
autoValueParameters,
|
autoValueParameters,
|
||||||
autoReturnType,
|
autoReturnType,
|
||||||
Modality.OPEN,
|
Modality.OPEN,
|
||||||
Visibilities.PUBLIC
|
Visibilities.PUBLIC,
|
||||||
|
false
|
||||||
);
|
);
|
||||||
return autoMethodDescriptor;
|
return autoMethodDescriptor;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -128,7 +128,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : JetScope by Jet
|
|||||||
|
|
||||||
val visibility = syntheticExtensionVisibility(sourceFunction)
|
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
|
return descriptor
|
||||||
}
|
}
|
||||||
@@ -148,6 +148,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : JetScope by Jet
|
|||||||
newOwner: DeclarationDescriptor,
|
newOwner: DeclarationDescriptor,
|
||||||
newModality: Modality,
|
newModality: Modality,
|
||||||
newVisibility: Visibility,
|
newVisibility: Visibility,
|
||||||
|
newIsOperator: Boolean,
|
||||||
original: FunctionDescriptor?,
|
original: FunctionDescriptor?,
|
||||||
copyOverrides: Boolean,
|
copyOverrides: Boolean,
|
||||||
kind: CallableMemberDescriptor.Kind,
|
kind: CallableMemberDescriptor.Kind,
|
||||||
@@ -156,7 +157,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : JetScope by Jet
|
|||||||
newReturnType: JetType
|
newReturnType: JetType
|
||||||
): FunctionDescriptor? {
|
): FunctionDescriptor? {
|
||||||
val descriptor = super<SimpleFunctionDescriptorImpl>.doSubstitute(
|
val descriptor = super<SimpleFunctionDescriptorImpl>.doSubstitute(
|
||||||
originalSubstitutor, newOwner, newModality, newVisibility, original,
|
originalSubstitutor, newOwner, newModality, newVisibility, newIsOperator, original,
|
||||||
copyOverrides, kind, newValueParameterDescriptors, newExtensionReceiverParameterType, newReturnType)
|
copyOverrides, kind, newValueParameterDescriptors, newExtensionReceiverParameterType, newReturnType)
|
||||||
as MyFunctionDescriptor? ?: return null
|
as MyFunctionDescriptor? ?: return null
|
||||||
|
|
||||||
|
|||||||
@@ -176,6 +176,7 @@ public interface JetTokens {
|
|||||||
JetModifierKeywordToken EXTERNAL_KEYWORD = JetModifierKeywordToken.softKeywordModifier("external");
|
JetModifierKeywordToken EXTERNAL_KEYWORD = JetModifierKeywordToken.softKeywordModifier("external");
|
||||||
JetModifierKeywordToken ANNOTATION_KEYWORD = JetModifierKeywordToken.softKeywordModifier("annotation");
|
JetModifierKeywordToken ANNOTATION_KEYWORD = JetModifierKeywordToken.softKeywordModifier("annotation");
|
||||||
JetModifierKeywordToken CROSSINLINE_KEYWORD = JetModifierKeywordToken.softKeywordModifier("crossinline");
|
JetModifierKeywordToken CROSSINLINE_KEYWORD = JetModifierKeywordToken.softKeywordModifier("crossinline");
|
||||||
|
JetModifierKeywordToken OPERATOR_KEYWORD = JetModifierKeywordToken.softKeywordModifier("operator");
|
||||||
|
|
||||||
JetModifierKeywordToken CONST_KEYWORD = JetModifierKeywordToken.softKeywordModifier("const");
|
JetModifierKeywordToken CONST_KEYWORD = JetModifierKeywordToken.softKeywordModifier("const");
|
||||||
|
|
||||||
@@ -196,7 +197,7 @@ public interface JetTokens {
|
|||||||
FIELD_KEYWORD, PROPERTY_KEYWORD, RECEIVER_KEYWORD, PARAM_KEYWORD, SPARAM_KEYWORD,
|
FIELD_KEYWORD, PROPERTY_KEYWORD, RECEIVER_KEYWORD, PARAM_KEYWORD, SPARAM_KEYWORD,
|
||||||
LATE_INIT_KEYWORD,
|
LATE_INIT_KEYWORD,
|
||||||
DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_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,
|
PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD,
|
||||||
REIFIED_KEYWORD, COMPANION_KEYWORD, SEALED_KEYWORD, LATE_INIT_KEYWORD,
|
REIFIED_KEYWORD, COMPANION_KEYWORD, SEALED_KEYWORD, LATE_INIT_KEYWORD,
|
||||||
DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, ANNOTATION_KEYWORD, CROSSINLINE_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
|
// 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;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class JetFileElementType extends IStubFileElementType<KotlinFileStub> {
|
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";
|
private static final String NAME = "kotlin.FILE";
|
||||||
|
|
||||||
|
|||||||
@@ -241,7 +241,8 @@ public class DescriptorResolver {
|
|||||||
Collections.<ValueParameterDescriptor>emptyList(),
|
Collections.<ValueParameterDescriptor>emptyList(),
|
||||||
returnType,
|
returnType,
|
||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
property.getVisibility()
|
property.getVisibility(),
|
||||||
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
trace.record(BindingContext.DATA_CLASS_COMPONENT_FUNCTION, parameter, functionDescriptor);
|
trace.record(BindingContext.DATA_CLASS_COMPONENT_FUNCTION, parameter, functionDescriptor);
|
||||||
@@ -289,7 +290,8 @@ public class DescriptorResolver {
|
|||||||
parameterDescriptors,
|
parameterDescriptors,
|
||||||
returnType,
|
returnType,
|
||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
Visibilities.PUBLIC
|
Visibilities.PUBLIC,
|
||||||
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
trace.record(BindingContext.DATA_CLASS_COPY_FUNCTION, classDescriptor, functionDescriptor);
|
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.descriptors.impl.ValueParameterDescriptorImpl
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
|
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors.*
|
import org.jetbrains.kotlin.diagnostics.Errors.*
|
||||||
|
import org.jetbrains.kotlin.lexer.JetTokens
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorResolver.*
|
import org.jetbrains.kotlin.resolve.DescriptorResolver.*
|
||||||
@@ -170,7 +171,8 @@ class FunctionDescriptorResolver(
|
|||||||
valueParameterDescriptors,
|
valueParameterDescriptors,
|
||||||
returnType,
|
returnType,
|
||||||
modality,
|
modality,
|
||||||
visibility
|
visibility,
|
||||||
|
function.hasModifier(JetTokens.OPERATOR_KEYWORD)
|
||||||
)
|
)
|
||||||
receiverType?.let { ForceResolveUtil.forceResolveAllContents(it.getAnnotations()) }
|
receiverType?.let { ForceResolveUtil.forceResolveAllContents(it.getAnnotations()) }
|
||||||
for (valueParameterDescriptor in valueParameterDescriptors) {
|
for (valueParameterDescriptor in valueParameterDescriptors) {
|
||||||
|
|||||||
@@ -103,7 +103,8 @@ public class FunctionDescriptorUtil {
|
|||||||
KotlinBuiltIns.getValueParameters(functionDescriptor, functionType),
|
KotlinBuiltIns.getValueParameters(functionDescriptor, functionType),
|
||||||
KotlinBuiltIns.getReturnTypeFromFunctionType(functionType),
|
KotlinBuiltIns.getReturnTypeFromFunctionType(functionType),
|
||||||
modality,
|
modality,
|
||||||
visibility);
|
visibility,
|
||||||
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <D extends CallableDescriptor> D alphaConvertTypeParameters(D candidate) {
|
public static <D extends CallableDescriptor> D alphaConvertTypeParameters(D candidate) {
|
||||||
@@ -155,7 +156,8 @@ public class FunctionDescriptorUtil {
|
|||||||
parameters,
|
parameters,
|
||||||
function.getReturnType(),
|
function.getReturnType(),
|
||||||
function.getModality(),
|
function.getModality(),
|
||||||
function.getVisibility());
|
function.getVisibility(),
|
||||||
|
function.isOperator());
|
||||||
return descriptor;
|
return descriptor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,8 @@ public object ModifierCheckerCore {
|
|||||||
EXTERNAL_KEYWORD to EnumSet.of(FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER),
|
EXTERNAL_KEYWORD to EnumSet.of(FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER),
|
||||||
ANNOTATION_KEYWORD to EnumSet.of(ANNOTATION_CLASS),
|
ANNOTATION_KEYWORD to EnumSet.of(ANNOTATION_CLASS),
|
||||||
CROSSINLINE_KEYWORD to EnumSet.of(VALUE_PARAMETER),
|
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!
|
// NOTE: redundant targets must be possible!
|
||||||
|
|||||||
@@ -129,7 +129,8 @@ object DynamicCallableDescriptors {
|
|||||||
createValueParameters(functionDescriptor, call),
|
createValueParameters(functionDescriptor, call),
|
||||||
DynamicType,
|
DynamicType,
|
||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
Visibilities.PUBLIC
|
Visibilities.PUBLIC,
|
||||||
|
false
|
||||||
)
|
)
|
||||||
return functionDescriptor
|
return functionDescriptor
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -80,7 +80,8 @@ private fun createSynthesizedFunctionWithFirstParameterAsReceiver(descriptor: Fu
|
|||||||
},
|
},
|
||||||
original.getReturnType(),
|
original.getReturnType(),
|
||||||
original.getModality(),
|
original.getModality(),
|
||||||
original.getVisibility()
|
original.getVisibility(),
|
||||||
|
original.isOperator
|
||||||
)
|
)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|||||||
+2
-1
@@ -124,7 +124,8 @@ public class ControlStructureTypingUtils {
|
|||||||
valueParameters,
|
valueParameters,
|
||||||
type,
|
type,
|
||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
Visibilities.PUBLIC
|
Visibilities.PUBLIC,
|
||||||
|
false
|
||||||
);
|
);
|
||||||
return function;
|
return function;
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-1
@@ -180,6 +180,11 @@ public class DescriptorSerializer {
|
|||||||
boolean hasConstant = false;
|
boolean hasConstant = false;
|
||||||
boolean lateInit = false;
|
boolean lateInit = false;
|
||||||
boolean isConst = false;
|
boolean isConst = false;
|
||||||
|
boolean isOperator = false;
|
||||||
|
|
||||||
|
if (descriptor instanceof FunctionDescriptor) {
|
||||||
|
isOperator = ((FunctionDescriptor) descriptor).isOperator();
|
||||||
|
}
|
||||||
|
|
||||||
if (descriptor instanceof PropertyDescriptor) {
|
if (descriptor instanceof PropertyDescriptor) {
|
||||||
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
|
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
|
||||||
@@ -235,7 +240,8 @@ public class DescriptorSerializer {
|
|||||||
hasSetter,
|
hasSetter,
|
||||||
hasConstant,
|
hasConstant,
|
||||||
lateInit,
|
lateInit,
|
||||||
isConst
|
isConst,
|
||||||
|
isOperator
|
||||||
));
|
));
|
||||||
|
|
||||||
for (TypeParameterDescriptor typeParameterDescriptor : descriptor.getTypeParameters()) {
|
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:
|
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
|
Explicit receiver kind = BOTH_RECEIVERS
|
||||||
Dispatch receiver = f {[@kotlin.Extension] Function1<Int, Unit>}
|
Dispatch receiver = f {[@kotlin.Extension] Function1<Int, Unit>}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ fun bar(f: ()->Unit) {
|
|||||||
|
|
||||||
Resolved call:
|
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
|
Explicit receiver kind = DISPATCH_RECEIVER
|
||||||
Dispatch receiver = f {Function0<Unit>}
|
Dispatch receiver = f {Function0<Unit>}
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ interface A {
|
|||||||
|
|
||||||
Resolved call:
|
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
|
Explicit receiver kind = BOTH_RECEIVERS
|
||||||
Dispatch receiver = foo {[@kotlin.Extension] Function1<Int, Unit>}
|
Dispatch receiver = foo {[@kotlin.Extension] Function1<Int, Unit>}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ fun test(a: A) {
|
|||||||
|
|
||||||
Resolved call:
|
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
|
Explicit receiver kind = DISPATCH_RECEIVER
|
||||||
Dispatch receiver = foo {Function1<Int, Int>}
|
Dispatch receiver = foo {Function1<Int, Int>}
|
||||||
|
|||||||
@@ -4078,6 +4078,12 @@ public class LoadJavaTestGenerated extends AbstractLoadJavaTest {
|
|||||||
doTestCompiledKotlin(fileName);
|
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")
|
@TestMetadata("PropagateDeepSubclass.kt")
|
||||||
public void testPropagateDeepSubclass() throws Exception {
|
public void testPropagateDeepSubclass() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/PropagateDeepSubclass.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/PropagateDeepSubclass.kt");
|
||||||
|
|||||||
+6
@@ -2187,6 +2187,12 @@ public class JvmRuntimeDescriptorLoaderTestGenerated extends AbstractJvmRuntimeD
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("PropagateDeepSubclass.kt")
|
||||||
public void testPropagateDeepSubclass() throws Exception {
|
public void testPropagateDeepSubclass() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/PropagateDeepSubclass.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/PropagateDeepSubclass.kt");
|
||||||
|
|||||||
+2
-1
@@ -109,7 +109,8 @@ public class JavaConstructorDescriptor extends ConstructorDescriptorImpl impleme
|
|||||||
DescriptorsPackage.createEnhancedValueParameters(enhancedValueParametersTypes, getValueParameters(), enhanced),
|
DescriptorsPackage.createEnhancedValueParameters(enhancedValueParametersTypes, getValueParameters(), enhanced),
|
||||||
enhancedReturnType,
|
enhancedReturnType,
|
||||||
getModality(),
|
getModality(),
|
||||||
getVisibility()
|
getVisibility(),
|
||||||
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
return enhanced;
|
return enhanced;
|
||||||
|
|||||||
+1
-1
@@ -122,7 +122,7 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement
|
|||||||
// 1. creates full copy of descriptor
|
// 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.
|
// 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(
|
JavaMethodDescriptor enhancedMethod = (JavaMethodDescriptor) doSubstitute(
|
||||||
TypeSubstitutor.EMPTY, getContainingDeclaration(), getModality(), getVisibility(), getOriginal(),
|
TypeSubstitutor.EMPTY, getContainingDeclaration(), getModality(), getVisibility(), false, getOriginal(),
|
||||||
/* copyOverrides = */ true, getKind(),
|
/* copyOverrides = */ true, getKind(),
|
||||||
enhancedValueParameters, enhancedReceiverType, enhancedReturnType
|
enhancedValueParameters, enhancedReceiverType, enhancedReturnType
|
||||||
);
|
);
|
||||||
|
|||||||
+2
-1
@@ -126,7 +126,8 @@ public abstract class LazyJavaScope(
|
|||||||
effectiveSignature.getValueParameters(),
|
effectiveSignature.getValueParameters(),
|
||||||
effectiveSignature.getReturnType(),
|
effectiveSignature.getReturnType(),
|
||||||
Modality.convertFromFlags(method.isAbstract(), !method.isFinal()),
|
Modality.convertFromFlags(method.isAbstract(), !method.isFinal()),
|
||||||
method.getVisibility()
|
method.getVisibility(),
|
||||||
|
false
|
||||||
)
|
)
|
||||||
|
|
||||||
functionDescriptorImpl.setParameterNamesStatus(effectiveSignature.hasStableParameterNames(), valueParameters.hasSynthesizedNames)
|
functionDescriptorImpl.setParameterNamesStatus(effectiveSignature.hasStableParameterNames(), valueParameters.hasSynthesizedNames)
|
||||||
|
|||||||
+2
-1
@@ -60,7 +60,8 @@ public class FunctionInvokeDescriptor private constructor(
|
|||||||
.map { createValueParameter(result, it.index, it.value) },
|
.map { createValueParameter(result, it.index, it.value) },
|
||||||
typeParameters.last().getDefaultType(),
|
typeParameters.last().getDefaultType(),
|
||||||
Modality.ABSTRACT,
|
Modality.ABSTRACT,
|
||||||
Visibilities.PUBLIC
|
Visibilities.PUBLIC,
|
||||||
|
true
|
||||||
)
|
)
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,4 +40,6 @@ public interface FunctionDescriptor extends CallableMemberDescriptor {
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
FunctionDescriptor copy(DeclarationDescriptor newOwner, Modality modality, Visibility visibility, Kind kind, boolean copyOverrides);
|
FunctionDescriptor copy(DeclarationDescriptor newOwner, Modality modality, Visibility visibility, Kind kind, boolean copyOverrides);
|
||||||
|
|
||||||
|
boolean isOperator();
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -59,7 +59,8 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements
|
|||||||
@NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters,
|
@NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters,
|
||||||
@NotNull Visibility visibility
|
@NotNull Visibility visibility
|
||||||
) {
|
) {
|
||||||
super.initialize(null, calculateDispatchReceiverParameter(), typeParameters, unsubstitutedValueParameters, null, Modality.FINAL, visibility);
|
super.initialize(null, calculateDispatchReceiverParameter(), typeParameters, unsubstitutedValueParameters, null,
|
||||||
|
Modality.FINAL, visibility, false);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+21
-4
@@ -42,6 +42,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
private ReceiverParameterDescriptor dispatchReceiverParameter;
|
private ReceiverParameterDescriptor dispatchReceiverParameter;
|
||||||
private Modality modality;
|
private Modality modality;
|
||||||
private Visibility visibility = Visibilities.UNKNOWN;
|
private Visibility visibility = Visibilities.UNKNOWN;
|
||||||
|
private boolean isOperator;
|
||||||
private final Set<FunctionDescriptor> overriddenFunctions = SmartSet.create();
|
private final Set<FunctionDescriptor> overriddenFunctions = SmartSet.create();
|
||||||
private final FunctionDescriptor original;
|
private final FunctionDescriptor original;
|
||||||
private final Kind kind;
|
private final Kind kind;
|
||||||
@@ -67,13 +68,15 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
@NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters,
|
@NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters,
|
||||||
@Nullable JetType unsubstitutedReturnType,
|
@Nullable JetType unsubstitutedReturnType,
|
||||||
@Nullable Modality modality,
|
@Nullable Modality modality,
|
||||||
@NotNull Visibility visibility
|
@NotNull Visibility visibility,
|
||||||
|
boolean isOperator
|
||||||
) {
|
) {
|
||||||
this.typeParameters = UtilsPackage.toReadOnlyList(typeParameters);
|
this.typeParameters = UtilsPackage.toReadOnlyList(typeParameters);
|
||||||
this.unsubstitutedValueParameters = unsubstitutedValueParameters;
|
this.unsubstitutedValueParameters = unsubstitutedValueParameters;
|
||||||
this.unsubstitutedReturnType = unsubstitutedReturnType;
|
this.unsubstitutedReturnType = unsubstitutedReturnType;
|
||||||
this.modality = modality;
|
this.modality = modality;
|
||||||
this.visibility = visibility;
|
this.visibility = visibility;
|
||||||
|
this.isOperator = isOperator;
|
||||||
this.extensionReceiverParameter = DescriptorFactory.createExtensionReceiverParameterForCallable(this, receiverParameterType);
|
this.extensionReceiverParameter = DescriptorFactory.createExtensionReceiverParameterForCallable(this, receiverParameterType);
|
||||||
this.dispatchReceiverParameter = dispatchReceiverParameter;
|
this.dispatchReceiverParameter = dispatchReceiverParameter;
|
||||||
|
|
||||||
@@ -138,6 +141,17 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
return visibility;
|
return visibility;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOperator() {
|
||||||
|
if (isOperator) return true;
|
||||||
|
|
||||||
|
for (FunctionDescriptor descriptor : overriddenFunctions) {
|
||||||
|
if (descriptor.isOperator()) return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overriddenFunction) {
|
public void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overriddenFunction) {
|
||||||
overriddenFunctions.add((FunctionDescriptor) overriddenFunction);
|
overriddenFunctions.add((FunctionDescriptor) overriddenFunction);
|
||||||
@@ -187,7 +201,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
if (originalSubstitutor.isEmpty()) {
|
if (originalSubstitutor.isEmpty()) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
return doSubstitute(originalSubstitutor, getContainingDeclaration(), modality, visibility, getOriginal(), true, getKind());
|
return doSubstitute(originalSubstitutor, getContainingDeclaration(), modality, visibility, isOperator, getOriginal(), true, getKind());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -195,12 +209,13 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
@NotNull DeclarationDescriptor newOwner,
|
@NotNull DeclarationDescriptor newOwner,
|
||||||
@NotNull Modality newModality,
|
@NotNull Modality newModality,
|
||||||
@NotNull Visibility newVisibility,
|
@NotNull Visibility newVisibility,
|
||||||
|
boolean isOperator,
|
||||||
@Nullable FunctionDescriptor original,
|
@Nullable FunctionDescriptor original,
|
||||||
boolean copyOverrides,
|
boolean copyOverrides,
|
||||||
@NotNull Kind kind
|
@NotNull Kind kind
|
||||||
) {
|
) {
|
||||||
return doSubstitute(originalSubstitutor,
|
return doSubstitute(originalSubstitutor,
|
||||||
newOwner, newModality, newVisibility, original, copyOverrides, kind,
|
newOwner, newModality, newVisibility, isOperator, original, copyOverrides, kind,
|
||||||
getValueParameters(), getExtensionReceiverParameterType(), getReturnType()
|
getValueParameters(), getExtensionReceiverParameterType(), getReturnType()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -217,6 +232,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
@NotNull DeclarationDescriptor newOwner,
|
@NotNull DeclarationDescriptor newOwner,
|
||||||
@NotNull Modality newModality,
|
@NotNull Modality newModality,
|
||||||
@NotNull Visibility newVisibility,
|
@NotNull Visibility newVisibility,
|
||||||
|
boolean isOperator,
|
||||||
@Nullable FunctionDescriptor original,
|
@Nullable FunctionDescriptor original,
|
||||||
boolean copyOverrides,
|
boolean copyOverrides,
|
||||||
@NotNull Kind kind,
|
@NotNull Kind kind,
|
||||||
@@ -277,7 +293,8 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
substitutedValueParameters,
|
substitutedValueParameters,
|
||||||
substitutedReturnType,
|
substitutedReturnType,
|
||||||
newModality,
|
newModality,
|
||||||
newVisibility
|
newVisibility,
|
||||||
|
isOperator
|
||||||
);
|
);
|
||||||
|
|
||||||
if (copyOverrides) {
|
if (copyOverrides) {
|
||||||
|
|||||||
+5
@@ -73,6 +73,11 @@ public abstract class PropertyAccessorDescriptorImpl extends DeclarationDescript
|
|||||||
return kind;
|
return kind;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOperator() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public FunctionDescriptor substitute(@NotNull TypeSubstitutor substitutor) {
|
public FunctionDescriptor substitute(@NotNull TypeSubstitutor substitutor) {
|
||||||
|
|||||||
+2
-1
@@ -36,7 +36,8 @@ public class ScriptCodeDescriptor extends FunctionDescriptorImpl {
|
|||||||
@NotNull ReceiverParameterDescriptor dispatchReceiverParameter,
|
@NotNull ReceiverParameterDescriptor dispatchReceiverParameter,
|
||||||
@NotNull List<ValueParameterDescriptor> valueParameters,
|
@NotNull List<ValueParameterDescriptor> valueParameters,
|
||||||
@NotNull JetType returnType) {
|
@NotNull JetType returnType) {
|
||||||
super.initialize(null, dispatchReceiverParameter, Collections.<TypeParameterDescriptor>emptyList(), valueParameters, returnType, Modality.FINAL, Visibilities.INTERNAL);
|
super.initialize(null, dispatchReceiverParameter, Collections.<TypeParameterDescriptor>emptyList(), valueParameters, returnType,
|
||||||
|
Modality.FINAL, Visibilities.INTERNAL, /*isOperator =*/ false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
+4
-3
@@ -58,10 +58,11 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme
|
|||||||
@NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters,
|
@NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters,
|
||||||
@Nullable JetType unsubstitutedReturnType,
|
@Nullable JetType unsubstitutedReturnType,
|
||||||
@Nullable Modality modality,
|
@Nullable Modality modality,
|
||||||
@NotNull Visibility visibility
|
@NotNull Visibility visibility,
|
||||||
|
boolean isOperator
|
||||||
) {
|
) {
|
||||||
super.initialize(receiverParameterType, dispatchReceiverParameter, typeParameters, unsubstitutedValueParameters,
|
super.initialize(receiverParameterType, dispatchReceiverParameter, typeParameters, unsubstitutedValueParameters,
|
||||||
unsubstitutedReturnType, modality, visibility);
|
unsubstitutedReturnType, modality, visibility, isOperator);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,7 +100,7 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme
|
|||||||
boolean copyOverrides
|
boolean copyOverrides
|
||||||
) {
|
) {
|
||||||
return (SimpleFunctionDescriptorImpl) doSubstitute(
|
return (SimpleFunctionDescriptorImpl) doSubstitute(
|
||||||
TypeSubstitutor.EMPTY, newOwner, modality, visibility, null, copyOverrides, kind
|
TypeSubstitutor.EMPTY, newOwner, modality, visibility, isOperator(), null, copyOverrides, kind
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -461,6 +461,12 @@ internal class DescriptorRendererImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun renderOperator(functionDescriptor: FunctionDescriptor, builder: StringBuilder) {
|
||||||
|
if (functionDescriptor.isOperator && functionDescriptor.overriddenDescriptors.none { it.isOperator }) {
|
||||||
|
builder.append("operator ")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun render(declarationDescriptor: DeclarationDescriptor): String {
|
override fun render(declarationDescriptor: DeclarationDescriptor): String {
|
||||||
return StringBuilder {
|
return StringBuilder {
|
||||||
declarationDescriptor.accept(RenderDeclarationDescriptorVisitor(), this)
|
declarationDescriptor.accept(RenderDeclarationDescriptorVisitor(), this)
|
||||||
@@ -548,6 +554,7 @@ internal class DescriptorRendererImpl(
|
|||||||
renderAnnotations(function, builder)
|
renderAnnotations(function, builder)
|
||||||
renderVisibility(function.getVisibility(), builder)
|
renderVisibility(function.getVisibility(), builder)
|
||||||
renderModalityForCallable(function, builder)
|
renderModalityForCallable(function, builder)
|
||||||
|
renderOperator(function, builder)
|
||||||
renderOverride(function, builder)
|
renderOverride(function, builder)
|
||||||
renderMemberKind(function, builder)
|
renderMemberKind(function, builder)
|
||||||
|
|
||||||
|
|||||||
@@ -102,8 +102,8 @@ public class DescriptorFactory {
|
|||||||
CallableMemberDescriptor.Kind.SYNTHESIZED, enumClass.getSource());
|
CallableMemberDescriptor.Kind.SYNTHESIZED, enumClass.getSource());
|
||||||
return values.initialize(null, null, Collections.<TypeParameterDescriptor>emptyList(),
|
return values.initialize(null, null, Collections.<TypeParameterDescriptor>emptyList(),
|
||||||
Collections.<ValueParameterDescriptor>emptyList(),
|
Collections.<ValueParameterDescriptor>emptyList(),
|
||||||
getBuiltIns(enumClass).getArrayType(Variance.INVARIANT, enumClass.getDefaultType()), Modality.FINAL,
|
getBuiltIns(enumClass).getArrayType(Variance.INVARIANT, enumClass.getDefaultType()),
|
||||||
Visibilities.PUBLIC);
|
Modality.FINAL, Visibilities.PUBLIC, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -116,8 +116,8 @@ public class DescriptorFactory {
|
|||||||
enumClass.getSource()
|
enumClass.getSource()
|
||||||
);
|
);
|
||||||
return valueOf.initialize(null, null, Collections.<TypeParameterDescriptor>emptyList(),
|
return valueOf.initialize(null, null, Collections.<TypeParameterDescriptor>emptyList(),
|
||||||
Collections.singletonList(parameterDescriptor), enumClass.getDefaultType(), Modality.FINAL,
|
Collections.singletonList(parameterDescriptor), enumClass.getDefaultType(),
|
||||||
Visibilities.PUBLIC);
|
Modality.FINAL, Visibilities.PUBLIC, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
@@ -423,7 +423,8 @@ public class ErrorUtils {
|
|||||||
Collections.<ValueParameterDescriptor>emptyList(), // TODO
|
Collections.<ValueParameterDescriptor>emptyList(), // TODO
|
||||||
createErrorType("<ERROR FUNCTION RETURN TYPE>"),
|
createErrorType("<ERROR FUNCTION RETURN TYPE>"),
|
||||||
Modality.OPEN,
|
Modality.OPEN,
|
||||||
Visibilities.INTERNAL
|
Visibilities.INTERNAL,
|
||||||
|
false
|
||||||
);
|
);
|
||||||
return function;
|
return function;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -252,6 +252,7 @@ message Callable {
|
|||||||
hasConstant
|
hasConstant
|
||||||
isConst
|
isConst
|
||||||
lateinit
|
lateinit
|
||||||
|
isOperator
|
||||||
*/
|
*/
|
||||||
optional int32 flags = 1;
|
optional int32 flags = 1;
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,8 @@ public class Flags {
|
|||||||
|
|
||||||
public static final FlagField<Boolean> LATE_INIT = FlagField.booleanAfter(IS_CONST);
|
public static final FlagField<Boolean> LATE_INIT = FlagField.booleanAfter(IS_CONST);
|
||||||
|
|
||||||
|
public static final FlagField<Boolean> IS_OPERATOR = FlagField.booleanAfter(LATE_INIT);
|
||||||
|
|
||||||
// Parameters
|
// Parameters
|
||||||
|
|
||||||
public static final FlagField<Boolean> DECLARES_DEFAULT_VALUE = FlagField.booleanAfter(HAS_ANNOTATIONS);
|
public static final FlagField<Boolean> DECLARES_DEFAULT_VALUE = FlagField.booleanAfter(HAS_ANNOTATIONS);
|
||||||
@@ -118,7 +120,8 @@ public class Flags {
|
|||||||
boolean hasSetter,
|
boolean hasSetter,
|
||||||
boolean hasConstant,
|
boolean hasConstant,
|
||||||
boolean lateInit,
|
boolean lateInit,
|
||||||
boolean isConst
|
boolean isConst,
|
||||||
|
boolean isOperator
|
||||||
) {
|
) {
|
||||||
return HAS_ANNOTATIONS.toFlags(hasAnnotations)
|
return HAS_ANNOTATIONS.toFlags(hasAnnotations)
|
||||||
| MODALITY.toFlags(modality(modality))
|
| MODALITY.toFlags(modality(modality))
|
||||||
@@ -130,6 +133,7 @@ public class Flags {
|
|||||||
| HAS_CONSTANT.toFlags(hasConstant)
|
| HAS_CONSTANT.toFlags(hasConstant)
|
||||||
| LATE_INIT.toFlags(lateInit)
|
| LATE_INIT.toFlags(lateInit)
|
||||||
| IS_CONST.toFlags(isConst)
|
| IS_CONST.toFlags(isConst)
|
||||||
|
| IS_OPERATOR.toFlags(isOperator)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -148,9 +148,10 @@ public class MemberDeserializer(private val c: DeserializationContext) {
|
|||||||
getDispatchReceiverParameter(),
|
getDispatchReceiverParameter(),
|
||||||
local.typeDeserializer.ownTypeParameters,
|
local.typeDeserializer.ownTypeParameters,
|
||||||
local.memberDeserializer.valueParameters(proto, AnnotatedCallableKind.FUNCTION),
|
local.memberDeserializer.valueParameters(proto, AnnotatedCallableKind.FUNCTION),
|
||||||
local.typeDeserializer.type(proto.getReturnType()),
|
local.typeDeserializer.type(proto.returnType),
|
||||||
Deserialization.modality(Flags.MODALITY.get(proto.getFlags())),
|
Deserialization.modality(Flags.MODALITY.get(proto.flags)),
|
||||||
Deserialization.visibility(Flags.VISIBILITY.get(proto.getFlags()))
|
Deserialization.visibility(Flags.VISIBILITY.get(proto.flags)),
|
||||||
|
Flags.IS_OPERATOR.get(proto.flags)
|
||||||
)
|
)
|
||||||
return function
|
return function
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-1
@@ -98,7 +98,13 @@ private class CallableClsStubBuilder(
|
|||||||
val modalityModifiers = if (isModalityIrrelevant) listOf() else listOf(MODALITY)
|
val modalityModifiers = if (isModalityIrrelevant) listOf() else listOf(MODALITY)
|
||||||
val constModifiers = if (callableKind == CallableKind.VAL) listOf(CONST) else listOf()
|
val constModifiers = if (callableKind == CallableKind.VAL) listOf(CONST) else listOf()
|
||||||
|
|
||||||
val relevantModifiers = listOf(VISIBILITY) + constModifiers + modalityModifiers
|
val additionalModifiers = when (callableKind) {
|
||||||
|
CallableKind.FUN -> arrayOf(OPERATOR)
|
||||||
|
CallableKind.VAL, CallableKind.VAR -> arrayOf(LATEINIT)
|
||||||
|
else -> emptyArray<FlagsToModifiers>()
|
||||||
|
}
|
||||||
|
|
||||||
|
val relevantModifiers = listOf(VISIBILITY) + constModifiers + modalityModifiers + additionalModifiers
|
||||||
val modifierListStubImpl = createModifierListStubForDeclaration(
|
val modifierListStubImpl = createModifierListStubForDeclaration(
|
||||||
callableStub, callableProto.getFlags(), relevantModifiers
|
callableStub, callableProto.getFlags(), relevantModifiers
|
||||||
)
|
)
|
||||||
|
|||||||
+12
@@ -191,6 +191,18 @@ enum class FlagsToModifiers {
|
|||||||
override fun getModifiers(flags: Int): JetModifierKeywordToken? {
|
override fun getModifiers(flags: Int): JetModifierKeywordToken? {
|
||||||
return if (Flags.IS_CONST.get(flags)) JetTokens.CONST_KEYWORD else null
|
return if (Flags.IS_CONST.get(flags)) JetTokens.CONST_KEYWORD else null
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
LATEINIT {
|
||||||
|
override fun getModifiers(flags: Int): JetModifierKeywordToken? {
|
||||||
|
return if (Flags.LATE_INIT.get(flags)) JetTokens.LATE_INIT_KEYWORD else null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
OPERATOR {
|
||||||
|
override fun getModifiers(flags: Int): JetModifierKeywordToken? {
|
||||||
|
return if (Flags.IS_OPERATOR.get(flags)) JetTokens.OPERATOR_KEYWORD else null
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
abstract fun getModifiers(flags: Int): JetModifierKeywordToken?
|
abstract fun getModifiers(flags: Int): JetModifierKeywordToken?
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ class MouseMovedEventArgs
|
|||||||
// EXIST: init
|
// EXIST: init
|
||||||
/*why?*/
|
/*why?*/
|
||||||
// EXIST: companion object
|
// EXIST: companion object
|
||||||
|
// EXIST: operator
|
||||||
// EXIST: sealed
|
// EXIST: sealed
|
||||||
// EXIST: lateinit
|
// EXIST: lateinit
|
||||||
// EXIST: data
|
// EXIST: data
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ class B {
|
|||||||
// EXIST: vararg
|
// EXIST: vararg
|
||||||
/*why?*/
|
/*why?*/
|
||||||
// EXIST: companion object
|
// EXIST: companion object
|
||||||
|
// EXIST: operator
|
||||||
// EXIST: sealed
|
// EXIST: sealed
|
||||||
// EXIST: lateinit
|
// EXIST: lateinit
|
||||||
// EXIST: data
|
// EXIST: data
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ class A {
|
|||||||
// EXIST: init
|
// EXIST: init
|
||||||
/*why?*/
|
/*why?*/
|
||||||
// EXIST: companion object
|
// EXIST: companion object
|
||||||
|
// EXIST: operator
|
||||||
// EXIST: sealed
|
// EXIST: sealed
|
||||||
// EXIST: lateinit
|
// EXIST: lateinit
|
||||||
// EXIST: data
|
// EXIST: data
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ var a : Int
|
|||||||
// EXIST: vararg
|
// EXIST: vararg
|
||||||
/*why?*/
|
/*why?*/
|
||||||
// EXIST: companion object
|
// EXIST: companion object
|
||||||
|
// EXIST: operator
|
||||||
// EXIST: sealed
|
// EXIST: sealed
|
||||||
// EXIST: lateinit
|
// EXIST: lateinit
|
||||||
// EXIST: data
|
// EXIST: data
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ public class Test {
|
|||||||
// EXIST: init
|
// EXIST: init
|
||||||
/*why?*/
|
/*why?*/
|
||||||
// EXIST: companion object
|
// EXIST: companion object
|
||||||
|
// EXIST: operator
|
||||||
// EXIST: sealed
|
// EXIST: sealed
|
||||||
// EXIST: lateinit
|
// EXIST: lateinit
|
||||||
// EXIST: data
|
// EXIST: data
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ class TestClass {
|
|||||||
// EXIST: constructor
|
// EXIST: constructor
|
||||||
// EXIST: init
|
// EXIST: init
|
||||||
// EXIST: companion object
|
// EXIST: companion object
|
||||||
|
// EXIST: operator
|
||||||
// EXIST: sealed
|
// EXIST: sealed
|
||||||
// EXIST: lateinit
|
// EXIST: lateinit
|
||||||
// EXIST: data
|
// EXIST: data
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ package Test
|
|||||||
// EXIST: vararg
|
// EXIST: vararg
|
||||||
/*why?*/
|
/*why?*/
|
||||||
// EXIST: companion object
|
// EXIST: companion object
|
||||||
|
// EXIST: operator
|
||||||
// EXIST: sealed
|
// EXIST: sealed
|
||||||
// EXIST: lateinit
|
// EXIST: lateinit
|
||||||
// EXIST: data
|
// EXIST: data
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ class Some {
|
|||||||
// EXIST: constructor
|
// EXIST: constructor
|
||||||
// EXIST: init
|
// EXIST: init
|
||||||
// EXIST: companion object
|
// EXIST: companion object
|
||||||
|
// EXIST: operator
|
||||||
// EXIST: sealed
|
// EXIST: sealed
|
||||||
// EXIST: lateinit
|
// EXIST: lateinit
|
||||||
// EXIST: data
|
// EXIST: data
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ class Some {
|
|||||||
// EXIST: constructor
|
// EXIST: constructor
|
||||||
// EXIST: init
|
// EXIST: init
|
||||||
// EXIST: companion object
|
// EXIST: companion object
|
||||||
|
// EXIST: operator
|
||||||
// EXIST: sealed
|
// EXIST: sealed
|
||||||
// EXIST: lateinit
|
// EXIST: lateinit
|
||||||
// EXIST: data
|
// EXIST: data
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ class Some {
|
|||||||
// EXIST: constructor
|
// EXIST: constructor
|
||||||
// EXIST: init
|
// EXIST: init
|
||||||
// EXIST: companion object
|
// EXIST: companion object
|
||||||
|
// EXIST: operator
|
||||||
// EXIST: sealed
|
// EXIST: sealed
|
||||||
// EXIST: lateinit
|
// EXIST: lateinit
|
||||||
// EXIST: data
|
// EXIST: data
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
// EXIST: vararg
|
// EXIST: vararg
|
||||||
/*why?*/
|
/*why?*/
|
||||||
// EXIST: companion object
|
// EXIST: companion object
|
||||||
|
// EXIST: operator
|
||||||
// EXIST: sealed
|
// EXIST: sealed
|
||||||
// EXIST: lateinit
|
// EXIST: lateinit
|
||||||
// EXIST: data
|
// EXIST: data
|
||||||
|
|||||||
+1
-1
@@ -415,7 +415,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return fakeFunction.initialize(null, null, typeParameters, Collections.emptyList(), null, null, Visibilities.INTERNAL)
|
return fakeFunction.initialize(null, null, typeParameters, Collections.emptyList(), null, null, Visibilities.INTERNAL, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderTypeCandidates(
|
private fun renderTypeCandidates(
|
||||||
|
|||||||
@@ -2185,6 +2185,12 @@ public class ResolveByStubTestGenerated extends AbstractResolveByStubTest {
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("PropagateDeepSubclass.kt")
|
||||||
public void testPropagateDeepSubclass() throws Exception {
|
public void testPropagateDeepSubclass() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/PropagateDeepSubclass.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/fun/PropagateDeepSubclass.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user