'infix' modifier
This commit is contained in:
@@ -48,6 +48,7 @@ public class AccessorForConstructorDescriptor(
|
||||
calleeDescriptor.returnType,
|
||||
Modality.FINAL,
|
||||
Visibilities.INTERNAL,
|
||||
false,
|
||||
false
|
||||
)
|
||||
}
|
||||
|
||||
+2
-1
@@ -48,7 +48,8 @@ public class AccessorForFunctionDescriptor extends AbstractAccessorForFunctionDe
|
||||
descriptor.getReturnType(),
|
||||
Modality.FINAL,
|
||||
Visibilities.INTERNAL,
|
||||
descriptor.isOperator());
|
||||
descriptor.isOperator(),
|
||||
descriptor.isInfix());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -198,7 +198,7 @@ public class ClosureCodegen extends MemberCodegen<JetElement> {
|
||||
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);
|
||||
|
||||
@@ -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, false);
|
||||
null, Visibilities.PRIVATE, false, 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, false)
|
||||
classDescriptor.builtIns.getAnyType(), Modality.OPEN, Visibilities.PUBLIC, false, false)
|
||||
|
||||
val fakeCodegen = ExpressionCodegen(
|
||||
this, FrameMap(), OBJECT_TYPE, context.intoFunction(fakeDescriptor), state, this@PropertyReferenceCodegen
|
||||
|
||||
@@ -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);
|
||||
|
||||
+2
@@ -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
|
||||
);
|
||||
}
|
||||
|
||||
+1
@@ -117,6 +117,7 @@ public class SignaturesPropagationData {
|
||||
autoReturnType,
|
||||
Modality.OPEN,
|
||||
Visibilities.PUBLIC,
|
||||
false,
|
||||
false
|
||||
);
|
||||
return autoMethodDescriptor;
|
||||
|
||||
+4
-2
@@ -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<SimpleFunctionDescriptorImpl>.doSubstitute(
|
||||
originalSubstitutor, newOwner, newModality, newVisibility, newIsOperator, original,
|
||||
originalSubstitutor, newOwner, newModality, newVisibility, newIsOperator, newIsInfix, original,
|
||||
copyOverrides, kind, newValueParameterDescriptors, newExtensionReceiverParameterType, newReturnType)
|
||||
as MyFunctionDescriptor? ?: return null
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
+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 = 59;
|
||||
public static final int STUB_VERSION = 60;
|
||||
|
||||
private static final String NAME = "kotlin.FILE";
|
||||
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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!
|
||||
|
||||
@@ -130,6 +130,7 @@ object DynamicCallableDescriptors {
|
||||
DynamicType,
|
||||
Modality.FINAL,
|
||||
Visibilities.PUBLIC,
|
||||
false,
|
||||
false
|
||||
)
|
||||
return functionDescriptor
|
||||
|
||||
+2
-1
@@ -81,7 +81,8 @@ private fun createSynthesizedFunctionWithFirstParameterAsReceiver(descriptor: Fu
|
||||
original.getReturnType(),
|
||||
original.getModality(),
|
||||
original.getVisibility(),
|
||||
original.isOperator
|
||||
original.isOperator,
|
||||
original.isInfix
|
||||
)
|
||||
|
||||
return result
|
||||
|
||||
+1
@@ -125,6 +125,7 @@ public class ControlStructureTypingUtils {
|
||||
type,
|
||||
Modality.FINAL,
|
||||
Visibilities.PUBLIC,
|
||||
false,
|
||||
false
|
||||
);
|
||||
return function;
|
||||
|
||||
+6
-2
@@ -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()) {
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package test
|
||||
|
||||
class Example {
|
||||
infix fun test(other: Example) {}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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");
|
||||
|
||||
+6
@@ -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");
|
||||
|
||||
+1
@@ -110,6 +110,7 @@ public class JavaConstructorDescriptor extends ConstructorDescriptorImpl impleme
|
||||
enhancedReturnType,
|
||||
getModality(),
|
||||
getVisibility(),
|
||||
false,
|
||||
false
|
||||
);
|
||||
|
||||
|
||||
+1
-1
@@ -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
|
||||
);
|
||||
|
||||
+1
@@ -127,6 +127,7 @@ public abstract class LazyJavaScope(
|
||||
effectiveSignature.getReturnType(),
|
||||
Modality.convertFromFlags(method.isAbstract(), !method.isFinal()),
|
||||
method.getVisibility(),
|
||||
false,
|
||||
false
|
||||
)
|
||||
|
||||
|
||||
+2
-1
@@ -61,7 +61,8 @@ public class FunctionInvokeDescriptor private constructor(
|
||||
typeParameters.last().getDefaultType(),
|
||||
Modality.ABSTRACT,
|
||||
Visibilities.PUBLIC,
|
||||
true
|
||||
true,
|
||||
false
|
||||
)
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
+1
-1
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+21
-4
@@ -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<FunctionDescriptor> 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) {
|
||||
|
||||
+5
@@ -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) {
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ public class ScriptCodeDescriptor extends FunctionDescriptorImpl {
|
||||
@NotNull List<ValueParameterDescriptor> valueParameters,
|
||||
@NotNull JetType returnType) {
|
||||
super.initialize(null, dispatchReceiverParameter, Collections.<TypeParameterDescriptor>emptyList(), valueParameters, returnType,
|
||||
Modality.FINAL, Visibilities.INTERNAL, /*isOperator =*/ false);
|
||||
Modality.FINAL, Visibilities.INTERNAL, false, false);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+4
-3
@@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ public class DescriptorFactory {
|
||||
return values.initialize(null, null, Collections.<TypeParameterDescriptor>emptyList(),
|
||||
Collections.<ValueParameterDescriptor>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.<TypeParameterDescriptor>emptyList(),
|
||||
Collections.singletonList(parameterDescriptor), enumClass.getDefaultType(),
|
||||
Modality.FINAL, Visibilities.PUBLIC, false);
|
||||
Modality.FINAL, Visibilities.PUBLIC, false, false);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -424,6 +424,7 @@ public class ErrorUtils {
|
||||
createErrorType("<ERROR FUNCTION RETURN TYPE>"),
|
||||
Modality.OPEN,
|
||||
Visibilities.INTERNAL,
|
||||
false,
|
||||
false
|
||||
);
|
||||
return function;
|
||||
|
||||
@@ -238,6 +238,7 @@ message Callable {
|
||||
isConst
|
||||
lateinit
|
||||
isOperator
|
||||
isInfix
|
||||
*/
|
||||
optional int32 flags = 1;
|
||||
|
||||
|
||||
@@ -54,6 +54,8 @@ public class Flags {
|
||||
|
||||
public static final FlagField<Boolean> IS_OPERATOR = FlagField.booleanAfter(LATE_INIT);
|
||||
|
||||
public static final FlagField<Boolean> IS_INFIX = FlagField.booleanAfter(IS_OPERATOR);
|
||||
|
||||
// Parameters
|
||||
|
||||
public static final FlagField<Boolean> 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)
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -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
|
||||
}
|
||||
|
||||
+1
-1
@@ -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<FlagsToModifiers>()
|
||||
}
|
||||
|
||||
+6
@@ -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?
|
||||
|
||||
@@ -35,6 +35,7 @@ class MouseMovedEventArgs
|
||||
/*why?*/
|
||||
// EXIST: companion object
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed
|
||||
// EXIST: lateinit
|
||||
// EXIST: data
|
||||
|
||||
@@ -38,6 +38,7 @@ class B {
|
||||
/*why?*/
|
||||
// EXIST: companion object
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed
|
||||
// EXIST: lateinit
|
||||
// EXIST: data
|
||||
|
||||
@@ -38,6 +38,7 @@ class A {
|
||||
/*why?*/
|
||||
// EXIST: companion object
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed
|
||||
// EXIST: lateinit
|
||||
// EXIST: data
|
||||
|
||||
@@ -38,6 +38,7 @@ var a : Int
|
||||
/*why?*/
|
||||
// EXIST: companion object
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed
|
||||
// EXIST: lateinit
|
||||
// EXIST: data
|
||||
|
||||
@@ -36,6 +36,7 @@ public class Test {
|
||||
/*why?*/
|
||||
// EXIST: companion object
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed
|
||||
// EXIST: lateinit
|
||||
// EXIST: data
|
||||
|
||||
@@ -30,6 +30,7 @@ class TestClass {
|
||||
// EXIST: init
|
||||
// EXIST: companion object
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed
|
||||
// EXIST: lateinit
|
||||
// EXIST: data
|
||||
|
||||
@@ -29,6 +29,7 @@ package Test
|
||||
/*why?*/
|
||||
// EXIST: companion object
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed
|
||||
// EXIST: lateinit
|
||||
// EXIST: data
|
||||
|
||||
@@ -34,6 +34,7 @@ class Some {
|
||||
// EXIST: init
|
||||
// EXIST: companion object
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed
|
||||
// EXIST: lateinit
|
||||
// EXIST: data
|
||||
|
||||
@@ -34,6 +34,7 @@ class Some {
|
||||
// EXIST: init
|
||||
// EXIST: companion object
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed
|
||||
// EXIST: lateinit
|
||||
// EXIST: data
|
||||
|
||||
@@ -36,6 +36,7 @@ class Some {
|
||||
// EXIST: init
|
||||
// EXIST: companion object
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed
|
||||
// EXIST: lateinit
|
||||
// EXIST: data
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
/*why?*/
|
||||
// EXIST: companion object
|
||||
// EXIST: operator
|
||||
// EXIST: infix
|
||||
// EXIST: sealed
|
||||
// EXIST: lateinit
|
||||
// EXIST: data
|
||||
|
||||
+2
-1
@@ -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(
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user