diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java index 03197059a86..5abdb9058f1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java @@ -860,15 +860,21 @@ public class JetControlFlowProcessor { JetMultiDeclaration multiDeclaration = expression.getMultiParameter(); JetExpression loopRange = expression.getLoopRange(); - JetType loopRangeType = trace.get(BindingContext.EXPRESSION_TYPE, loopRange); - TypePredicate loopRangeTypeSet = loopRangeType != null ? new SingleType(loopRangeType) : AllTypes.instance$; - PseudoValue loopRangeValue = builder.getBoundValue(loopRange); + TypePredicate loopRangeTypePredicate = AllTypes.instance$; + ResolvedCall iteratorResolvedCall = trace.get(BindingContext.LOOP_RANGE_ITERATOR_RESOLVED_CALL, loopRange); + if (iteratorResolvedCall != null) { + ReceiverValue iteratorReceiver = getExplicitReceiverValue(iteratorResolvedCall); + if (iteratorReceiver.exists()) { + loopRangeTypePredicate = PseudocodePackage.getReceiverTypePredicate(iteratorResolvedCall, iteratorReceiver); + } + } + PseudoValue loopRangeValue = builder.getBoundValue(loopRange); PseudoValue value = builder.magic( loopRange != null ? loopRange : expression, null, Collections.singletonList(loopRangeValue), - Collections.singletonMap(loopRangeValue, loopRangeTypeSet), + Collections.singletonMap(loopRangeValue, loopRangeTypePredicate), true ).getOutputValue(); @@ -882,6 +888,17 @@ public class JetControlFlowProcessor { } } + private ReceiverValue getExplicitReceiverValue(ResolvedCall resolvedCall) { + switch(resolvedCall.getExplicitReceiverKind()) { + case THIS_OBJECT: + return resolvedCall.getThisObject(); + case RECEIVER_ARGUMENT: + return resolvedCall.getReceiverArgument(); + default: + return ReceiverValue.NO_RECEIVER; + } + } + @Override public void visitBreakExpression(@NotNull JetBreakExpression expression) { JetElement loop = getCorrespondingLoop(expression); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/TypePredicate.kt b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/TypePredicate.kt index ac4bd2030cb..60aea47a0e1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/TypePredicate.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/TypePredicate.kt @@ -32,12 +32,48 @@ public data class SingleType(val targetType: JetType): TypePredicate { override fun toString(): String = targetType.render() } +public data class AllSubtypes(val upperBound: JetType): TypePredicate { + override fun invoke(typeToCheck: JetType): Boolean = JetTypeChecker.INSTANCE.isSubtypeOf(typeToCheck, upperBound) + + override fun toString(): String = "{<: ${upperBound.render()}}" +} + +public data class ForAllTypes(val typeSets: List): TypePredicate { + override fun invoke(typeToCheck: JetType): Boolean = typeSets.all { it(typeToCheck) } + + override fun toString(): String = "AND{${typeSets.makeString(", ")}}" +} + +public data class ForSomeType(val typeSets: List): TypePredicate { + override fun invoke(typeToCheck: JetType): Boolean = typeSets.any { it(typeToCheck) } + + override fun toString(): String = "OR{${typeSets.makeString(", ")}}" +} + public object AllTypes : TypePredicate { override fun invoke(typeToCheck: JetType): Boolean = true - override fun toString(): String = "" + override fun toString(): String = "*" } +// todo: simplify computed type predicate when possible +fun and(predicates: Collection): TypePredicate = + when (predicates.size) { + 0 -> AllTypes + 1 -> predicates.first() + else -> ForAllTypes(predicates.toList()) + } + +fun or(predicates: Collection): TypePredicate? = + when (predicates.size) { + 0 -> null + 1 -> predicates.first() + else -> ForSomeType(predicates.toList()) + } + +fun JetType.getSubtypesPredicate(): TypePredicate? = + if (TypeUtils.canHaveSubtypes(JetTypeChecker.INSTANCE, this)) AllSubtypes(this) else SingleType(this) + private fun JetType.render(): String = DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(this) public fun TypePredicate.expectedTypeFor(keys: Iterable): Map = diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/pseudocodeUtil.kt b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/pseudocodeUtil.kt index 01871a57938..41e3886f47b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/pseudocodeUtil.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/pseudocodeUtil.kt @@ -16,13 +16,21 @@ package org.jetbrains.jet.lang.cfg.pseudocode -import org.jetbrains.jet.lang.psi.JetExpression -import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.traverseFollowingInstructions -import java.util.HashSet -import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.TraversalOrder -import org.jetbrains.jet.lang.psi.JetFunction -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType -import org.jetbrains.jet.lang.psi.JetFunctionLiteral +import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.* +import org.jetbrains.jet.lang.cfg.pseudocode.instructions.* +import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.* +import org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps.* +import org.jetbrains.jet.lang.psi.* +import org.jetbrains.jet.lang.descriptors.* +import org.jetbrains.jet.lang.resolve.bindingContextUtil.* +import org.jetbrains.jet.lang.resolve.calls.model.* +import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns +import org.jetbrains.jet.lang.resolve.BindingContext +import java.util.* +import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue +import org.jetbrains.jet.lang.resolve.OverridingUtil +import org.jetbrains.jet.lang.types.TypeUtils +import org.jetbrains.jet.lang.types.JetType fun JetExpression.isStatement(pseudocode: Pseudocode): Boolean { val value = pseudocode.getElementValue(this); @@ -32,7 +40,7 @@ fun JetExpression.isStatement(pseudocode: Pseudocode): Boolean { return when { (getParent() as? JetFunction)?.getBodyExpression() == this -> true - pseudocode.getElementValue(getParentByType(javaClass())?.getBodyExpression()) == value -> + value.implicitReturnValue -> true else -> false @@ -42,4 +50,127 @@ fun JetExpression.isStatement(pseudocode: Pseudocode): Boolean { val instruction = value.createdAt if (considerUsedIfCreatedBeforeExit() && instruction.nextInstructions.any { it == pseudocode.getExitInstruction() }) return false return traverseFollowingInstructions(instruction, HashSet(), TraversalOrder.FORWARD) { value !in it.inputValues } +} + +val PseudoValue.implicitReturnValue: Boolean + get() { + val pseudocode = createdAt.owner + + val function = pseudocode.getCorrespondingElement() as? JetDeclarationWithBody + + if (function is JetFunctionLiteral || (function != null && !function.hasBlockBody())) { + return pseudocode.getElementValue(function.getBodyExpression()) == this + } + return false + } + +fun Pseudocode.collectValueUsages(): Map> { + val map = HashMap>() + traverseFollowingInstructions(getEnterInstruction(), HashSet(), TraversalOrder.FORWARD) { + for (value in it.inputValues) { + map.getOrPut(value){ ArrayList() }.add(it) + } + true + } + + return map +} + +fun getReceiverTypePredicate(resolvedCall: ResolvedCall<*>, receiverValue: ReceiverValue): TypePredicate? { + val callableDescriptor = resolvedCall.getResultingDescriptor() + if (callableDescriptor == null) return null + + when (receiverValue) { + resolvedCall.getReceiverArgument() -> { + val receiverParameter = callableDescriptor.getReceiverParameter() + if (receiverParameter != null) return receiverParameter.getType().getSubtypesPredicate() + } + resolvedCall.getThisObject() -> { + val rootCallableDescriptors = OverridingUtil.getTopmostOverridenDescriptors(callableDescriptor) + return or(rootCallableDescriptors.map { + it.getExpectedThisObject()?.getType()?.let { TypeUtils.makeNullableIfNeeded(it, resolvedCall.isSafeCall()) }?.getSubtypesPredicate() + }.filterNotNull()) + } + } + + return null +} + +fun getExpectedTypePredicate( + value: PseudoValue, + valueUsageMap: Map>, + bindingContext: BindingContext +): TypePredicate { + val typePredicates = HashSet() + + fun addSubtypesOf(jetType: JetType?) = typePredicates.add(jetType?.getSubtypesPredicate()) + + fun addTypePredicates(value: PseudoValue) { + if (value.implicitReturnValue) { + val function = value.createdAt.owner.getCorrespondingElement() as? JetDeclarationWithBody + val functionDescriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, function] as? FunctionDescriptor + addSubtypesOf(functionDescriptor?.getReturnType()) + } + + valueUsageMap[value]?.forEach { + when (it) { + is ReturnValueInstruction -> { + val functionDescriptor = (it.element as JetReturnExpression).getTargetFunctionDescriptor(bindingContext) + addSubtypesOf(functionDescriptor?.getReturnType()) + } + + is ConditionalJumpInstruction -> + addSubtypesOf(KotlinBuiltIns.getInstance().getBooleanType()) + + is ThrowExceptionInstruction -> + addSubtypesOf(KotlinBuiltIns.getInstance().getThrowable().getDefaultType()) + + is MergeInstruction -> + addTypePredicates(it.outputValue) + + is AccessValueInstruction -> { + val accessTarget = it.target + val receiverValue = it.receiverValues[value] + if (receiverValue != null) { + typePredicates.add(getReceiverTypePredicate((accessTarget as AccessTarget.Call).resolvedCall, receiverValue)) + } + else { + val expectedType = when (accessTarget) { + is AccessTarget.Call -> + (accessTarget.resolvedCall.getResultingDescriptor() as? VariableDescriptor)?.getType() + is AccessTarget.Declaration -> + accessTarget.descriptor.getType() + else -> + null + } + addSubtypesOf(expectedType) + } + } + + is CallInstruction -> { + val receiverValue = it.receiverValues[value] + if (receiverValue != null) { + typePredicates.add(getReceiverTypePredicate(it.resolvedCall, receiverValue)) + } + else { + it.arguments[value]?.let { parameter -> + val expectedType = when (it.resolvedCall.getValueArguments()[parameter]) { + is VarargValueArgument -> + parameter.getVarargElementType() + else -> + parameter.getType() + } + addSubtypesOf(expectedType) + } + } + } + + is MagicInstruction -> + typePredicates.add(it.expectedTypes[value]) + } + } + } + + addTypePredicates(value) + return and(typePredicates.filterNotNull()) } \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt index 2ab6943670f..1841ed6dfd7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt @@ -21,14 +21,18 @@ import org.jetbrains.jet.lang.psi.Call import org.jetbrains.jet.lang.psi.JetPsiUtil import org.jetbrains.jet.lang.psi.JetCallExpression import org.jetbrains.jet.lang.psi.JetQualifiedExpression -import org.jetbrains.jet.lang.psi.JetBinaryExpression -import org.jetbrains.jet.lang.psi.JetUnaryExpression -import org.jetbrains.jet.lang.psi.JetArrayAccessExpression import org.jetbrains.jet.lang.resolve.BindingContext import org.jetbrains.jet.lang.psi.JetOperationExpression import org.jetbrains.jet.lang.resolve.BindingContext.CALL -import com.intellij.psi.util.PsiTreeUtil -import org.jetbrains.jet.lang.psi.JetSimpleNameExpression +import org.jetbrains.jet.lang.psi.JetReturnExpression +import org.jetbrains.jet.lang.descriptors.FunctionDescriptor +import org.jetbrains.jet.lang.resolve.BindingContext.LABEL_TARGET +import org.jetbrains.jet.lang.resolve.BindingContext.FUNCTION +import org.jetbrains.jet.lang.resolve.BindingContext.DECLARATION_TO_DESCRIPTOR +import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.JetDeclarationWithBody +import org.jetbrains.jet.lang.resolve.DescriptorUtils +import org.jetbrains.jet.lang.descriptors.impl.AnonymousFunctionDescriptor /** * For expressions like a(), a[i], a.b.c(), +a, a + b, (a()), a(): Int, @label a() @@ -51,3 +55,16 @@ fun JetExpression.getCorrespondingCall(bindingContext: BindingContext): Call? { } return bindingContext[CALL, reference] } + +public fun JetReturnExpression.getTargetFunctionDescriptor(bindingContext: BindingContext): FunctionDescriptor? { + val targetLabel = getTargetLabel() + if (targetLabel != null) return bindingContext[LABEL_TARGET, targetLabel]?.let { bindingContext[FUNCTION, it] } + + val declarationDescriptor = bindingContext[DECLARATION_TO_DESCRIPTOR, getParentByType(javaClass())] + val containingFunctionDescriptor = DescriptorUtils.getParentOfType(declarationDescriptor, javaClass(), false) + if (containingFunctionDescriptor == null) return null + + return stream(containingFunctionDescriptor) { DescriptorUtils.getParentOfType(it, javaClass()) } + .dropWhile { it is AnonymousFunctionDescriptor } + .firstOrNull() +} diff --git a/compiler/testData/cfg-variables/basic/IfWithUninitialized.values b/compiler/testData/cfg-variables/basic/IfWithUninitialized.values index 886eac6e86c..9e8d37ccb96 100644 --- a/compiler/testData/cfg-variables/basic/IfWithUninitialized.values +++ b/compiler/testData/cfg-variables/basic/IfWithUninitialized.values @@ -9,18 +9,18 @@ fun foo() { } } --------------------- -1 NEW() -2 NEW() -1 < 2 NEW(, ) -b NEW() -use(b) NEW() -{ use(b) } COPY -true NEW() -if (1 < 2) { use(b) } else { b = true } COPY -{ val b: Boolean if (1 < 2) { use(b) } else { b = true } } COPY +1 : {<: Comparable} NEW() +2 : Int NEW() +1 < 2 : Boolean NEW(, ) +b : {<: Any?} NEW() +use(b) : * NEW() +{ use(b) } : * COPY +true : Boolean NEW() +if (1 < 2) { use(b) } else { b = true } : * COPY +{ val b: Boolean if (1 < 2) { use(b) } else { b = true } } : * COPY ===================== == use == fun use(vararg a: Any?) = a --------------------- -a NEW() +a : {<: Array} NEW() ===================== diff --git a/compiler/testData/cfg-variables/basic/InitializedNotDeclared.values b/compiler/testData/cfg-variables/basic/InitializedNotDeclared.values index 13de2c9986d..6b99c7aaf59 100644 --- a/compiler/testData/cfg-variables/basic/InitializedNotDeclared.values +++ b/compiler/testData/cfg-variables/basic/InitializedNotDeclared.values @@ -6,5 +6,5 @@ class A { val x: Int } --------------------- -1 NEW() +1 : Int NEW() ===================== diff --git a/compiler/testData/cfg-variables/basic/UsageInFunctionLiteral.values b/compiler/testData/cfg-variables/basic/UsageInFunctionLiteral.values index c7195b6fb36..4c2009adf92 100644 --- a/compiler/testData/cfg-variables/basic/UsageInFunctionLiteral.values +++ b/compiler/testData/cfg-variables/basic/UsageInFunctionLiteral.values @@ -7,8 +7,8 @@ fun foo() { } } --------------------- -1 NEW() -{ (x: Int) -> val y = x + a use(a) } NEW() +1 : Int NEW() +{ (x: Int) -> val y = x + a use(a) } : {<: (Int) -> Array} NEW() ===================== == anonymous_0 == { (x: Int) -> @@ -16,15 +16,15 @@ fun foo() { use(a) } --------------------- -x NEW() -a NEW() -x + a NEW(, ) -a NEW() -use(a) NEW() -val y = x + a use(a) COPY +x : Int NEW() +a : Int NEW() +x + a : Int NEW(, ) +a : {<: Any?} NEW() +use(a) : {<: Array} NEW() +val y = x + a use(a) : {<: Array} COPY ===================== == use == fun use(vararg a: Any?) = a --------------------- -a NEW() +a : {<: Array} NEW() ===================== diff --git a/compiler/testData/cfg-variables/basic/VariablesInitialization.values b/compiler/testData/cfg-variables/basic/VariablesInitialization.values index 4288c843063..99f30cf9766 100644 --- a/compiler/testData/cfg-variables/basic/VariablesInitialization.values +++ b/compiler/testData/cfg-variables/basic/VariablesInitialization.values @@ -6,10 +6,10 @@ fun foo() { 42 } --------------------- -1 NEW() -2 NEW() -42 NEW() -{ val a = 1 val b: Int b = 2 42 } COPY +1 : Int NEW() +2 : Int NEW() +42 : * NEW() +{ val a = 1 val b: Int b = 2 42 } : * COPY ===================== == bar == fun bar(foo: Foo) { @@ -18,13 +18,13 @@ fun bar(foo: Foo) { 42 } --------------------- -foo NEW() -c NEW() -foo.c COPY -foo NEW() -2 NEW() -42 NEW() -{ foo.c foo.c = 2 42 } COPY +foo : {<: Foo} NEW() +c : * NEW() +foo.c : * COPY +foo : {<: Foo} NEW() +2 : Int NEW() +42 : * NEW() +{ foo.c foo.c = 2 42 } : * COPY ===================== == Foo == trait Foo { diff --git a/compiler/testData/cfg-variables/basic/VariablesUsage.values b/compiler/testData/cfg-variables/basic/VariablesUsage.values index f9713ca80ce..99496514298 100644 --- a/compiler/testData/cfg-variables/basic/VariablesUsage.values +++ b/compiler/testData/cfg-variables/basic/VariablesUsage.values @@ -6,13 +6,13 @@ fun foo() { use(a) } --------------------- -1 NEW() -a NEW() -use(a) NEW() -2 NEW() -a NEW() -use(a) NEW() -{ var a = 1 use(a) a = 2 use(a) } COPY +1 : Int NEW() +a : Int NEW() +use(a) : * NEW() +2 : Int NEW() +a : Int NEW() +use(a) : * NEW() +{ var a = 1 use(a) a = 2 use(a) } : * COPY ===================== == bar == fun bar() { @@ -20,10 +20,10 @@ fun bar() { b = 3 } --------------------- -3 NEW() +3 : Int NEW() ===================== == use == fun use(a: Int) = a --------------------- -a NEW() +a : Int NEW() ===================== diff --git a/compiler/testData/cfg-variables/bugs/referenceToPropertyInitializer.values b/compiler/testData/cfg-variables/bugs/referenceToPropertyInitializer.values index 0dfc529f7e4..2c25e090ff8 100644 --- a/compiler/testData/cfg-variables/bugs/referenceToPropertyInitializer.values +++ b/compiler/testData/cfg-variables/bugs/referenceToPropertyInitializer.values @@ -5,21 +5,21 @@ class TestFunctionLiteral { } } --------------------- -{ (x: Int) -> sum(x - 1) + x } NEW() +{ (x: Int) -> sum(x - 1) + x } : {<: (Int) -> Int} NEW() ===================== == anonymous_0 == { (x: Int) -> sum(x - 1) + x } --------------------- -sum NEW() -x NEW() -1 NEW() -x - 1 NEW(, ) -sum(x - 1) NEW(, ) -x NEW() -sum(x - 1) + x NEW(, ) -sum(x - 1) + x COPY +sum : {<: (Int) -> Int} NEW() +x : Int NEW() +1 : Int NEW() +x - 1 : Int NEW(, ) +sum(x - 1) : Int NEW(, ) +x : Int NEW() +sum(x - 1) + x : Int NEW(, ) +sum(x - 1) + x : Int COPY ===================== == A == open class A(val a: A) @@ -37,23 +37,23 @@ class TestObjectLiteral { } } --------------------- -obj NEW() -obj NEW() -object: A(obj) { { val x = obj } fun foo() { val y = obj } } NEW() +obj : * NEW() +obj : {<: A} NEW() +object: A(obj) { { val x = obj } fun foo() { val y = obj } } : {<: A} NEW() ===================== == foo == fun foo() { val y = obj } --------------------- -obj NEW() +obj : {<: A} NEW() ===================== == TestOther == class TestOther { val x: Int = x + 1 } --------------------- -x NEW() -1 NEW() -x + 1 NEW(, ) +x : Int NEW() +1 : Int NEW() +x + 1 : Int NEW(, ) ===================== diff --git a/compiler/testData/cfg-variables/bugs/varInitializationInIf.values b/compiler/testData/cfg-variables/bugs/varInitializationInIf.values index d87c23dbb1c..e14fe8f08f1 100644 --- a/compiler/testData/cfg-variables/bugs/varInitializationInIf.values +++ b/compiler/testData/cfg-variables/bugs/varInitializationInIf.values @@ -10,12 +10,12 @@ fun foo() { use(b) } --------------------- -1 NEW() -2 NEW() -1 < 2 NEW(, ) -false NEW() -true NEW() -b NEW() -use(b) NEW() -{ val b: Boolean if (1 < 2) { b = false } else { b = true } use(b) } COPY +1 : {<: Comparable} NEW() +2 : Int NEW() +1 < 2 : Boolean NEW(, ) +false : Boolean NEW() +true : Boolean NEW() +b : * NEW() +use(b) : * NEW() +{ val b: Boolean if (1 < 2) { b = false } else { b = true } use(b) } : * COPY ===================== diff --git a/compiler/testData/cfg-variables/bugs/varInitializationInIfInCycle.values b/compiler/testData/cfg-variables/bugs/varInitializationInIfInCycle.values index 5719f3b7cfe..4b4eee75d7b 100644 --- a/compiler/testData/cfg-variables/bugs/varInitializationInIfInCycle.values +++ b/compiler/testData/cfg-variables/bugs/varInitializationInIfInCycle.values @@ -13,17 +13,17 @@ fun foo(numbers: Collection) { } } --------------------- -numbers NEW() -1 NEW() -2 NEW() -1 < 2 NEW(, ) -false NEW() -true NEW() -b NEW() -use(b) NEW() +numbers : {<: Iterable} NEW() +1 : {<: Comparable} NEW() +2 : Int NEW() +1 < 2 : Boolean NEW(, ) +false : Boolean NEW() +true : Boolean NEW() +b : {<: Any?} NEW() +use(b) : * NEW() ===================== == use == fun use(vararg a: Any?) = a --------------------- -a NEW() +a : {<: Array} NEW() ===================== diff --git a/compiler/testData/cfg-variables/lexicalScopes/doWhileScope.values b/compiler/testData/cfg-variables/lexicalScopes/doWhileScope.values index 6168d89842d..b54a25d7dbe 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/doWhileScope.values +++ b/compiler/testData/cfg-variables/lexicalScopes/doWhileScope.values @@ -7,11 +7,11 @@ fun foo() { "after" } --------------------- -"before" NEW() -2 NEW() -a NEW() -0 NEW() -a > 0 NEW(, ) -"after" NEW() -{ "before" do { var a = 2 } while (a > 0) "after" } COPY +"before" : * NEW() +2 : Int NEW() +a : {<: Comparable} NEW() +0 : Int NEW() +a > 0 : Boolean NEW(, ) +"after" : * NEW() +{ "before" do { var a = 2 } while (a > 0) "after" } : * COPY ===================== diff --git a/compiler/testData/cfg-variables/lexicalScopes/forScope.values b/compiler/testData/cfg-variables/lexicalScopes/forScope.values index a48bf428fda..8bcf01b3d9b 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/forScope.values +++ b/compiler/testData/cfg-variables/lexicalScopes/forScope.values @@ -7,11 +7,11 @@ fun foo() { "after" } --------------------- -"before" NEW() -1 NEW() -10 NEW() -1..10 NEW(, ) -i NEW() -"after" NEW() -{ "before" for (i in 1..10) { val a = i } "after" } COPY +"before" : * NEW() +1 : Int NEW() +10 : Int NEW() +1..10 : {<: Iterable} NEW(, ) +i : Int NEW() +"after" : * NEW() +{ "before" for (i in 1..10) { val a = i } "after" } : * COPY ===================== diff --git a/compiler/testData/cfg-variables/lexicalScopes/functionLiteralScope.values b/compiler/testData/cfg-variables/lexicalScopes/functionLiteralScope.values index 5f8baa9bc50..94790e1fd76 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/functionLiteralScope.values +++ b/compiler/testData/cfg-variables/lexicalScopes/functionLiteralScope.values @@ -8,18 +8,18 @@ fun foo() { "after" } --------------------- -"before" NEW() -1 NEW() -{ (x: Int) -> val a = x + b } NEW() -"after" NEW() -{ "before" val b = 1 val f = { (x: Int) -> val a = x + b } "after" } COPY +"before" : * NEW() +1 : Int NEW() +{ (x: Int) -> val a = x + b } : {<: (Int) -> Unit} NEW() +"after" : * NEW() +{ "before" val b = 1 val f = { (x: Int) -> val a = x + b } "after" } : * COPY ===================== == anonymous_0 == { (x: Int) -> val a = x + b } --------------------- -x NEW() -b NEW() -x + b NEW(, ) +x : Int NEW() +b : Int NEW() +x + b : Int NEW(, ) ===================== diff --git a/compiler/testData/cfg-variables/lexicalScopes/ifScope.values b/compiler/testData/cfg-variables/lexicalScopes/ifScope.values index 83e8b451ad0..2b5ab5da777 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/ifScope.values +++ b/compiler/testData/cfg-variables/lexicalScopes/ifScope.values @@ -10,10 +10,10 @@ fun foo() { "after" } --------------------- -"before" NEW() -true NEW() -1 NEW() -2 NEW() -"after" NEW() -{ "before" if (true) { val a = 1 } else { val b = 2 } "after" } COPY +"before" : * NEW() +true : Boolean NEW() +1 : Int NEW() +2 : Int NEW() +"after" : * NEW() +{ "before" if (true) { val a = 1 } else { val b = 2 } "after" } : * COPY ===================== diff --git a/compiler/testData/cfg-variables/lexicalScopes/localClass.values b/compiler/testData/cfg-variables/lexicalScopes/localClass.values index c9e1ecde4a3..6787b010d9d 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/localClass.values +++ b/compiler/testData/cfg-variables/lexicalScopes/localClass.values @@ -12,15 +12,15 @@ fun foo() { "after" } --------------------- -"before" NEW() -x NEW() -"after" NEW() -{ "before" class A(val x: Int) { { val a = x } fun foo() { val b = x } } "after" } COPY +"before" : * NEW() +x : Int NEW() +"after" : * NEW() +{ "before" class A(val x: Int) { { val a = x } fun foo() { val b = x } } "after" } : * COPY ===================== == foo == fun foo() { val b = x } --------------------- -x NEW() +x : Int NEW() ===================== diff --git a/compiler/testData/cfg-variables/lexicalScopes/localFunctionScope.values b/compiler/testData/cfg-variables/lexicalScopes/localFunctionScope.values index d995e457ecb..0cd7d1c50ea 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/localFunctionScope.values +++ b/compiler/testData/cfg-variables/lexicalScopes/localFunctionScope.values @@ -8,17 +8,17 @@ fun foo() { "after" } --------------------- -"before" NEW() -1 NEW() -"after" NEW() -{ "before" val b = 1 fun local(x: Int) { val a = x + b } "after" } COPY +"before" : * NEW() +1 : Int NEW() +"after" : * NEW() +{ "before" val b = 1 fun local(x: Int) { val a = x + b } "after" } : * COPY ===================== == local == fun local(x: Int) { val a = x + b } --------------------- -x NEW() -b NEW() -x + b NEW(, ) +x : Int NEW() +b : Int NEW() +x + b : Int NEW(, ) ===================== diff --git a/compiler/testData/cfg-variables/lexicalScopes/localFunctionScopeWithoutBody.values b/compiler/testData/cfg-variables/lexicalScopes/localFunctionScopeWithoutBody.values index 75d4a6fd6dc..b70862c6513 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/localFunctionScopeWithoutBody.values +++ b/compiler/testData/cfg-variables/lexicalScopes/localFunctionScopeWithoutBody.values @@ -6,15 +6,15 @@ fun foo() { "after" } --------------------- -"before" NEW() -1 NEW() -"after" NEW() -{ "before" val b = 1 fun local(x: Int) = x + b "after" } COPY +"before" : * NEW() +1 : Int NEW() +"after" : * NEW() +{ "before" val b = 1 fun local(x: Int) = x + b "after" } : * COPY ===================== == local == fun local(x: Int) = x + b --------------------- -x NEW() -b NEW() -x + b NEW(, ) +x : Int NEW() +b : Int NEW() +x + b : Int NEW(, ) ===================== diff --git a/compiler/testData/cfg-variables/lexicalScopes/localObject.values b/compiler/testData/cfg-variables/lexicalScopes/localObject.values index ac41b36e842..0c9ae1d8ecf 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/localObject.values +++ b/compiler/testData/cfg-variables/lexicalScopes/localObject.values @@ -12,15 +12,15 @@ fun foo() { "after" } --------------------- -"before" NEW() -1 NEW() -"after" NEW() -{ "before" object A { { val a = 1 } fun foo() { val b = 2 } } "after" } COPY +"before" : * NEW() +1 : Int NEW() +"after" : * NEW() +{ "before" object A { { val a = 1 } fun foo() { val b = 2 } } "after" } : * COPY ===================== == foo == fun foo() { val b = 2 } --------------------- -2 NEW() +2 : Int NEW() ===================== diff --git a/compiler/testData/cfg-variables/lexicalScopes/objectLiteralScope.values b/compiler/testData/cfg-variables/lexicalScopes/objectLiteralScope.values index 73e6fa3cdef..0fc6f4bc18c 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/objectLiteralScope.values +++ b/compiler/testData/cfg-variables/lexicalScopes/objectLiteralScope.values @@ -12,16 +12,16 @@ fun foo() { "after" } --------------------- -"before" NEW() -1 NEW() -object { { val x = 1 } fun foo() { val a = 2 } } NEW() -"after" NEW() -{ "before" val bar = object { { val x = 1 } fun foo() { val a = 2 } } "after" } COPY +"before" : * NEW() +1 : Int NEW() +object { { val x = 1 } fun foo() { val a = 2 } } : NEW() +"after" : * NEW() +{ "before" val bar = object { { val x = 1 } fun foo() { val a = 2 } } "after" } : * COPY ===================== == foo == fun foo() { val a = 2 } --------------------- -2 NEW() +2 : Int NEW() ===================== diff --git a/compiler/testData/cfg-variables/lexicalScopes/propertyAccessorScope.values b/compiler/testData/cfg-variables/lexicalScopes/propertyAccessorScope.values index ba1ceaa3737..a38dc2dc87b 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/propertyAccessorScope.values +++ b/compiler/testData/cfg-variables/lexicalScopes/propertyAccessorScope.values @@ -17,12 +17,12 @@ get() { return $a } --------------------- -$a NEW() +$a : Int NEW() ===================== == set_a == set(v: Int) { $a = v } --------------------- -v NEW() +v : Int NEW() ===================== diff --git a/compiler/testData/cfg-variables/lexicalScopes/tryScope.values b/compiler/testData/cfg-variables/lexicalScopes/tryScope.values index 03919986b84..ce7d64a84c6 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/tryScope.values +++ b/compiler/testData/cfg-variables/lexicalScopes/tryScope.values @@ -13,12 +13,12 @@ fun foo() { "after" } --------------------- -"before" NEW() -foo() NEW() -{ foo() } COPY -e NEW() -1 NEW() -try { foo() } catch (e: Exception) { val a = e } finally { val a = 1 } COPY -"after" NEW() -{ "before" try { foo() } catch (e: Exception) { val a = e } finally { val a = 1 } "after" } COPY +"before" : * NEW() +foo() : * NEW() +{ foo() } : * COPY +e : {<: Exception} NEW() +1 : Int NEW() +try { foo() } catch (e: Exception) { val a = e } finally { val a = 1 } : * COPY +"after" : * NEW() +{ "before" try { foo() } catch (e: Exception) { val a = e } finally { val a = 1 } "after" } : * COPY ===================== diff --git a/compiler/testData/cfg-variables/lexicalScopes/whileScope.values b/compiler/testData/cfg-variables/lexicalScopes/whileScope.values index 01858675810..a8c0d80a31a 100644 --- a/compiler/testData/cfg-variables/lexicalScopes/whileScope.values +++ b/compiler/testData/cfg-variables/lexicalScopes/whileScope.values @@ -7,8 +7,8 @@ fun foo() { "after" } --------------------- -"before" NEW() -true NEW() -"after" NEW() -{ "before" while (true) { val a: Int } "after" } COPY +"before" : * NEW() +true : * NEW() +"after" : * NEW() +{ "before" while (true) { val a: Int } "after" } : * COPY ===================== diff --git a/compiler/testData/cfg/arrays/ArrayAccess.values b/compiler/testData/cfg/arrays/ArrayAccess.values index bc136e3fe81..c6a7315e367 100644 --- a/compiler/testData/cfg/arrays/ArrayAccess.values +++ b/compiler/testData/cfg/arrays/ArrayAccess.values @@ -9,21 +9,21 @@ fun foo() { a[10] += 1 } --------------------- -Array NEW() -3 NEW() -a NEW() -10 NEW() -4 NEW() -a[10] = 4 NEW(, , ) -2 NEW() -a NEW() -10 NEW() -a[10] NEW(, ) -100 NEW() -a NEW() -10 NEW() -a[10] NEW(, ) -1 NEW() -a[10] += 1 NEW(, , ) -{ val a = Array 3 a[10] = 4 2 a[10] 100 a[10] += 1 } COPY +Array : {<: Array} NEW() +3 : * NEW() +a : {<: Array} NEW() +10 : Int NEW() +4 : Int NEW() +a[10] = 4 : * NEW(, , ) +2 : * NEW() +a : {<: Array} NEW() +10 : Int NEW() +a[10] : * NEW(, ) +100 : * NEW() +a : {<: Array} NEW() +10 : Int NEW() +a[10] : Int NEW(, ) +1 : Int NEW() +a[10] += 1 : * NEW(, , ) +{ val a = Array 3 a[10] = 4 2 a[10] 100 a[10] += 1 } : * COPY ===================== diff --git a/compiler/testData/cfg/arrays/ArrayOfFunctions.values b/compiler/testData/cfg/arrays/ArrayOfFunctions.values index 789e1185393..2fd1a0238ac 100644 --- a/compiler/testData/cfg/arrays/ArrayOfFunctions.values +++ b/compiler/testData/cfg/arrays/ArrayOfFunctions.values @@ -3,10 +3,10 @@ fun test(array: Array<(Int)->Unit>) { array[11](3) } --------------------- -array NEW() -11 NEW() -array[11] NEW(, ) -3 NEW() -array[11](3) NEW(, ) -{ array[11](3) } COPY +array : {<: Array<(Int) -> Unit>} NEW() +11 : Int NEW() +array[11] : {<: (Int) -> Unit} NEW(, ) +3 : Int NEW() +array[11](3) : * NEW(, ) +{ array[11](3) } : * COPY ===================== diff --git a/compiler/testData/cfg/arrays/arrayAccessExpression.values b/compiler/testData/cfg/arrays/arrayAccessExpression.values index fee89dd84b8..0328f66872c 100644 --- a/compiler/testData/cfg/arrays/arrayAccessExpression.values +++ b/compiler/testData/cfg/arrays/arrayAccessExpression.values @@ -13,10 +13,10 @@ fun test(ab: Ab) { ab.getArray()[1] } --------------------- -ab NEW() -getArray() NEW() -ab.getArray() COPY -1 NEW() -ab.getArray()[1] NEW(, ) -{ ab.getArray()[1] } COPY +ab : {<: Ab} NEW() +getArray() : {<: Array} NEW() +ab.getArray() : {<: Array} COPY +1 : Int NEW() +ab.getArray()[1] : * NEW(, ) +{ ab.getArray()[1] } : * COPY ===================== diff --git a/compiler/testData/cfg/arrays/arrayInc.values b/compiler/testData/cfg/arrays/arrayInc.values index 0b078b11564..c2a550bd58b 100644 --- a/compiler/testData/cfg/arrays/arrayInc.values +++ b/compiler/testData/cfg/arrays/arrayInc.values @@ -3,9 +3,9 @@ fun foo(a: Array) { a[0]++ } --------------------- -a NEW() -0 NEW() -a[0] NEW(, ) -a[0]++ COPY -{ a[0]++ } COPY +a : {<: Array} NEW() +0 : Int NEW() +a[0] : Int NEW(, ) +a[0]++ : Int COPY +{ a[0]++ } : Int COPY ===================== diff --git a/compiler/testData/cfg/arrays/arraySet.values b/compiler/testData/cfg/arrays/arraySet.values index bfed5c9d479..15ca1d7a79f 100644 --- a/compiler/testData/cfg/arrays/arraySet.values +++ b/compiler/testData/cfg/arrays/arraySet.values @@ -3,9 +3,9 @@ fun foo(a: Array) { a[1] = 2 } --------------------- -a NEW() -1 NEW() -2 NEW() -a[1] = 2 NEW(, , ) -{ a[1] = 2 } COPY +a : {<: Array} NEW() +1 : Int NEW() +2 : Int NEW() +a[1] = 2 : * NEW(, , ) +{ a[1] = 2 } : * COPY ===================== diff --git a/compiler/testData/cfg/arrays/arraySetPlusAssign.values b/compiler/testData/cfg/arrays/arraySetPlusAssign.values index bd6d86ed9b6..e25b40da814 100644 --- a/compiler/testData/cfg/arrays/arraySetPlusAssign.values +++ b/compiler/testData/cfg/arrays/arraySetPlusAssign.values @@ -3,10 +3,10 @@ fun foo(a: Array) { a[0] += 1 } --------------------- -a NEW() -0 NEW() -a[0] NEW(, ) -1 NEW() -a[0] += 1 NEW(, , ) -{ a[0] += 1 } COPY +a : {<: Array} NEW() +0 : Int NEW() +a[0] : Int NEW(, ) +1 : Int NEW() +a[0] += 1 : * NEW(, , ) +{ a[0] += 1 } : * COPY ===================== diff --git a/compiler/testData/cfg/basic/Basic.values b/compiler/testData/cfg/basic/Basic.values index 979de60120b..2b597aef89a 100644 --- a/compiler/testData/cfg/basic/Basic.values +++ b/compiler/testData/cfg/basic/Basic.values @@ -17,40 +17,40 @@ fun f(a : Boolean) : Unit { } --------------------- -1 NEW() -a NEW() -2 NEW() -toLong() NEW() -2.toLong() COPY -a NEW() -3 NEW() -foo(a, 3) NEW(, ) -genfun() NEW() -{1} NEW() -flfun {1} NEW() -3 NEW() -4 NEW() -equals(4) NEW(, ) -3.equals(4) COPY -3 NEW() -4 NEW() -3 equals 4 NEW(, ) -1 NEW() -2 NEW() -1 + 2 NEW(, ) -a NEW() -true NEW() -a && true NEW(, ) -a NEW() -false NEW() -a || false NEW(, ) -{ 1 a 2.toLong() foo(a, 3) genfun() flfun {1} 3.equals(4) 3 equals 4 1 + 2 a && true a || false } COPY +1 : * NEW() +a : * NEW() +2 : {<: Number} NEW() +toLong() : * NEW() +2.toLong() : * COPY +a : Boolean NEW() +3 : Int NEW() +foo(a, 3) : * NEW(, ) +genfun() : * NEW() +{1} : {<: () -> Any} NEW() +flfun {1} : * NEW() +3 : OR{{<: Any}, {<: Any}} NEW() +4 : {<: Any?} NEW() +equals(4) : * NEW(, ) +3.equals(4) : * COPY +3 : OR{{<: Any}, {<: Any}} NEW() +4 : {<: Any?} NEW() +3 equals 4 : * NEW(, ) +1 : Int NEW() +2 : Int NEW() +1 + 2 : * NEW(, ) +a : Boolean NEW() +true : Boolean NEW() +a && true : * NEW(, ) +a : Boolean NEW() +false : Boolean NEW() +a || false : * NEW(, ) +{ 1 a 2.toLong() foo(a, 3) genfun() flfun {1} 3.equals(4) 3 equals 4 1 + 2 a && true a || false } : * COPY ===================== == anonymous_0 == {1} --------------------- -1 NEW() -1 COPY +1 : Int NEW() +1 : Int COPY ===================== == foo == fun foo(a : Boolean, b : Int) : Unit {} diff --git a/compiler/testData/cfg/basic/ShortFunction.values b/compiler/testData/cfg/basic/ShortFunction.values index c30b60d47d4..f2c7d17510e 100644 --- a/compiler/testData/cfg/basic/ShortFunction.values +++ b/compiler/testData/cfg/basic/ShortFunction.values @@ -1,5 +1,5 @@ == short == fun short() = 1 --------------------- -1 NEW() +1 : Int NEW() ===================== diff --git a/compiler/testData/cfg/bugs/jumpToOuterScope.values b/compiler/testData/cfg/bugs/jumpToOuterScope.values index 3f158c01d81..f58075297ea 100644 --- a/compiler/testData/cfg/bugs/jumpToOuterScope.values +++ b/compiler/testData/cfg/bugs/jumpToOuterScope.values @@ -7,9 +7,9 @@ fun foo(c: Collection) { } } --------------------- -c NEW() -{ break } NEW() -{ { break } } COPY +c : {<: Iterable} NEW() +{ break } : * NEW() +{ { break } } : * COPY ===================== == anonymous_0 == { diff --git a/compiler/testData/cfg/controlStructures/Finally.values b/compiler/testData/cfg/controlStructures/Finally.values index d6ffe48bae5..8765ede1b36 100644 --- a/compiler/testData/cfg/controlStructures/Finally.values +++ b/compiler/testData/cfg/controlStructures/Finally.values @@ -7,12 +7,12 @@ fun t1() { } } --------------------- -1 NEW() -{ 1 } COPY -2 NEW() -{ 2 } COPY -try { 1 } finally { 2 } COPY -{ try { 1 } finally { 2 } } COPY +1 : * NEW() +{ 1 } : * COPY +2 : * NEW() +{ 2 } : * COPY +try { 1 } finally { 2 } : * COPY +{ try { 1 } finally { 2 } } : * COPY ===================== == t2 == fun t2() { @@ -26,12 +26,12 @@ fun t2() { } } --------------------- -1 NEW() -2 NEW() -3 NEW() -2 > 3 NEW(, ) -2 NEW() -{ 2 } COPY +1 : * NEW() +2 : {<: Comparable} NEW() +3 : Int NEW() +2 > 3 : Boolean NEW(, ) +2 : * NEW() +{ 2 } : * COPY ===================== == t3 == fun t3() { @@ -47,14 +47,14 @@ fun t3() { } } --------------------- -1 NEW() -{ () -> if (2 > 3) { return@l } } NEW() -@l{ () -> if (2 > 3) { return@l } } COPY -{ 1 @l{ () -> if (2 > 3) { return@l } } } COPY -2 NEW() -{ 2 } COPY -try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } COPY -{ try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } } COPY +1 : * NEW() +{ () -> if (2 > 3) { return@l } } : * NEW() +@l{ () -> if (2 > 3) { return@l } } : * COPY +{ 1 @l{ () -> if (2 > 3) { return@l } } } : * COPY +2 : * NEW() +{ 2 } : * COPY +try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } : * COPY +{ try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } } : * COPY ===================== == anonymous_0 == { () -> @@ -63,9 +63,9 @@ try { 1 @l{ () -> if (2 > 3) { return@l } } } finally { 2 } COPY } } --------------------- -2 NEW() -3 NEW() -2 > 3 NEW(, ) +2 : {<: Comparable} NEW() +3 : Int NEW() +2 > 3 : Boolean NEW(, ) ===================== == t4 == fun t4() { @@ -81,9 +81,9 @@ fun t4() { } } --------------------- -{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } NEW() -@l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } COPY -{ @l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } } COPY +{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } : * NEW() +@l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } : * COPY +{ @l{ () -> try { 1 if (2 > 3) { return@l } } finally { 2 } } } : * COPY ===================== == anonymous_1 == { () -> @@ -97,12 +97,12 @@ fun t4() { } } --------------------- -1 NEW() -2 NEW() -3 NEW() -2 > 3 NEW(, ) -2 NEW() -{ 2 } COPY +1 : * NEW() +2 : {<: Comparable} NEW() +3 : Int NEW() +2 > 3 : Boolean NEW(, ) +2 : * NEW() +{ 2 } : * COPY ===================== == t5 == fun t5() { @@ -118,13 +118,13 @@ fun t5() { } } --------------------- -true NEW() -1 NEW() -2 NEW() -3 NEW() -2 > 3 NEW(, ) -2 NEW() -{ 2 } COPY +true : * NEW() +1 : * NEW() +2 : {<: Comparable} NEW() +3 : Int NEW() +2 > 3 : Boolean NEW(, ) +2 : * NEW() +{ 2 } : * COPY ===================== == t6 == fun t6() { @@ -141,17 +141,17 @@ fun t6() { } } --------------------- -true NEW() -1 NEW() -2 NEW() -3 NEW() -2 > 3 NEW(, ) -5 NEW() -{ @l while(true) { 1 if (2 > 3) { break @l } } 5 } COPY -2 NEW() -{ 2 } COPY -try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } COPY -{ try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } } COPY +true : * NEW() +1 : * NEW() +2 : {<: Comparable} NEW() +3 : Int NEW() +2 > 3 : Boolean NEW(, ) +5 : * NEW() +{ @l while(true) { 1 if (2 > 3) { break @l } } 5 } : * COPY +2 : * NEW() +{ 2 } : * COPY +try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } : * COPY +{ try { @l while(true) { 1 if (2 > 3) { break @l } } 5 } finally { 2 } } : * COPY ===================== == t7 == fun t7() { @@ -167,13 +167,13 @@ fun t7() { } } --------------------- -true NEW() -1 NEW() -2 NEW() -3 NEW() -2 > 3 NEW(, ) -2 NEW() -{ 2 } COPY +true : * NEW() +1 : * NEW() +2 : {<: Comparable} NEW() +3 : Int NEW() +2 > 3 : Boolean NEW(, ) +2 : * NEW() +{ 2 } : * COPY ===================== == t8 == fun t8(a : Int) { @@ -189,15 +189,15 @@ fun t8(a : Int) { } } --------------------- -1 NEW() -a NEW() -1..a NEW(, ) -1 NEW() -2 NEW() -3 NEW() -2 > 3 NEW(, ) -2 NEW() -{ 2 } COPY +1 : Int NEW() +a : Int NEW() +1..a : {<: Iterable} NEW(, ) +1 : * NEW() +2 : {<: Comparable} NEW() +3 : Int NEW() +2 > 3 : Boolean NEW(, ) +2 : * NEW() +{ 2 } : * COPY ===================== == t9 == fun t9(a : Int) { @@ -214,19 +214,19 @@ fun t9(a : Int) { } } --------------------- -1 NEW() -a NEW() -1..a NEW(, ) -1 NEW() -2 NEW() -3 NEW() -2 > 3 NEW(, ) -5 NEW() -{ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } COPY -2 NEW() -{ 2 } COPY -try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } COPY -{ try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } } COPY +1 : Int NEW() +a : Int NEW() +1..a : {<: Iterable} NEW(, ) +1 : * NEW() +2 : {<: Comparable} NEW() +3 : Int NEW() +2 > 3 : Boolean NEW(, ) +5 : * NEW() +{ @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } : * COPY +2 : * NEW() +{ 2 } : * COPY +try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } : * COPY +{ try { @l for (i in 1..a) { 1 if (2 > 3) { continue @l } } 5 } finally { 2 } } : * COPY ===================== == t10 == fun t10(a : Int) { @@ -242,15 +242,15 @@ fun t10(a : Int) { } } --------------------- -1 NEW() -a NEW() -1..a NEW(, ) -1 NEW() -2 NEW() -3 NEW() -2 > 3 NEW(, ) -2 NEW() -{ 2 } COPY +1 : Int NEW() +a : Int NEW() +1..a : {<: Iterable} NEW(, ) +1 : * NEW() +2 : {<: Comparable} NEW() +3 : Int NEW() +2 > 3 : Boolean NEW(, ) +2 : * NEW() +{ 2 } : * COPY ===================== == t11 == fun t11() { @@ -262,8 +262,8 @@ fun t11() { } } --------------------- -1 NEW() -2 NEW() +1 : * NEW() +2 : Unit NEW() ===================== == t12 == fun t12() : Int { @@ -275,10 +275,10 @@ fun t12() : Int { } } --------------------- -1 NEW() -3 NEW() -doSmth(3) NEW() -{ doSmth(3) } COPY +1 : Int NEW() +3 : Int NEW() +doSmth(3) : * NEW() +{ doSmth(3) } : * COPY ===================== == t13 == fun t13() : Int { @@ -293,15 +293,15 @@ fun t13() : Int { } } --------------------- -1 NEW() -2 NEW() -doSmth(2) NEW() -{ doSmth(2) } COPY -3 NEW() -doSmth(3) NEW() -{ doSmth(3) } COPY -try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) } COPY -{ try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) } } COPY +1 : Int NEW() +2 : Int NEW() +doSmth(2) : * NEW() +{ doSmth(2) } : * COPY +3 : Int NEW() +doSmth(3) : * NEW() +{ doSmth(3) } : * COPY +try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) } : * COPY +{ try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } finally { doSmth(3) } } : * COPY ===================== == t14 == fun t14() : Int { @@ -313,12 +313,12 @@ fun t14() : Int { } } --------------------- -1 NEW() -2 NEW() -doSmth(2) NEW() -{ doSmth(2) } COPY -try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } COPY -{ try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } } COPY +1 : Int NEW() +2 : Int NEW() +doSmth(2) : * NEW() +{ doSmth(2) } : * COPY +try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } : * COPY +{ try { return 1 } catch (e: UnsupportedOperationException) { doSmth(2) } } : * COPY ===================== == t15 == fun t15() : Int { @@ -333,11 +333,11 @@ fun t15() : Int { } } --------------------- -1 NEW() -2 NEW() -3 NEW() -doSmth(3) NEW() -{ doSmth(3) } COPY +1 : Int NEW() +2 : Int NEW() +3 : Int NEW() +doSmth(3) : * NEW() +{ doSmth(3) } : * COPY ===================== == t16 == fun t16() : Int { @@ -352,15 +352,15 @@ fun t16() : Int { } } --------------------- -1 NEW() -doSmth(1) NEW() -{ doSmth(1) } COPY -2 NEW() -3 NEW() -doSmth(3) NEW() -{ doSmth(3) } COPY -try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } COPY -{ try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } } COPY +1 : Int NEW() +doSmth(1) : * NEW() +{ doSmth(1) } : * COPY +2 : Int NEW() +3 : Int NEW() +doSmth(3) : * NEW() +{ doSmth(3) } : * COPY +try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } : * COPY +{ try { doSmth(1) } catch (e: UnsupportedOperationException) { return 2 } finally { doSmth(3) } } : * COPY ===================== == doSmth == fun doSmth(i: Int) { diff --git a/compiler/testData/cfg/controlStructures/FinallyTestCopy.values b/compiler/testData/cfg/controlStructures/FinallyTestCopy.values index 9a622cdbac2..e49fa806b52 100644 --- a/compiler/testData/cfg/controlStructures/FinallyTestCopy.values +++ b/compiler/testData/cfg/controlStructures/FinallyTestCopy.values @@ -30,15 +30,15 @@ fun testCopy1() : Int { } } --------------------- -doSmth() NEW() -{ doSmth() } COPY -doSmth1() NEW() -{ doSmth1() } COPY -doSmth2() NEW() -{ doSmth2() } COPY -1 NEW() -try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { return 1 } NEW(, , ) -{ try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { return 1 } } COPY +doSmth() : * NEW() +{ doSmth() } : * COPY +doSmth1() : * NEW() +{ doSmth1() } : * COPY +doSmth2() : * NEW() +{ doSmth2() } : * COPY +1 : Int NEW() +try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { return 1 } : * NEW(, , ) +{ try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { return 1 } } : * COPY ===================== == testCopy2 == fun testCopy2() { @@ -59,16 +59,16 @@ fun testCopy2() { } } --------------------- -cond() NEW() -doSmth() NEW() -{ doSmth() } COPY -doSmth1() NEW() -{ doSmth1() } COPY -doSmth2() NEW() -{ doSmth2() } COPY -cond() NEW() -try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { if (cond()) return else continue } NEW(, , ) -{ try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { if (cond()) return else continue } } COPY +cond() : Boolean NEW() +doSmth() : * NEW() +{ doSmth() } : * COPY +doSmth1() : * NEW() +{ doSmth1() } : * COPY +doSmth2() : * NEW() +{ doSmth2() } : * COPY +cond() : Boolean NEW() +try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { if (cond()) return else continue } : * NEW(, , ) +{ try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { if (cond()) return else continue } } : * COPY ===================== == testCopy3 == fun testCopy3() { @@ -86,15 +86,15 @@ fun testCopy3() { } } --------------------- -doSmth() NEW() -{ doSmth() } COPY -doSmth1() NEW() -{ doSmth1() } COPY -doSmth2() NEW() -{ doSmth2() } COPY -cond() NEW() -try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { while (cond()); } NEW(, , ) -{ try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { while (cond()); } } COPY +doSmth() : * NEW() +{ doSmth() } : * COPY +doSmth1() : * NEW() +{ doSmth1() } : * COPY +doSmth2() : * NEW() +{ doSmth2() } : * COPY +cond() : Boolean NEW() +try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { while (cond()); } : * NEW(, , ) +{ try { doSmth() } catch (e: NullPointerException) { doSmth1() } catch (e: Exception) { doSmth2() } finally { while (cond()); } } : * COPY ===================== == doTestCopy4 == fun doTestCopy4(list: List?) : Int { @@ -107,11 +107,11 @@ fun doTestCopy4(list: List?) : Int { } } --------------------- -doSmth() NEW() -{ doSmth() } COPY -list NEW() -null NEW() -list != null NEW(, ) -try { doSmth() } finally { if(list != null) { } } COPY -{ try { doSmth() } finally { if(list != null) { } } } COPY +doSmth() : * NEW() +{ doSmth() } : * COPY +list : {<: Any?} NEW() +null : {<: Any?} NEW() +list != null : Boolean NEW(, ) +try { doSmth() } finally { if(list != null) { } } : * COPY +{ try { doSmth() } finally { if(list != null) { } } } : * COPY ===================== diff --git a/compiler/testData/cfg/controlStructures/For.values b/compiler/testData/cfg/controlStructures/For.values index c7b2ce12294..027b5496c73 100644 --- a/compiler/testData/cfg/controlStructures/For.values +++ b/compiler/testData/cfg/controlStructures/For.values @@ -5,12 +5,12 @@ fun t1() { } } --------------------- -1 NEW() -2 NEW() -1..2 NEW(, ) -i NEW() -doSmth(i) NEW() -{ doSmth(i) } COPY +1 : Int NEW() +2 : Int NEW() +1..2 : {<: Iterable} NEW(, ) +i : Int NEW() +doSmth(i) : * NEW() +{ doSmth(i) } : * COPY ===================== == doSmth == fun doSmth(i: Int) {} diff --git a/compiler/testData/cfg/controlStructures/If.values b/compiler/testData/cfg/controlStructures/If.values index f0055a9467d..e2c4f2cf276 100644 --- a/compiler/testData/cfg/controlStructures/If.values +++ b/compiler/testData/cfg/controlStructures/If.values @@ -16,16 +16,16 @@ fun t1(b: Boolean) { doSmth(r) } --------------------- -b NEW() -"s" NEW() -u NEW() -doSmth(u) NEW() -b NEW() -"s" NEW() -"t" NEW() -r NEW() -doSmth(r) NEW() -{ var u: String if (b) { u = "s" } doSmth(u) var r: String if (b) { r = "s" } else { r = "t" } doSmth(r) } COPY +b : Boolean NEW() +"s" : String NEW() +u : String NEW() +doSmth(u) : * NEW() +b : Boolean NEW() +"s" : String NEW() +"t" : String NEW() +r : String NEW() +doSmth(r) : * NEW() +{ var u: String if (b) { u = "s" } doSmth(u) var r: String if (b) { r = "s" } else { r = "t" } doSmth(r) } : * COPY ===================== == t2 == fun t2(b: Boolean) { @@ -39,12 +39,12 @@ fun t2(b: Boolean) { } } --------------------- -3 NEW() -b NEW() -i NEW() -doSmth(i) NEW() -i NEW() -i is Int NEW() +3 : Int NEW() +b : Boolean NEW() +i : String NEW() +doSmth(i) : * NEW() +i : * NEW() +i is Int : Boolean NEW() ===================== == doSmth == fun doSmth(s: String) {} diff --git a/compiler/testData/cfg/controlStructures/OnlyWhileInFunctionBody.values b/compiler/testData/cfg/controlStructures/OnlyWhileInFunctionBody.values index b01dad9a5e4..b6eaafa0d7c 100644 --- a/compiler/testData/cfg/controlStructures/OnlyWhileInFunctionBody.values +++ b/compiler/testData/cfg/controlStructures/OnlyWhileInFunctionBody.values @@ -5,11 +5,11 @@ fun main() { } } --------------------- -0 NEW() -1 NEW() -0 > 1 NEW(, ) -2 NEW() -{ 2 } COPY +0 : {<: Comparable} NEW() +1 : Int NEW() +0 > 1 : Boolean NEW(, ) +2 : * NEW() +{ 2 } : * COPY ===================== == dowhile == fun dowhile() { @@ -17,7 +17,7 @@ fun dowhile() { while(0 > 1) } --------------------- -0 NEW() -1 NEW() -0 > 1 NEW(, ) +0 : * NEW() +1 : * NEW() +0 > 1 : * NEW(, ) ===================== diff --git a/compiler/testData/cfg/controlStructures/returnsInWhen.values b/compiler/testData/cfg/controlStructures/returnsInWhen.values index 6fb7648cce6..f1835c8c05d 100644 --- a/compiler/testData/cfg/controlStructures/returnsInWhen.values +++ b/compiler/testData/cfg/controlStructures/returnsInWhen.values @@ -5,6 +5,6 @@ fun illegalWhenBlock(a: Any): Any { } } --------------------- -a NEW() -a NEW() +a : * NEW() +a : {<: Any} NEW() ===================== diff --git a/compiler/testData/cfg/conventions/bothReceivers.instructions b/compiler/testData/cfg/conventions/bothReceivers.instructions new file mode 100644 index 00000000000..ee01e13b419 --- /dev/null +++ b/compiler/testData/cfg/conventions/bothReceivers.instructions @@ -0,0 +1,65 @@ +== Bar == +class Bar { +} +--------------------- +L0: + 1 +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== Foo == +class Foo() { + fun Bar.invoke() {} +} +--------------------- +L0: + 1 +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== invoke == +fun Bar.invoke() {} +--------------------- +L0: + 1 + 2 mark({}) + read (Unit) +L1: + 1 NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== foobar == +fun foobar(f: Foo) { + Bar().f() +} +--------------------- +L0: + 1 + v(f: Foo) + magic(f: Foo) -> + w(f|) + 2 mark({ Bar().f() }) + mark(Bar().f()) + r(f) -> + mark(Bar()) + call(Bar, ) -> + mark(f()) + call(f, invoke|, ) -> +L1: + 1 NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== diff --git a/compiler/testData/cfg/conventions/bothReceivers.kt b/compiler/testData/cfg/conventions/bothReceivers.kt new file mode 100644 index 00000000000..1ad462cb71d --- /dev/null +++ b/compiler/testData/cfg/conventions/bothReceivers.kt @@ -0,0 +1,10 @@ +class Bar { +} + +class Foo() { + fun Bar.invoke() {} +} + +fun foobar(f: Foo) { + Bar().f() +} \ No newline at end of file diff --git a/compiler/testData/cfg/conventions/bothReceivers.values b/compiler/testData/cfg/conventions/bothReceivers.values new file mode 100644 index 00000000000..0e2db937727 --- /dev/null +++ b/compiler/testData/cfg/conventions/bothReceivers.values @@ -0,0 +1,26 @@ +== Bar == +class Bar { +} +--------------------- +===================== +== Foo == +class Foo() { + fun Bar.invoke() {} +} +--------------------- +===================== +== invoke == +fun Bar.invoke() {} +--------------------- +===================== +== foobar == +fun foobar(f: Foo) { + Bar().f() +} +--------------------- +Bar() : Bar NEW() +f : Foo NEW() +f() : * NEW(, ) +Bar().f() : * COPY +{ Bar().f() } : * COPY +===================== \ No newline at end of file diff --git a/compiler/testData/cfg/conventions/equals.values b/compiler/testData/cfg/conventions/equals.values index fde14f3d634..9d4a5bf3270 100644 --- a/compiler/testData/cfg/conventions/equals.values +++ b/compiler/testData/cfg/conventions/equals.values @@ -4,7 +4,7 @@ fun foo(a: Int, b: Int) { } } --------------------- -a NEW() -b NEW() -a == b NEW(, ) +a : OR{{<: Any}, {<: Any}} NEW() +b : {<: Any?} NEW() +a == b : Boolean NEW(, ) ===================== diff --git a/compiler/testData/cfg/conventions/incrementAtTheEnd.values b/compiler/testData/cfg/conventions/incrementAtTheEnd.values index af35d135232..daed10577df 100644 --- a/compiler/testData/cfg/conventions/incrementAtTheEnd.values +++ b/compiler/testData/cfg/conventions/incrementAtTheEnd.values @@ -4,8 +4,8 @@ fun foo() { i++ } --------------------- -1 NEW() -i NEW() -i++ COPY -{ var i = 1 i++ } COPY +1 : Int NEW() +i : Int NEW() +i++ : Int COPY +{ var i = 1 i++ } : Int COPY ===================== diff --git a/compiler/testData/cfg/conventions/invoke.values b/compiler/testData/cfg/conventions/invoke.values index 448531f5c64..02c3e5b3466 100644 --- a/compiler/testData/cfg/conventions/invoke.values +++ b/compiler/testData/cfg/conventions/invoke.values @@ -3,7 +3,7 @@ fun foo(f: () -> Unit) { f() } --------------------- -f NEW() -f() NEW() -{ f() } COPY +f : {<: () -> Unit} NEW() +f() : * NEW() +{ f() } : * COPY ===================== diff --git a/compiler/testData/cfg/conventions/notEqual.values b/compiler/testData/cfg/conventions/notEqual.values index 0ec5fe6e8a7..5f758f0157a 100644 --- a/compiler/testData/cfg/conventions/notEqual.values +++ b/compiler/testData/cfg/conventions/notEqual.values @@ -3,7 +3,7 @@ fun neq(a: Int, b: Int) { if (a != b) {} } --------------------- -a NEW() -b NEW() -a != b NEW(, ) +a : OR{{<: Any}, {<: Any}} NEW() +b : {<: Any?} NEW() +a != b : Boolean NEW(, ) ===================== diff --git a/compiler/testData/cfg/deadCode/DeadCode.values b/compiler/testData/cfg/deadCode/DeadCode.values index 994dd1d105f..addf7ec3995 100644 --- a/compiler/testData/cfg/deadCode/DeadCode.values +++ b/compiler/testData/cfg/deadCode/DeadCode.values @@ -4,7 +4,7 @@ fun test() { test() } --------------------- -Exception() NEW() -test() NEW() -{ throw Exception() test() } COPY +Exception() : {<: Throwable} NEW() +test() : * NEW() +{ throw Exception() test() } : * COPY ===================== diff --git a/compiler/testData/cfg/deadCode/returnInElvis.values b/compiler/testData/cfg/deadCode/returnInElvis.values index a2105a61f56..0a2dabc4721 100644 --- a/compiler/testData/cfg/deadCode/returnInElvis.values +++ b/compiler/testData/cfg/deadCode/returnInElvis.values @@ -3,7 +3,7 @@ fun foo() { return ?: null } --------------------- -null NEW() -return ?: null COPY -{ return ?: null } COPY +null : * NEW() +return ?: null : * COPY +{ return ?: null } : * COPY ===================== diff --git a/compiler/testData/cfg/deadCode/stringTemplate.values b/compiler/testData/cfg/deadCode/stringTemplate.values index b4c1c1b7c16..280634698cd 100644 --- a/compiler/testData/cfg/deadCode/stringTemplate.values +++ b/compiler/testData/cfg/deadCode/stringTemplate.values @@ -3,8 +3,8 @@ fun test() { "${throw Exception()} ${1}" } --------------------- -Exception() NEW() -1 NEW() -"${throw Exception()} ${1}" NEW() -{ "${throw Exception()} ${1}" } COPY +Exception() : {<: Throwable} NEW() +1 : * NEW() +"${throw Exception()} ${1}" : * NEW() +{ "${throw Exception()} ${1}" } : * COPY ===================== diff --git a/compiler/testData/cfg/declarations/classesAndObjects/AnonymousInitializers.values b/compiler/testData/cfg/declarations/classesAndObjects/AnonymousInitializers.values index 1f09331a566..886da7ea362 100644 --- a/compiler/testData/cfg/declarations/classesAndObjects/AnonymousInitializers.values +++ b/compiler/testData/cfg/declarations/classesAndObjects/AnonymousInitializers.values @@ -15,7 +15,7 @@ class AnonymousInitializers() { } } --------------------- -34 NEW() -12 NEW() -13 NEW() +34 : Int NEW() +12 : Int NEW() +13 : Int NEW() ===================== diff --git a/compiler/testData/cfg/declarations/functionLiterals/unusedFunctionLiteral.values b/compiler/testData/cfg/declarations/functionLiterals/unusedFunctionLiteral.values index e5a74bb024f..5ac4b35aefe 100644 --- a/compiler/testData/cfg/declarations/functionLiterals/unusedFunctionLiteral.values +++ b/compiler/testData/cfg/declarations/functionLiterals/unusedFunctionLiteral.values @@ -3,8 +3,8 @@ fun foo() { {} } --------------------- -{} NEW() -{ {} } COPY +{} : * NEW() +{ {} } : * COPY ===================== == anonymous_0 == {} diff --git a/compiler/testData/cfg/declarations/functions/FailFunction.values b/compiler/testData/cfg/declarations/functions/FailFunction.values index 062ee86dcf5..7a6b3c52016 100644 --- a/compiler/testData/cfg/declarations/functions/FailFunction.values +++ b/compiler/testData/cfg/declarations/functions/FailFunction.values @@ -3,6 +3,6 @@ fun fail() : Nothing { throw java.lang.RuntimeException() } --------------------- -RuntimeException() NEW() -java.lang.RuntimeException() COPY +RuntimeException() : {<: Throwable} NEW() +java.lang.RuntimeException() : {<: Throwable} COPY ===================== diff --git a/compiler/testData/cfg/declarations/functions/typeParameter.values b/compiler/testData/cfg/declarations/functions/typeParameter.values index 4ee00400258..ab80f5a4ee4 100644 --- a/compiler/testData/cfg/declarations/functions/typeParameter.values +++ b/compiler/testData/cfg/declarations/functions/typeParameter.values @@ -3,6 +3,6 @@ fun foo() { T } --------------------- -T NEW() -{ T } COPY +T : * NEW() +{ T } : * COPY ===================== diff --git a/compiler/testData/cfg/declarations/local/LocalDeclarations.values b/compiler/testData/cfg/declarations/local/LocalDeclarations.values index 4972ccbbe1b..9c4fe5cf211 100644 --- a/compiler/testData/cfg/declarations/local/LocalDeclarations.values +++ b/compiler/testData/cfg/declarations/local/LocalDeclarations.values @@ -17,7 +17,7 @@ class C() { } } --------------------- -1 NEW() +1 : Int NEW() ===================== == doSmth == fun doSmth(i: Int) {} @@ -33,8 +33,8 @@ fun test1() { } } --------------------- -1 NEW() -object { val x : Int { $x = 1 } } NEW() +1 : Int NEW() +object { val x : Int { $x = 1 } } : NEW() ===================== == O == object O { @@ -44,7 +44,7 @@ object O { } } --------------------- -1 NEW() +1 : Int NEW() ===================== == test2 == fun test2() { @@ -54,9 +54,9 @@ fun test2() { } } --------------------- -1 NEW() -b NEW() -object { val x = b } NEW() +1 : Int NEW() +b : Int NEW() +object { val x = b } : NEW() ===================== == test3 == fun test3() { @@ -68,14 +68,14 @@ fun test3() { } } --------------------- -object { val y : Int fun inner_bar() { y = 10 } } NEW() +object { val y : Int fun inner_bar() { y = 10 } } : NEW() ===================== == inner_bar == fun inner_bar() { y = 10 } --------------------- -10 NEW() +10 : Int NEW() ===================== == test4 == fun test4() { @@ -91,15 +91,15 @@ fun test4() { } } --------------------- -1 NEW() -object { val x : Int val y : Int { $x = 1 } fun ggg() { y = 10 } } NEW() +1 : Int NEW() +object { val x : Int val y : Int { $x = 1 } fun ggg() { y = 10 } } : NEW() ===================== == ggg == fun ggg() { y = 10 } --------------------- -10 NEW() +10 : Int NEW() ===================== == test5 == fun test5() { @@ -117,21 +117,21 @@ fun test5() { } } --------------------- -1 NEW() -2 NEW() -object { var x = 1 { $x = 2 } fun foo() { x = 3 } fun bar() { x = 4 } } NEW() +1 : Int NEW() +2 : Int NEW() +object { var x = 1 { $x = 2 } fun foo() { x = 3 } fun bar() { x = 4 } } : NEW() ===================== == foo == fun foo() { x = 3 } --------------------- -3 NEW() +3 : Int NEW() ===================== == bar == fun bar() { x = 4 } --------------------- -4 NEW() +4 : Int NEW() ===================== diff --git a/compiler/testData/cfg/declarations/local/ObjectExpression.values b/compiler/testData/cfg/declarations/local/ObjectExpression.values index deaf3419903..bf8c6041316 100644 --- a/compiler/testData/cfg/declarations/local/ObjectExpression.values +++ b/compiler/testData/cfg/declarations/local/ObjectExpression.values @@ -17,7 +17,7 @@ class B : A { == foo == override fun foo() = 10 --------------------- -10 NEW() +10 : Int NEW() ===================== == foo == fun foo(b: B) : Int { @@ -25,9 +25,9 @@ fun foo(b: B) : Int { return o.foo() } --------------------- -b NEW() -object : A by b {} NEW() -o NEW() -foo() NEW() -o.foo() COPY +b : * NEW() +object : A by b {} : NEW() +o : {<: A} NEW() +foo() : Int NEW() +o.foo() : Int COPY ===================== diff --git a/compiler/testData/cfg/declarations/local/localClass.values b/compiler/testData/cfg/declarations/local/localClass.values index 901eba15d72..4b9ec1b16cd 100644 --- a/compiler/testData/cfg/declarations/local/localClass.values +++ b/compiler/testData/cfg/declarations/local/localClass.values @@ -21,12 +21,12 @@ fun f() { } } --------------------- -"" NEW() +"" : String NEW() ===================== == loc == fun loc() { val x3 = "" } --------------------- -"" NEW() +"" : String NEW() ===================== diff --git a/compiler/testData/cfg/declarations/local/localProperty.values b/compiler/testData/cfg/declarations/local/localProperty.values index 3f3f9bf7ac5..bd5c69a29c0 100644 --- a/compiler/testData/cfg/declarations/local/localProperty.values +++ b/compiler/testData/cfg/declarations/local/localProperty.values @@ -16,5 +16,5 @@ get() { return b } --------------------- -b NEW() +b : Int NEW() ===================== diff --git a/compiler/testData/cfg/declarations/multiDeclaration/MultiDecl.values b/compiler/testData/cfg/declarations/multiDeclaration/MultiDecl.values index 0cf5a4b0acd..99a44889fa0 100644 --- a/compiler/testData/cfg/declarations/multiDeclaration/MultiDecl.values +++ b/compiler/testData/cfg/declarations/multiDeclaration/MultiDecl.values @@ -8,12 +8,12 @@ class C { == component1 == fun component1() = 1 --------------------- -1 NEW() +1 : Int NEW() ===================== == component2 == fun component2() = 2 --------------------- -2 NEW() +2 : Int NEW() ===================== == test == fun test(c: C) { @@ -21,8 +21,8 @@ fun test(c: C) { val d = 1 } --------------------- -a NEW() -b NEW() -c NEW() -1 NEW() +a : Int NEW() +b : Int NEW() +c : C NEW() +1 : Int NEW() ===================== diff --git a/compiler/testData/cfg/declarations/multiDeclaration/multiDeclarationWithError.values b/compiler/testData/cfg/declarations/multiDeclaration/multiDeclarationWithError.values index 71f56d9b567..cad29edf6e3 100644 --- a/compiler/testData/cfg/declarations/multiDeclaration/multiDeclarationWithError.values +++ b/compiler/testData/cfg/declarations/multiDeclaration/multiDeclarationWithError.values @@ -4,7 +4,7 @@ fun foo(x: Int) { a } --------------------- -x NEW() -a NEW() -{ val (a, b) = x a } COPY +x : * NEW() +a : * NEW() +{ val (a, b) = x a } : * COPY ===================== diff --git a/compiler/testData/cfg/declarations/properties/DelegatedProperty.values b/compiler/testData/cfg/declarations/properties/DelegatedProperty.values index 0cb0fefa23e..7197e993c66 100644 --- a/compiler/testData/cfg/declarations/properties/DelegatedProperty.values +++ b/compiler/testData/cfg/declarations/properties/DelegatedProperty.values @@ -7,15 +7,15 @@ class Delegate { == get == fun get(_this: Any, p: PropertyMetadata): Int = 0 --------------------- -0 NEW() +0 : Int NEW() ===================== == a == val a = Delegate() --------------------- -Delegate() NEW() +Delegate() : Delegate NEW() ===================== == b == val b by a --------------------- -a NEW() +a : * NEW() ===================== diff --git a/compiler/testData/cfg/declarations/properties/backingFieldAccess.values b/compiler/testData/cfg/declarations/properties/backingFieldAccess.values index 1b32ec1b88e..163de356aa2 100644 --- a/compiler/testData/cfg/declarations/properties/backingFieldAccess.values +++ b/compiler/testData/cfg/declarations/properties/backingFieldAccess.values @@ -8,6 +8,6 @@ class C { } } --------------------- -$a NEW() -{ $a } COPY +$a : * NEW() +{ $a } : * COPY ===================== diff --git a/compiler/testData/cfg/declarations/properties/backingFieldQualifiedWithThis.values b/compiler/testData/cfg/declarations/properties/backingFieldQualifiedWithThis.values index 1e5f253264f..6c6f52e2a37 100644 --- a/compiler/testData/cfg/declarations/properties/backingFieldQualifiedWithThis.values +++ b/compiler/testData/cfg/declarations/properties/backingFieldQualifiedWithThis.values @@ -8,10 +8,10 @@ abstract class Bar { == foo == fun foo() = "foo" + this.$bar --------------------- -"foo" NEW() -this COPY -this NEW() -$bar NEW() -this.$bar COPY -"foo" + this.$bar NEW(, ) +"foo" : String NEW() +this : {<: Bar} COPY +this : {<: Bar} NEW() +$bar : {<: Any?} NEW() +this.$bar : {<: Any?} COPY +"foo" + this.$bar : String NEW(, ) ===================== diff --git a/compiler/testData/cfg/expressions/Assignments.values b/compiler/testData/cfg/expressions/Assignments.values index 80cc3e47236..f532d04aa5c 100644 --- a/compiler/testData/cfg/expressions/Assignments.values +++ b/compiler/testData/cfg/expressions/Assignments.values @@ -20,28 +20,28 @@ fun assignments() : Unit { t.x += 1 } --------------------- -1 NEW() -2 NEW() -x NEW() -2 NEW() -x += 2 NEW(, ) -true NEW() -1 NEW() -2 NEW() -if (true) 1 else 2 NEW(, ) -true NEW() -false NEW() -true && false NEW(, ) -false NEW() -true NEW() -false && true NEW(, ) -Test() NEW() -t NEW() -1 NEW() -t NEW() -x NEW() -t.x COPY -1 NEW() -t.x += 1 NEW(, ) -{ var x = 1 x = 2 x += 2 x = if (true) 1 else 2 val y = true && false val z = false && true val t = Test(); t.x = 1 t.x += 1 } COPY +1 : Int NEW() +2 : Int NEW() +x : Int NEW() +2 : Int NEW() +x += 2 : Int NEW(, ) +true : Boolean NEW() +1 : Int NEW() +2 : Int NEW() +if (true) 1 else 2 : Int NEW(, ) +true : Boolean NEW() +false : Boolean NEW() +true && false : Boolean NEW(, ) +false : Boolean NEW() +true : Boolean NEW() +false && true : Boolean NEW(, ) +Test() : Test NEW() +t : Test NEW() +1 : Int NEW() +t : Test NEW() +x : Int NEW() +t.x : Int COPY +1 : Int NEW() +t.x += 1 : Int NEW(, ) +{ var x = 1 x = 2 x += 2 x = if (true) 1 else 2 val y = true && false val z = false && true val t = Test(); t.x = 1 t.x += 1 } : Int COPY ===================== diff --git a/compiler/testData/cfg/expressions/LazyBooleans.values b/compiler/testData/cfg/expressions/LazyBooleans.values index fcd696e1030..b432c87df86 100644 --- a/compiler/testData/cfg/expressions/LazyBooleans.values +++ b/compiler/testData/cfg/expressions/LazyBooleans.values @@ -17,34 +17,34 @@ fun lazyBooleans(a : Boolean, b : Boolean) : Unit { 14 } --------------------- -a NEW() -1 NEW() -{ 1 } COPY -2 NEW() -{ 2 } COPY -if (a) { 1 } else { 2 } NEW(, ) -3 NEW() -a NEW() -b NEW() -a && b NEW(, ) -5 NEW() -6 NEW() -if (a && b) 5 else 6 NEW(, ) -7 NEW() -a NEW() -b NEW() -a || b NEW(, ) -8 NEW() -9 NEW() -if (a || b) 8 else 9 NEW(, ) -10 NEW() -a NEW() -11 NEW() -if (a) 11 COPY -12 NEW() -a NEW() -13 NEW() -if (a) else 13 COPY -14 NEW() -{ if (a) { 1 } else { 2 } 3 if (a && b) 5 else 6 7 if (a || b) 8 else 9 10 if (a) 11 12 if (a) else 13 14 } COPY +a : Boolean NEW() +1 : * NEW() +{ 1 } : * COPY +2 : * NEW() +{ 2 } : * COPY +if (a) { 1 } else { 2 } : * NEW(, ) +3 : * NEW() +a : Boolean NEW() +b : Boolean NEW() +a && b : Boolean NEW(, ) +5 : * NEW() +6 : * NEW() +if (a && b) 5 else 6 : * NEW(, ) +7 : * NEW() +a : Boolean NEW() +b : Boolean NEW() +a || b : Boolean NEW(, ) +8 : * NEW() +9 : * NEW() +if (a || b) 8 else 9 : * NEW(, ) +10 : * NEW() +a : Boolean NEW() +11 : * NEW() +if (a) 11 : * COPY +12 : * NEW() +a : Boolean NEW() +13 : * NEW() +if (a) else 13 : * COPY +14 : * NEW() +{ if (a) { 1 } else { 2 } 3 if (a && b) 5 else 6 7 if (a || b) 8 else 9 10 if (a) 11 12 if (a) else 13 14 } : * COPY ===================== diff --git a/compiler/testData/cfg/expressions/ReturnFromExpression.values b/compiler/testData/cfg/expressions/ReturnFromExpression.values index fefb44006b9..dc871c3aa57 100644 --- a/compiler/testData/cfg/expressions/ReturnFromExpression.values +++ b/compiler/testData/cfg/expressions/ReturnFromExpression.values @@ -3,8 +3,8 @@ fun blockAndAndMismatch() : Boolean { false || (return false) } --------------------- -false NEW() -false NEW() -false || (return false) NEW() -{ false || (return false) } COPY +false : Boolean NEW() +false : Boolean NEW() +false || (return false) : * NEW() +{ false || (return false) } : * COPY ===================== diff --git a/compiler/testData/cfg/expressions/assignmentToThis.values b/compiler/testData/cfg/expressions/assignmentToThis.values index 45d0ff07d35..2571d44967f 100644 --- a/compiler/testData/cfg/expressions/assignmentToThis.values +++ b/compiler/testData/cfg/expressions/assignmentToThis.values @@ -3,5 +3,5 @@ fun Int.bar(c: C) { this = c } --------------------- -c NEW() +c : * NEW() ===================== diff --git a/compiler/testData/cfg/expressions/chainedQualifiedExpression.values b/compiler/testData/cfg/expressions/chainedQualifiedExpression.values index 54a5ded8e24..03ec485f499 100644 --- a/compiler/testData/cfg/expressions/chainedQualifiedExpression.values +++ b/compiler/testData/cfg/expressions/chainedQualifiedExpression.values @@ -50,141 +50,141 @@ public open class JetKeywordCompletionContributor() { } } --------------------- -1.0 NEW() -BunchKeywordRegister() NEW() -ABSTRACT_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) COPY -FINAL_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) COPY -OPEN_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) COPY -INTERNAL_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) COPY -PRIVATE_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) COPY -PROTECTED_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) COPY -PUBLIC_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) COPY -CLASS_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) COPY -ENUM_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) COPY -FUN_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) COPY -GET_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) COPY -SET_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) COPY -TRAIT_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) COPY -VAL_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) COPY -VAR_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) COPY -TYPE_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -inTopLevel NEW() -add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) NEW(, , , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) COPY -IMPORT_KEYWORD NEW() -inTopLevel NEW() -add(IMPORT_KEYWORD, inTopLevel) NEW(, , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) COPY -PACKAGE_KEYWORD NEW() -inTopLevel NEW() -add(PACKAGE_KEYWORD, inTopLevel) NEW(, , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) COPY -OVERRIDE_KEYWORD NEW() -inTopLevel NEW() -add(OVERRIDE_KEYWORD, inTopLevel) NEW(, , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) .add(OVERRIDE_KEYWORD, inTopLevel) COPY -IN_KEYWORD NEW() -inTopLevel NEW() -inTopLevel NEW() -add(IN_KEYWORD, inTopLevel, inTopLevel) NEW(, , , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) .add(OVERRIDE_KEYWORD, inTopLevel) .add(IN_KEYWORD, inTopLevel, inTopLevel) COPY -OUT_KEYWORD NEW() -inTopLevel NEW() -add(OUT_KEYWORD, inTopLevel) NEW(, , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) .add(OVERRIDE_KEYWORD, inTopLevel) .add(IN_KEYWORD, inTopLevel, inTopLevel) .add(OUT_KEYWORD, inTopLevel) COPY -OBJECT_KEYWORD NEW() -unresolvedCode NEW() -add(OBJECT_KEYWORD, unresolvedCode) NEW(, , ) -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) .add(OVERRIDE_KEYWORD, inTopLevel) .add(IN_KEYWORD, inTopLevel, inTopLevel) .add(OUT_KEYWORD, inTopLevel) .add(OBJECT_KEYWORD, unresolvedCode) COPY -registerAll() NEW() -BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) .add(OVERRIDE_KEYWORD, inTopLevel) .add(IN_KEYWORD, inTopLevel, inTopLevel) .add(OUT_KEYWORD, inTopLevel) .add(OBJECT_KEYWORD, unresolvedCode) .registerAll() COPY -{ val inTopLevel = 1.0 BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) .add(OVERRIDE_KEYWORD, inTopLevel) .add(IN_KEYWORD, inTopLevel, inTopLevel) .add(OUT_KEYWORD, inTopLevel) .add(OBJECT_KEYWORD, unresolvedCode) .registerAll() } COPY +1.0 : Double NEW() +BunchKeywordRegister() : JetKeywordCompletionContributor.BunchKeywordRegister NEW() +ABSTRACT_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +FINAL_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +OPEN_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +INTERNAL_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +PRIVATE_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +PROTECTED_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +PUBLIC_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +CLASS_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +ENUM_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +FUN_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +GET_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +SET_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +TRAIT_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +VAL_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +VAR_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +TYPE_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +IMPORT_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +add(IMPORT_KEYWORD, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +PACKAGE_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +add(PACKAGE_KEYWORD, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +OVERRIDE_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +add(OVERRIDE_KEYWORD, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) .add(OVERRIDE_KEYWORD, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +IN_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +inTopLevel : Double NEW() +add(IN_KEYWORD, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) .add(OVERRIDE_KEYWORD, inTopLevel) .add(IN_KEYWORD, inTopLevel, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +OUT_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +inTopLevel : Double NEW() +add(OUT_KEYWORD, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) .add(OVERRIDE_KEYWORD, inTopLevel) .add(IN_KEYWORD, inTopLevel, inTopLevel) .add(OUT_KEYWORD, inTopLevel) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +OBJECT_KEYWORD : {<: [ERROR : Type annotation was missing]} NEW() +unresolvedCode : Double NEW() +add(OBJECT_KEYWORD, unresolvedCode) : JetKeywordCompletionContributor.BunchKeywordRegister NEW(, , ) +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) .add(OVERRIDE_KEYWORD, inTopLevel) .add(IN_KEYWORD, inTopLevel, inTopLevel) .add(OUT_KEYWORD, inTopLevel) .add(OBJECT_KEYWORD, unresolvedCode) : JetKeywordCompletionContributor.BunchKeywordRegister COPY +registerAll() : * NEW() +BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) .add(OVERRIDE_KEYWORD, inTopLevel) .add(IN_KEYWORD, inTopLevel, inTopLevel) .add(OUT_KEYWORD, inTopLevel) .add(OBJECT_KEYWORD, unresolvedCode) .registerAll() : * COPY +{ val inTopLevel = 1.0 BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel) .add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(IMPORT_KEYWORD, inTopLevel) .add(PACKAGE_KEYWORD, inTopLevel) .add(OVERRIDE_KEYWORD, inTopLevel) .add(IN_KEYWORD, inTopLevel, inTopLevel) .add(OUT_KEYWORD, inTopLevel) .add(OBJECT_KEYWORD, unresolvedCode) .registerAll() } : * COPY ===================== == ABSTRACT_KEYWORD == val ABSTRACT_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == FINAL_KEYWORD == val FINAL_KEYWORD OPEN_KEYWORD = JetToken() @@ -193,100 +193,100 @@ val FINAL_KEYWORD OPEN_KEYWORD = JetToken() == OPEN_KEYWORD == val OPEN_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == INTERNAL_KEYWORD == val INTERNAL_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == PRIVATE_KEYWORD == val PRIVATE_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == PROTECTED_KEYWORD == val PROTECTED_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == PUBLIC_KEYWORD == val PUBLIC_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == CLASS_KEYWORD == val CLASS_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == ENUM_KEYWORD == val ENUM_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == FUN_KEYWORD == val FUN_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == GET_KEYWORD == val GET_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == SET_KEYWORD == val SET_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == TRAIT_KEYWORD == val TRAIT_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == VAL_KEYWORD == val VAL_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == VAR_KEYWORD == val VAR_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == TYPE_KEYWORD == val TYPE_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == IMPORT_KEYWORD == val IMPORT_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == PACKAGE_KEYWORD == val PACKAGE_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == OVERRIDE_KEYWORD == val OVERRIDE_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == IN_KEYWORD == val IN_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == OUT_KEYWORD == val OUT_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== == OBJECT_KEYWORD == val OBJECT_KEYWORD = JetToken() --------------------- -JetToken() NEW() +JetToken() : JetToken NEW() ===================== diff --git a/compiler/testData/cfg/expressions/expressionAsFunction.values b/compiler/testData/cfg/expressions/expressionAsFunction.values index 2d458dfdcc0..52a6534275b 100644 --- a/compiler/testData/cfg/expressions/expressionAsFunction.values +++ b/compiler/testData/cfg/expressions/expressionAsFunction.values @@ -3,8 +3,8 @@ fun invoke(f: () -> Unit) { (f)() } --------------------- -f NEW() -(f) COPY -(f)() NEW() -{ (f)() } COPY +f : {<: () -> Unit} NEW() +(f) : {<: () -> Unit} COPY +(f)() : * NEW() +{ (f)() } : * COPY ===================== diff --git a/compiler/testData/cfg/expressions/incdec.values b/compiler/testData/cfg/expressions/incdec.values index f593461f745..060a72f960d 100644 --- a/compiler/testData/cfg/expressions/incdec.values +++ b/compiler/testData/cfg/expressions/incdec.values @@ -13,18 +13,18 @@ fun foo() { bar(--a) } --------------------- -1 NEW() -a NEW() -a++ COPY -bar(a++) NEW() -a NEW() -a-- COPY -bar(a--) NEW() -a NEW() -++a NEW() -bar(++a) NEW() -a NEW() ---a NEW() -bar(--a) NEW() -{ var a = 1 bar(a++) bar(a--) bar(++a) bar(--a) } COPY -===================== \ No newline at end of file +1 : Int NEW() +a : Int NEW() +a++ : Int COPY +bar(a++) : * NEW() +a : Int NEW() +a-- : Int COPY +bar(a--) : * NEW() +a : Int NEW() +++a : Int NEW() +bar(++a) : * NEW() +a : Int NEW() +--a : Int NEW() +bar(--a) : * NEW() +{ var a = 1 bar(a++) bar(a--) bar(++a) bar(--a) } : * COPY +===================== diff --git a/compiler/testData/cfg/expressions/nothingExpr.values b/compiler/testData/cfg/expressions/nothingExpr.values index 11eb2496563..4cd3916aecd 100644 --- a/compiler/testData/cfg/expressions/nothingExpr.values +++ b/compiler/testData/cfg/expressions/nothingExpr.values @@ -5,7 +5,7 @@ fun Any?.doSomething() {} == bar == fun bar(): Nothing = throw Exception() --------------------- -Exception() NEW() +Exception() : {<: Throwable} NEW() ===================== == foo == fun foo() { @@ -13,11 +13,11 @@ fun foo() { bar().doSomething } --------------------- -null NEW() -null!! NEW() -doSomething() NEW() -null!!.doSomething() COPY -doSomething NEW() -bar().doSomething COPY -{ null!!.doSomething() bar().doSomething } COPY +null : * NEW() +null!! : * NEW() +doSomething() : * NEW() +null!!.doSomething() : * COPY +doSomething : * NEW() +bar().doSomething : * COPY +{ null!!.doSomething() bar().doSomething } : * COPY ===================== diff --git a/compiler/testData/cfg/expressions/propertySafeCall.values b/compiler/testData/cfg/expressions/propertySafeCall.values index 80da9017c57..a288285f8f4 100644 --- a/compiler/testData/cfg/expressions/propertySafeCall.values +++ b/compiler/testData/cfg/expressions/propertySafeCall.values @@ -3,8 +3,8 @@ fun test(s: String?) { s?.length } --------------------- -s NEW() -length NEW() -s?.length COPY -{ s?.length } COPY +s : {<: CharSequence?} NEW() +length : * NEW() +s?.length : * COPY +{ s?.length } : * COPY ===================== diff --git a/compiler/testData/cfg/expressions/qualifiedExpressionWithoutSelector.values b/compiler/testData/cfg/expressions/qualifiedExpressionWithoutSelector.values index 8ac8e57cef1..71888c1db6a 100644 --- a/compiler/testData/cfg/expressions/qualifiedExpressionWithoutSelector.values +++ b/compiler/testData/cfg/expressions/qualifiedExpressionWithoutSelector.values @@ -3,7 +3,7 @@ fun foo(s: String) { s. } --------------------- -s NEW() -s. NEW() -{ s. } COPY +s : * NEW() +s. : * NEW() +{ s. } : * COPY ===================== diff --git a/compiler/testData/cfg/expressions/thisExpression.values b/compiler/testData/cfg/expressions/thisExpression.values index 36c7359fc2e..a1db0a07d38 100644 --- a/compiler/testData/cfg/expressions/thisExpression.values +++ b/compiler/testData/cfg/expressions/thisExpression.values @@ -3,6 +3,6 @@ fun Function0.foo() { this() } --------------------- -this() NEW() -{ this() } COPY +this() : * NEW() +{ this() } : * COPY ===================== diff --git a/compiler/testData/cfg/expressions/unresolvedCall.values b/compiler/testData/cfg/expressions/unresolvedCall.values index 54739cc2bc7..e7c190cc644 100644 --- a/compiler/testData/cfg/expressions/unresolvedCall.values +++ b/compiler/testData/cfg/expressions/unresolvedCall.values @@ -3,8 +3,8 @@ fun test(a: Any) { a.foo() } --------------------- -a NEW() -foo() NEW() -a.foo() COPY -{ a.foo() } COPY +a : * NEW() +foo() : * NEW() +a.foo() : * COPY +{ a.foo() } : * COPY ===================== diff --git a/compiler/testData/cfg/expressions/unresolvedProperty.values b/compiler/testData/cfg/expressions/unresolvedProperty.values index 242d96f7738..a9903e08e05 100644 --- a/compiler/testData/cfg/expressions/unresolvedProperty.values +++ b/compiler/testData/cfg/expressions/unresolvedProperty.values @@ -3,8 +3,8 @@ fun test(a: Any) { a.foo } --------------------- -a NEW() -foo NEW() -a.foo COPY -{ a.foo } COPY +a : * NEW() +foo : * NEW() +a.foo : * COPY +{ a.foo } : * COPY ===================== diff --git a/compiler/testData/cfg/expressions/unusedExpressionSimpleName.values b/compiler/testData/cfg/expressions/unusedExpressionSimpleName.values index 21c1d285846..6e60c264f8f 100644 --- a/compiler/testData/cfg/expressions/unusedExpressionSimpleName.values +++ b/compiler/testData/cfg/expressions/unusedExpressionSimpleName.values @@ -3,6 +3,6 @@ fun main(arg : Array) { a } --------------------- -a NEW() -{ a } COPY +a : * NEW() +{ a } : * COPY ===================== diff --git a/compiler/testData/cfg/functions/DefaultValuesForArguments.values b/compiler/testData/cfg/functions/DefaultValuesForArguments.values index ce90d8c6d3c..1f17659350c 100644 --- a/compiler/testData/cfg/functions/DefaultValuesForArguments.values +++ b/compiler/testData/cfg/functions/DefaultValuesForArguments.values @@ -1,9 +1,9 @@ == foo == fun foo(i: Int = 1, j: Int) = i + j --------------------- -1 NEW() -i: Int = 1 NEW(, ) -i NEW() -j NEW() -i + j NEW(, ) +1 : Int NEW() +i: Int = 1 : Int NEW(, ) +i : Int NEW() +j : Int NEW() +i + j : Int NEW(, ) ===================== diff --git a/compiler/testData/cfg/tailCalls/finally.values b/compiler/testData/cfg/tailCalls/finally.values index 3c892f5ed05..164bdd47631 100644 --- a/compiler/testData/cfg/tailCalls/finally.values +++ b/compiler/testData/cfg/tailCalls/finally.values @@ -7,6 +7,6 @@ tailRecursive fun test() : Int { } } --------------------- -test() NEW() -{ test() } COPY +test() : * NEW() +{ test() } : * COPY ===================== diff --git a/compiler/testData/cfg/tailCalls/finallyWithReturn.values b/compiler/testData/cfg/tailCalls/finallyWithReturn.values index ae6a6469285..11c80464648 100644 --- a/compiler/testData/cfg/tailCalls/finallyWithReturn.values +++ b/compiler/testData/cfg/tailCalls/finallyWithReturn.values @@ -7,5 +7,5 @@ tailRecursive fun test() : Int { } } --------------------- -test() NEW() +test() : Int NEW() ===================== diff --git a/compiler/testData/cfg/tailCalls/sum.values b/compiler/testData/cfg/tailCalls/sum.values index 89681b86d73..7df26749973 100644 --- a/compiler/testData/cfg/tailCalls/sum.values +++ b/compiler/testData/cfg/tailCalls/sum.values @@ -4,17 +4,17 @@ tailRecursive fun sum(x: Long, sum: Long): Long { return sum(x - 1, sum + x) } --------------------- -x NEW() -0 NEW() -toLong() NEW() -0.toLong() COPY -x == 0.toLong() NEW(, ) -sum NEW() -x NEW() -1 NEW() -x - 1 NEW(, ) -sum NEW() -x NEW() -sum + x NEW(, ) -sum(x - 1, sum + x) NEW(, ) +x : OR{{<: Any}, {<: Any}} NEW() +0 : {<: Number} NEW() +toLong() : {<: Any?} NEW() +0.toLong() : {<: Any?} COPY +x == 0.toLong() : Boolean NEW(, ) +sum : Long NEW() +x : Long NEW() +1 : Int NEW() +x - 1 : Long NEW(, ) +sum : Long NEW() +x : Long NEW() +sum + x : Long NEW(, ) +sum(x - 1, sum + x) : Long NEW(, ) ===================== diff --git a/compiler/testData/cfg/tailCalls/try.values b/compiler/testData/cfg/tailCalls/try.values index 8605d77c651..269ddaa7c86 100644 --- a/compiler/testData/cfg/tailCalls/try.values +++ b/compiler/testData/cfg/tailCalls/try.values @@ -7,5 +7,5 @@ tailRecursive fun foo() { } } --------------------- -foo() NEW() +foo() : Unit NEW() ===================== diff --git a/compiler/testData/cfg/tailCalls/tryCatchFinally.values b/compiler/testData/cfg/tailCalls/tryCatchFinally.values index e555ef8ad11..08302009127 100644 --- a/compiler/testData/cfg/tailCalls/tryCatchFinally.values +++ b/compiler/testData/cfg/tailCalls/tryCatchFinally.values @@ -9,12 +9,12 @@ fun test() : Unit { } } --------------------- -test() NEW() -{ test() } COPY -test() NEW() -{ test() } COPY -test() NEW() -{ test() } COPY -try { test() } catch (any : Exception) { test() } finally { test() } NEW(, ) -{ try { test() } catch (any : Exception) { test() } finally { test() } } COPY +test() : * NEW() +{ test() } : * COPY +test() : * NEW() +{ test() } : * COPY +test() : * NEW() +{ test() } : * COPY +try { test() } catch (any : Exception) { test() } finally { test() } : * NEW(, ) +{ try { test() } catch (any : Exception) { test() } finally { test() } } : * COPY ===================== diff --git a/compiler/tests/org/jetbrains/jet/cfg/AbstractPseudoValueTest.kt b/compiler/tests/org/jetbrains/jet/cfg/AbstractPseudoValueTest.kt index f795983e262..f980f195c5b 100644 --- a/compiler/tests/org/jetbrains/jet/cfg/AbstractPseudoValueTest.kt +++ b/compiler/tests/org/jetbrains/jet/cfg/AbstractPseudoValueTest.kt @@ -22,9 +22,15 @@ import org.jetbrains.jet.lang.psi.JetElement import org.jetbrains.jet.lang.psi.JetTreeVisitorVoid import org.jetbrains.jet.lang.resolve.BindingContext import java.util.* +import org.jetbrains.jet.lang.cfg.pseudocode.collectValueUsages +import org.jetbrains.jet.lang.cfg.pseudocode.TypePredicate +import org.jetbrains.jet.lang.cfg.pseudocode.getExpectedTypePredicate public abstract class AbstractPseudoValueTest : AbstractPseudocodeTest() { override fun dumpInstructions(pseudocode: PseudocodeImpl, out: StringBuilder, bindingContext: BindingContext) { + val valueUsageMap = pseudocode.collectValueUsages() + val expectedTypePredicateMap = HashMap() + fun getElementToValueMap(pseudocode: PseudocodeImpl): Map { val elementToValues = LinkedHashMap() pseudocode.getCorrespondingElement().accept(object : JetTreeVisitorVoid() { @@ -44,6 +50,11 @@ public abstract class AbstractPseudoValueTest : AbstractPseudocodeTest() { fun elementText(element: JetElement): String = element.getText()!!.replaceAll("\\s+", " ") + fun valueDecl(value: PseudoValue): String { + val typePredicate = expectedTypePredicateMap.getOrPut(value) { getExpectedTypePredicate(value, valueUsageMap, bindingContext) } + return "${value.debugName}: $typePredicate" + } + fun valueDescription(element: JetElement, value: PseudoValue): String { return if (value.element != element) "COPY" else "NEW${value.createdAt.inputValues.makeString(", ", "(", ")")}" } @@ -52,14 +63,14 @@ public abstract class AbstractPseudoValueTest : AbstractPseudocodeTest() { if (elementToValues.isEmpty()) return val elementColumnWidth = elementToValues.keySet().map { elementText(it).length() }.max()!! - val valueColumnWidth = elementToValues.values().map { it.debugName.length() }.max()!! + val valueColumnWidth = elementToValues.values().map { valueDecl(it).length() }.max()!! val valueDescColumnWidth = elementToValues.entrySet().map { valueDescription(it.key, it.value).length }.max()!! for ((element, value) in elementToValues.entrySet()) { out .append("%1$-${elementColumnWidth}s".format(elementText(element))) .append(" ") - .append("%1$-${valueColumnWidth}s".format(value.debugName)) + .append("%1$-${valueColumnWidth}s".format(valueDecl(value))) .append(" ") .append("%1$-${valueDescColumnWidth}s".format(valueDescription(element, value))) .append("\n") diff --git a/compiler/tests/org/jetbrains/jet/cfg/ControlFlowTestGenerated.java b/compiler/tests/org/jetbrains/jet/cfg/ControlFlowTestGenerated.java index 4ea1536a2f6..b4f0f972387 100644 --- a/compiler/tests/org/jetbrains/jet/cfg/ControlFlowTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/cfg/ControlFlowTestGenerated.java @@ -155,6 +155,11 @@ public class ControlFlowTestGenerated extends AbstractControlFlowTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/cfg/conventions"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("bothReceivers.kt") + public void testBothReceivers() throws Exception { + doTest("compiler/testData/cfg/conventions/bothReceivers.kt"); + } + @TestMetadata("equals.kt") public void testEquals() throws Exception { doTest("compiler/testData/cfg/conventions/equals.kt"); diff --git a/compiler/tests/org/jetbrains/jet/cfg/PseudoValueTestGenerated.java b/compiler/tests/org/jetbrains/jet/cfg/PseudoValueTestGenerated.java index 326aedc5a82..f530d7e7c02 100644 --- a/compiler/tests/org/jetbrains/jet/cfg/PseudoValueTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/cfg/PseudoValueTestGenerated.java @@ -157,6 +157,11 @@ public class PseudoValueTestGenerated extends AbstractPseudoValueTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/cfg/conventions"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("bothReceivers.kt") + public void testBothReceivers() throws Exception { + doTest("compiler/testData/cfg/conventions/bothReceivers.kt"); + } + @TestMetadata("equals.kt") public void testEquals() throws Exception { doTest("compiler/testData/cfg/conventions/equals.kt"); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java b/core/descriptors/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java index 7c29790768c..578d071ffed 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java @@ -17,10 +17,13 @@ package org.jetbrains.jet.lang.resolve; import com.google.common.base.Predicate; -import com.google.common.collect.*; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import com.intellij.util.containers.ContainerUtil; import kotlin.Function1; import kotlin.Unit; +import kotlin.jvm.KotlinSignature; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; @@ -31,12 +34,11 @@ import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeConstructor; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; +import org.jetbrains.jet.utils.DFS; import java.util.*; -import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.CONFLICT; -import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.INCOMPATIBLE; -import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE; +import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.*; public class OverridingUtil { @@ -512,6 +514,32 @@ public class OverridingUtil { return maxVisibility; } + + @NotNull + @KotlinSignature("fun getTopmostOverridenDescriptors(originalDescriptor: CallableDescriptor): List") + public static List getTopmostOverridenDescriptors(@NotNull CallableDescriptor originalDescriptor) { + return DFS.dfs( + Collections.singletonList(originalDescriptor), + new DFS.Neighbors() { + @NotNull + @Override + public Iterable getNeighbors(CallableDescriptor current) { + return current.getOverriddenDescriptors(); + } + }, + new DFS.CollectingNodeHandler>( + new ArrayList() + ) { + @Override + public void afterChildren(CallableDescriptor current) { + if (current.getOverriddenDescriptors().isEmpty()) { + result.add(current); + } + } + } + ); + } + public interface DescriptorSink { void addToScope(@NotNull CallableMemberDescriptor fakeOverride); diff --git a/core/util.runtime/src/org/jetbrains/jet/utils/DFS.java b/core/util.runtime/src/org/jetbrains/jet/utils/DFS.java index 648b0215d5c..ca9103af9ff 100644 --- a/core/util.runtime/src/org/jetbrains/jet/utils/DFS.java +++ b/core/util.runtime/src/org/jetbrains/jet/utils/DFS.java @@ -91,7 +91,7 @@ public class DFS { public interface Neighbors { @KotlinSignature("fun getNeighbors(current: N): Iterable") @NotNull - Iterable getNeighbors(N current); + Iterable getNeighbors(N current); } public interface Visited {