'infix' modifier

This commit is contained in:
Yan Zhulanow
2015-09-29 14:41:34 +03:00
parent 1fbfff97fa
commit 32e2a550b4
54 changed files with 142 additions and 36 deletions
@@ -48,6 +48,7 @@ public class AccessorForConstructorDescriptor(
calleeDescriptor.returnType,
Modality.FINAL,
Visibilities.INTERNAL,
false,
false
)
}
@@ -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);
@@ -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
);
}
@@ -117,6 +117,7 @@ public class SignaturesPropagationData {
autoReturnType,
Modality.OPEN,
Visibilities.PUBLIC,
false,
false
);
return autoMethodDescriptor;
@@ -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
@@ -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
@@ -81,7 +81,8 @@ private fun createSynthesizedFunctionWithFirstParameterAsReceiver(descriptor: Fu
original.getReturnType(),
original.getModality(),
original.getVisibility(),
original.isOperator
original.isOperator,
original.isInfix
)
return result
@@ -125,6 +125,7 @@ public class ControlStructureTypingUtils {
type,
Modality.FINAL,
Visibilities.PUBLIC,
false,
false
);
return function;
@@ -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");
@@ -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");