KT-1950 Don't complete if after val
KT-1894 Do not suggest "trait" after fun #KT-1950 fixed #KT-1894 fixed
This commit is contained in:
@@ -28,9 +28,7 @@ import com.intellij.patterns.PlatformPatterns;
|
|||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiWhiteSpace;
|
import com.intellij.psi.PsiWhiteSpace;
|
||||||
import com.intellij.psi.filters.*;
|
import com.intellij.psi.filters.*;
|
||||||
import com.intellij.psi.filters.position.FilterPattern;
|
import com.intellij.psi.filters.position.*;
|
||||||
import com.intellij.psi.filters.position.LeftNeighbour;
|
|
||||||
import com.intellij.psi.filters.position.PositionElementFilter;
|
|
||||||
import com.intellij.psi.impl.source.tree.LeafPsiElement;
|
import com.intellij.psi.impl.source.tree.LeafPsiElement;
|
||||||
import com.intellij.psi.util.PsiTreeUtil;
|
import com.intellij.psi.util.PsiTreeUtil;
|
||||||
import com.intellij.util.ArrayUtil;
|
import com.intellij.util.ArrayUtil;
|
||||||
@@ -131,7 +129,7 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
@Override
|
@Override
|
||||||
public boolean isAcceptable(Object element, PsiElement context) {
|
public boolean isAcceptable(Object element, PsiElement context) {
|
||||||
//noinspection unchecked
|
//noinspection unchecked
|
||||||
return PsiTreeUtil.getParentOfType(context, JetFile.class, false, JetClassBody.class, JetBlockExpression.class) != null &&
|
return PsiTreeUtil.getParentOfType(context, JetFile.class, false, JetClassBody.class, JetBlockExpression.class, JetFunction.class) != null &&
|
||||||
PsiTreeUtil.getParentOfType(context, JetParameterList.class, JetTypeParameterList.class) == null;
|
PsiTreeUtil.getParentOfType(context, JetParameterList.class, JetTypeParameterList.class) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,16 +194,32 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class InPropertyFilter implements ElementFilter {
|
private static class InPropertyBodyFilter implements ElementFilter {
|
||||||
@Override
|
@Override
|
||||||
public boolean isAcceptable(Object element, PsiElement context) {
|
public boolean isAcceptable(Object element, PsiElement context) {
|
||||||
return PsiTreeUtil.getParentOfType(context, JetProperty.class, false) != null;
|
if (!(element instanceof PsiElement)) return false;
|
||||||
|
JetProperty property = PsiTreeUtil.getParentOfType(context, JetProperty.class, false);
|
||||||
|
return property != null && isAfterName(property, (PsiElement) element);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isClassAcceptable(Class hintClass) {
|
public boolean isClassAcceptable(Class hintClass) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isAfterName(@NotNull JetProperty property, @NotNull PsiElement element) {
|
||||||
|
for (PsiElement child = property.getFirstChild(); child != null; child = child.getNextSibling()) {
|
||||||
|
if (PsiTreeUtil.isAncestor(child, element, false)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (child.getNode().getElementType() == IDENTIFIER) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class InWhenFilter implements ElementFilter {
|
private static class InWhenFilter implements ElementFilter {
|
||||||
@@ -284,7 +298,7 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
TYPE_KEYWORD,
|
TYPE_KEYWORD,
|
||||||
VARARG_KEYWORD, WHERE_KEYWORD);
|
VARARG_KEYWORD, WHERE_KEYWORD);
|
||||||
|
|
||||||
registerScopeKeywordsCompletion(new InPropertyFilter(),
|
registerScopeKeywordsCompletion(new InPropertyBodyFilter(),
|
||||||
ELSE_KEYWORD, FALSE_KEYWORD,
|
ELSE_KEYWORD, FALSE_KEYWORD,
|
||||||
NULL_KEYWORD, THIS_KEYWORD, TRUE_KEYWORD);
|
NULL_KEYWORD, THIS_KEYWORD, TRUE_KEYWORD);
|
||||||
|
|
||||||
@@ -307,7 +321,7 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
FUN_TEMPLATE, VAL_SIMPLE_TEMPLATE, VAR_SIMPLE_TEMPLATE,
|
FUN_TEMPLATE, VAL_SIMPLE_TEMPLATE, VAR_SIMPLE_TEMPLATE,
|
||||||
TRAIT_TEMPLATE, CLASS_TEMPLATE, FOR_TEMPLATE,
|
TRAIT_TEMPLATE, CLASS_TEMPLATE, FOR_TEMPLATE,
|
||||||
WHEN_TEMPLATE, WHILE_TEMPLATE, DO_WHILE_TEMPLATE, ENUM_CLASS_TEMPLATE);
|
WHEN_TEMPLATE, WHILE_TEMPLATE, DO_WHILE_TEMPLATE, ENUM_CLASS_TEMPLATE);
|
||||||
registerScopeKeywordsCompletion(new InPropertyFilter(),
|
registerScopeKeywordsCompletion(new InPropertyBodyFilter(),
|
||||||
IF_ELSE_ONELINE_TEMPLATE, WHEN_TEMPLATE);
|
IF_ELSE_ONELINE_TEMPLATE, WHEN_TEMPLATE);
|
||||||
registerScopeKeywordsCompletion(new AfterClassInClassBodyFilter(), false,
|
registerScopeKeywordsCompletion(new AfterClassInClassBodyFilter(), false,
|
||||||
CLASS_OBJECT_WITHOUT_CLASS_TEMPLATE);
|
CLASS_OBJECT_WITHOUT_CLASS_TEMPLATE);
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
fun f<caret>.
|
||||||
|
|
||||||
|
// ABSENT: final
|
||||||
|
|
||||||
|
// For KT-1894
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
val e.<caret>
|
||||||
|
|
||||||
|
// ABSENT: else
|
||||||
|
|
||||||
|
// For KT-1950
|
||||||
@@ -71,10 +71,18 @@ public class KeywordsCompletionTest extends JetCompletionTestBase {
|
|||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testInFunctionTypeReference() {
|
||||||
|
doTest();
|
||||||
|
}
|
||||||
|
|
||||||
public void testInParametersList() {
|
public void testInParametersList() {
|
||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testInPropertyTypeReference() {
|
||||||
|
doTest();
|
||||||
|
}
|
||||||
|
|
||||||
public void testInMethodParametersList() {
|
public void testInMethodParametersList() {
|
||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user