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 c79df44bc81..388f3c57f5c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java @@ -18,7 +18,6 @@ package org.jetbrains.jet.lang.cfg; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; -import com.intellij.openapi.util.Ref; import com.intellij.psi.PsiElement; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; @@ -744,26 +743,18 @@ public class JetControlFlowProcessor { public void visitQualifiedExpressionVoid(@NotNull JetQualifiedExpression expression, CFPContext context) { mark(expression); JetExpression selectorExpression = expression.getSelectorExpression(); - if (selectorExpression != null) { - final Ref error = new Ref(false); - JetControlFlowBuilderAdapter adapter = new JetControlFlowBuilderAdapter() { - @NotNull - @Override - protected JetControlFlowBuilder getDelegateBuilder() { - return builder; - } - @Override - public void compilationError(@NotNull JetElement element, @NotNull String message) { - error.set(true); - super.compilationError(element, message); - } - }; - new CFPVisitor(adapter).generateInstructions(selectorExpression, NOT_IN_CONDITION); + if (selectorExpression == null) { + generateInstructions(expression.getReceiverExpression(), NOT_IN_CONDITION); + return; + } - if (error.get()) { - generateInstructions(expression.getReceiverExpression(), NOT_IN_CONDITION); - } + generateInstructions(selectorExpression, NOT_IN_CONDITION); + + // receiver was generated for resolvedCall + JetExpression calleeExpression = JetPsiUtil.getCalleeExpressionIfAny(selectorExpression); + if (calleeExpression == null || getResolvedCall(calleeExpression) == null) { + generateInstructions(expression.getReceiverExpression(), NOT_IN_CONDITION); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java index 843719a2c92..825d81cbc9a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java @@ -865,6 +865,9 @@ public class JetPsiUtil { @Nullable public static JetExpression getCalleeExpressionIfAny(@NotNull JetExpression expression) { + if (expression instanceof JetSimpleNameExpression) { + return expression; + } if (expression instanceof JetCallElement) { JetCallElement callExpression = (JetCallElement) expression; return callExpression.getCalleeExpression(); diff --git a/compiler/testData/cfg/chainedQualifiedExpression.instructions b/compiler/testData/cfg/chainedQualifiedExpression.instructions new file mode 100644 index 00000000000..4952be7efef --- /dev/null +++ b/compiler/testData/cfg/chainedQualifiedExpression.instructions @@ -0,0 +1,574 @@ +== JetToken == +class JetToken +--------------------- +L0: + +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== JetKeywordCompletionContributor == +public open class JetKeywordCompletionContributor() { + { + 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() + } + + private inner class BunchKeywordRegister() { + fun add(keyword= JetToken(), vararg filters: Double): BunchKeywordRegister { + } + + fun registerAll() { + } + } +} +--------------------- +L0: + + mark({ 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() }) + v(val inTopLevel = 1.0) + r(1.0) + w(inTopLevel) + mark(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()) + mark(registerAll()) + mark(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)) + mark(add(OBJECT_KEYWORD, unresolvedCode)) + mark(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)) + mark(add(OUT_KEYWORD, inTopLevel)) + mark(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)) + mark(add(IN_KEYWORD, inTopLevel, inTopLevel)) + mark(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)) + mark(add(OVERRIDE_KEYWORD, inTopLevel)) + mark(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)) + mark(add(PACKAGE_KEYWORD, inTopLevel)) + mark(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)) + mark(add(IMPORT_KEYWORD, inTopLevel)) + mark(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)) + mark(add(TYPE_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(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)) + mark(add(VAR_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(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)) + mark(add(VAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(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)) + mark(add(TRAIT_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(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)) + mark(add(SET_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(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)) + mark(add(GET_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(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)) + mark(add(FUN_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(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)) + mark(add(ENUM_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(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)) + mark(add(CLASS_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(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)) + mark(add(PUBLIC_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel)) + mark(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)) + mark(add(PROTECTED_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel)) + mark(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)) + mark(add(PRIVATE_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel)) + mark(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)) + mark(add(INTERNAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel, inTopLevel)) + mark(BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(add(OPEN_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel) .add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(add(FINAL_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(BunchKeywordRegister() .add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(add(ABSTRACT_KEYWORD, inTopLevel, inTopLevel, inTopLevel)) + mark(BunchKeywordRegister()) + call(BunchKeywordRegister, ) + r(ABSTRACT_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(FINAL_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(OPEN_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(INTERNAL_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(PRIVATE_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(PROTECTED_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(PUBLIC_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(CLASS_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(ENUM_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(FUN_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(GET_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(SET_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(TRAIT_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(VAL_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(VAR_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(TYPE_KEYWORD) + r(inTopLevel) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(IMPORT_KEYWORD) + r(inTopLevel) + call(add, add) + r(PACKAGE_KEYWORD) + r(inTopLevel) + call(add, add) + r(OVERRIDE_KEYWORD) + r(inTopLevel) + call(add, add) + r(IN_KEYWORD) + r(inTopLevel) + r(inTopLevel) + call(add, add) + r(OUT_KEYWORD) + r(inTopLevel) + call(add, add) + r(OBJECT_KEYWORD) + error(unresolvedCode, No resolved call) + call(add, add) + call(registerAll, registerAll) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== ABSTRACT_KEYWORD == +val ABSTRACT_KEYWORD = JetToken() +--------------------- +L0: + + v(val ABSTRACT_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(ABSTRACT_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== FINAL_KEYWORD == +val FINAL_KEYWORD OPEN_KEYWORD = JetToken() +--------------------- +L0: + + v(val FINAL_KEYWORD OPEN_KEYWORD = JetToken()) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== OPEN_KEYWORD == +val OPEN_KEYWORD = JetToken() +--------------------- +L0: + + v(val OPEN_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(OPEN_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== INTERNAL_KEYWORD == +val INTERNAL_KEYWORD = JetToken() +--------------------- +L0: + + v(val INTERNAL_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(INTERNAL_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== PRIVATE_KEYWORD == +val PRIVATE_KEYWORD = JetToken() +--------------------- +L0: + + v(val PRIVATE_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(PRIVATE_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== PROTECTED_KEYWORD == +val PROTECTED_KEYWORD = JetToken() +--------------------- +L0: + + v(val PROTECTED_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(PROTECTED_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== PUBLIC_KEYWORD == +val PUBLIC_KEYWORD = JetToken() +--------------------- +L0: + + v(val PUBLIC_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(PUBLIC_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== CLASS_KEYWORD == +val CLASS_KEYWORD = JetToken() +--------------------- +L0: + + v(val CLASS_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(CLASS_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== ENUM_KEYWORD == +val ENUM_KEYWORD = JetToken() +--------------------- +L0: + + v(val ENUM_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(ENUM_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== FUN_KEYWORD == +val FUN_KEYWORD = JetToken() +--------------------- +L0: + + v(val FUN_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(FUN_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== GET_KEYWORD == +val GET_KEYWORD = JetToken() +--------------------- +L0: + + v(val GET_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(GET_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== SET_KEYWORD == +val SET_KEYWORD = JetToken() +--------------------- +L0: + + v(val SET_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(SET_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== TRAIT_KEYWORD == +val TRAIT_KEYWORD = JetToken() +--------------------- +L0: + + v(val TRAIT_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(TRAIT_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== VAL_KEYWORD == +val VAL_KEYWORD = JetToken() +--------------------- +L0: + + v(val VAL_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(VAL_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== VAR_KEYWORD == +val VAR_KEYWORD = JetToken() +--------------------- +L0: + + v(val VAR_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(VAR_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== TYPE_KEYWORD == +val TYPE_KEYWORD = JetToken() +--------------------- +L0: + + v(val TYPE_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(TYPE_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== IMPORT_KEYWORD == +val IMPORT_KEYWORD = JetToken() +--------------------- +L0: + + v(val IMPORT_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(IMPORT_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== PACKAGE_KEYWORD == +val PACKAGE_KEYWORD = JetToken() +--------------------- +L0: + + v(val PACKAGE_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(PACKAGE_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== OVERRIDE_KEYWORD == +val OVERRIDE_KEYWORD = JetToken() +--------------------- +L0: + + v(val OVERRIDE_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(OVERRIDE_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== IN_KEYWORD == +val IN_KEYWORD = JetToken() +--------------------- +L0: + + v(val IN_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(IN_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== OUT_KEYWORD == +val OUT_KEYWORD = JetToken() +--------------------- +L0: + + v(val OUT_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(OUT_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== OBJECT_KEYWORD == +val OBJECT_KEYWORD = JetToken() +--------------------- +L0: + + v(val OBJECT_KEYWORD = JetToken()) + mark(JetToken()) + call(JetToken, ) + w(OBJECT_KEYWORD) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== diff --git a/compiler/testData/cfg/chainedQualifiedExpression.kt b/compiler/testData/cfg/chainedQualifiedExpression.kt new file mode 100644 index 00000000000..56d1c42f1b8 --- /dev/null +++ b/compiler/testData/cfg/chainedQualifiedExpression.kt @@ -0,0 +1,73 @@ +package test + +class JetToken + +public open class JetKeywordCompletionContributor() { + { + 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() + } + + private inner class BunchKeywordRegister() { + fun add(keyword= JetToken(), vararg filters: Double): BunchKeywordRegister { + } + + fun registerAll() { + } + } +} + +val ABSTRACT_KEYWORD = JetToken() +val FINAL_KEYWORD OPEN_KEYWORD = JetToken() +val OPEN_KEYWORD = JetToken() +val INTERNAL_KEYWORD = JetToken() +val PRIVATE_KEYWORD = JetToken() +val PROTECTED_KEYWORD = JetToken() +val PUBLIC_KEYWORD = JetToken() +val CLASS_KEYWORD = JetToken() +val ENUM_KEYWORD = JetToken() +val FUN_KEYWORD = JetToken() +val GET_KEYWORD = JetToken() +val SET_KEYWORD = JetToken() +val TRAIT_KEYWORD = JetToken() +val VAL_KEYWORD = JetToken() +val VAR_KEYWORD = JetToken() +val TYPE_KEYWORD = JetToken() +val IMPORT_KEYWORD = JetToken() +val PACKAGE_KEYWORD = JetToken() +val OVERRIDE_KEYWORD = JetToken() +val IN_KEYWORD = JetToken() +val OUT_KEYWORD = JetToken() +val OBJECT_KEYWORD = JetToken() diff --git a/compiler/testData/cfg/qualifiedExpressionWithoutSelector.instructions b/compiler/testData/cfg/qualifiedExpressionWithoutSelector.instructions new file mode 100644 index 00000000000..da2e827fef1 --- /dev/null +++ b/compiler/testData/cfg/qualifiedExpressionWithoutSelector.instructions @@ -0,0 +1,19 @@ +== foo == +fun foo(s: String) { + s. +} +--------------------- +L0: + + v(s: String) + w(s) + mark({ s. }) + mark(s.) + r(s) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== diff --git a/compiler/testData/cfg/qualifiedExpressionWithoutSelector.kt b/compiler/testData/cfg/qualifiedExpressionWithoutSelector.kt new file mode 100644 index 00000000000..9d58e68c8c3 --- /dev/null +++ b/compiler/testData/cfg/qualifiedExpressionWithoutSelector.kt @@ -0,0 +1,3 @@ +fun foo(s: String) { + s. +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/cfg/ControlFlowTestGenerated.java b/compiler/tests/org/jetbrains/jet/cfg/ControlFlowTestGenerated.java index 36fb9a19cd4..503ccbb2dde 100644 --- a/compiler/tests/org/jetbrains/jet/cfg/ControlFlowTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/cfg/ControlFlowTestGenerated.java @@ -92,6 +92,11 @@ public class ControlFlowTestGenerated extends AbstractControlFlowTest { doTest("compiler/testData/cfg/Basic.kt"); } + @TestMetadata("chainedQualifiedExpression.kt") + public void testChainedQualifiedExpression() throws Exception { + doTest("compiler/testData/cfg/chainedQualifiedExpression.kt"); + } + @TestMetadata("DelegatedProperty.kt") public void testDelegatedProperty() throws Exception { doTest("compiler/testData/cfg/DelegatedProperty.kt"); @@ -187,6 +192,11 @@ public class ControlFlowTestGenerated extends AbstractControlFlowTest { doTest("compiler/testData/cfg/propertySafeCall.kt"); } + @TestMetadata("qualifiedExpressionWithoutSelector.kt") + public void testQualifiedExpressionWithoutSelector() throws Exception { + doTest("compiler/testData/cfg/qualifiedExpressionWithoutSelector.kt"); + } + @TestMetadata("ReturnFromExpression.kt") public void testReturnFromExpression() throws Exception { doTest("compiler/testData/cfg/ReturnFromExpression.kt");