Refactor - subclass PositionElementFilter and don't implement isClassAcceptable
This commit is contained in:
@@ -78,7 +78,7 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
|
|
||||||
private static final String IF_TEMPLATE = "if (<#<condition>#>) {\n<#<block>#>\n}";
|
private static final String IF_TEMPLATE = "if (<#<condition>#>) {\n<#<block>#>\n}";
|
||||||
private static final String IF_ELSE_TEMPLATE = "if (<#<condition>#>) {\n<#<block>#>\n} else {\n<#<block>#>\n}";
|
private static final String IF_ELSE_TEMPLATE = "if (<#<condition>#>) {\n<#<block>#>\n} else {\n<#<block>#>\n}";
|
||||||
private static final String IF_ELSE_ONELINE_TEMPLATE = "if (<#<condition>#>) <#<value>#> else <#<value>#>";
|
private static final String IF_ELSE_ONE_LINE_TEMPLATE = "if (<#<condition>#>) <#<value>#> else <#<value>#>";
|
||||||
private static final String FUN_TEMPLATE = "fun <#<name>#>(<#<params>#>) : <#<returnType>#> {\n<#<body>#>\n}";
|
private static final String FUN_TEMPLATE = "fun <#<name>#>(<#<params>#>) : <#<returnType>#> {\n<#<body>#>\n}";
|
||||||
private static final String VAL_SIMPLE_TEMPLATE = "val <#<name>#> = <#<value>#>";
|
private static final String VAL_SIMPLE_TEMPLATE = "val <#<name>#> = <#<value>#>";
|
||||||
private static final String VAL_WITH_TYPE_TEMPLATE = "val <#<name>#> : <#<valType>#> = <#<value>#>";
|
private static final String VAL_WITH_TYPE_TEMPLATE = "val <#<name>#> : <#<valType>#> = <#<value>#>";
|
||||||
@@ -129,57 +129,37 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class InTopFilter implements ElementFilter {
|
private static class InTopFilter extends PositionElementFilter {
|
||||||
@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, JetFunction.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, JetClass.class) == null;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isClassAcceptable(Class hintClass) {
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class InNonClassBlockFilter implements ElementFilter {
|
private static class InNonClassBlockFilter extends PositionElementFilter {
|
||||||
@Override
|
@Override
|
||||||
public boolean isAcceptable(Object element, PsiElement context) {
|
public boolean isAcceptable(Object element, PsiElement context) {
|
||||||
//noinspection unchecked
|
//noinspection unchecked
|
||||||
return PsiTreeUtil.getParentOfType(context, JetBlockExpression.class, true, JetClassBody.class) != null;
|
return PsiTreeUtil.getParentOfType(context, JetBlockExpression.class, true, JetClassBody.class) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isClassAcceptable(Class hintClass) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class InParametersFilter implements ElementFilter {
|
private static class InParametersFilter extends PositionElementFilter {
|
||||||
@Override
|
@Override
|
||||||
public boolean isAcceptable(Object element, PsiElement context) {
|
public boolean isAcceptable(Object element, PsiElement context) {
|
||||||
return PsiTreeUtil.getParentOfType(context, JetParameterList.class, false) != null;
|
return PsiTreeUtil.getParentOfType(context, JetParameterList.class, false) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isClassAcceptable(Class hintClass) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class InClassBodyFilter implements ElementFilter {
|
private static class InClassBodyFilter extends PositionElementFilter {
|
||||||
@Override
|
@Override
|
||||||
public boolean isAcceptable(Object element, PsiElement context) {
|
public boolean isAcceptable(Object element, PsiElement context) {
|
||||||
//noinspection unchecked
|
//noinspection unchecked
|
||||||
return PsiTreeUtil.getParentOfType(context, JetClassBody.class, true,
|
return PsiTreeUtil.getParentOfType(context, JetClassBody.class, true,
|
||||||
JetBlockExpression.class, JetProperty.class, JetParameterList.class) != null;
|
JetBlockExpression.class, JetProperty.class, JetParameterList.class) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isClassAcceptable(Class hintClass) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class AfterClassInClassBodyFilter extends InClassBodyFilter {
|
private static class AfterClassInClassBodyFilter extends InClassBodyFilter {
|
||||||
@@ -198,7 +178,7 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class InPropertyBodyFilter implements ElementFilter {
|
private static class InPropertyBodyFilter extends PositionElementFilter {
|
||||||
@Override
|
@Override
|
||||||
public boolean isAcceptable(Object element, PsiElement context) {
|
public boolean isAcceptable(Object element, PsiElement context) {
|
||||||
if (!(element instanceof PsiElement)) return false;
|
if (!(element instanceof PsiElement)) return false;
|
||||||
@@ -206,11 +186,6 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
return property != null && isAfterName(property, (PsiElement) element);
|
return property != null && isAfterName(property, (PsiElement) element);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isClassAcceptable(Class hintClass) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isAfterName(@NotNull JetProperty property, @NotNull PsiElement element) {
|
private static boolean isAfterName(@NotNull JetProperty property, @NotNull PsiElement element) {
|
||||||
for (PsiElement child = property.getFirstChild(); child != null; child = child.getNextSibling()) {
|
for (PsiElement child = property.getFirstChild(); child != null; child = child.getNextSibling()) {
|
||||||
if (PsiTreeUtil.isAncestor(child, element, false)) {
|
if (PsiTreeUtil.isAncestor(child, element, false)) {
|
||||||
@@ -226,16 +201,11 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class InWhenFilter implements ElementFilter {
|
private static class InWhenFilter extends PositionElementFilter {
|
||||||
@Override
|
@Override
|
||||||
public boolean isAcceptable(Object element, PsiElement context) {
|
public boolean isAcceptable(Object element, PsiElement context) {
|
||||||
return PsiTreeUtil.getParentOfType(context, JetWhenExpression.class, false) != null;
|
return PsiTreeUtil.getParentOfType(context, JetWhenExpression.class, false) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isClassAcceptable(Class hintClass) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class SimplePrefixMatcher extends PrefixMatcher {
|
private static class SimplePrefixMatcher extends PrefixMatcher {
|
||||||
@@ -341,12 +311,12 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
TRAIT_TEMPLATE, CLASS_TEMPLATE, CLASS_OBJECT_TEMPLATE,
|
TRAIT_TEMPLATE, CLASS_TEMPLATE, CLASS_OBJECT_TEMPLATE,
|
||||||
ENUM_CLASS_TEMPLATE);
|
ENUM_CLASS_TEMPLATE);
|
||||||
registerScopeKeywordsCompletion(new InNonClassBlockFilter(),
|
registerScopeKeywordsCompletion(new InNonClassBlockFilter(),
|
||||||
IF_TEMPLATE, IF_ELSE_TEMPLATE, IF_ELSE_ONELINE_TEMPLATE,
|
IF_TEMPLATE, IF_ELSE_TEMPLATE, IF_ELSE_ONE_LINE_TEMPLATE,
|
||||||
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 InPropertyBodyFilter(),
|
registerScopeKeywordsCompletion(new InPropertyBodyFilter(),
|
||||||
IF_ELSE_ONELINE_TEMPLATE, WHEN_TEMPLATE);
|
IF_ELSE_ONE_LINE_TEMPLATE, WHEN_TEMPLATE);
|
||||||
registerScopeKeywordsCompletion(new AfterClassInClassBodyFilter(), false,
|
registerScopeKeywordsCompletion(new AfterClassInClassBodyFilter(), false,
|
||||||
CLASS_OBJECT_WITHOUT_CLASS_TEMPLATE);
|
CLASS_OBJECT_WITHOUT_CLASS_TEMPLATE);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user