mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
more on inst applicability in groovy
This commit is contained in:
+9
-10
@@ -18,18 +18,18 @@ package org.jetbrains.plugins.groovy.template;
|
||||
import com.intellij.codeInsight.template.EverywhereContextType;
|
||||
import com.intellij.codeInsight.template.TemplateContextType;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.patterns.ElementPattern;
|
||||
import com.intellij.patterns.PlatformPatterns;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiWhiteSpace;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.GroovyFileType;
|
||||
import org.jetbrains.plugins.groovy.lang.completion.GroovyCompletionData;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrIfStatement;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrCodeBlock;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrCall;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression;
|
||||
@@ -37,8 +37,6 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrRefere
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
|
||||
|
||||
import static com.intellij.patterns.PsiJavaPatterns.psiElement;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
@@ -95,10 +93,6 @@ public abstract class GroovyTemplateContextType extends TemplateContextType {
|
||||
}
|
||||
}
|
||||
public static class Expression extends GroovyTemplateContextType {
|
||||
private static final ElementPattern<PsiElement> INFIX_OPERATOR = psiElement().afterLeaf(
|
||||
psiElement().inside(
|
||||
psiElement(GrExpression.class).afterLeaf(
|
||||
psiElement().withText("(").withParent(GrIfStatement.class))));
|
||||
|
||||
public Expression() {
|
||||
super("GROOVY_EXPRESSION", "Expression", Generic.class);
|
||||
@@ -120,8 +114,13 @@ public abstract class GroovyTemplateContextType extends TemplateContextType {
|
||||
if (parent.getParent() instanceof GrCall) {
|
||||
return false;
|
||||
}
|
||||
if (INFIX_OPERATOR.accepts(element)) {
|
||||
return false;
|
||||
ProcessingContext context = new ProcessingContext();
|
||||
if (PlatformPatterns.psiElement().inside(GrExpression.class).afterLeaf(
|
||||
PlatformPatterns.psiElement().inside(PlatformPatterns.psiElement(GrExpression.class).save("prevExpr"))).accepts(element, context)) {
|
||||
PsiElement prevExpr = (PsiElement)context.get("prevExpr");
|
||||
if (prevExpr.getTextRange().getEndOffset() <= element.getTextRange().getStartOffset()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -49,7 +49,9 @@ public class GroovyLiveTemplatesTest extends LightCodeInsightFixtureTestCase{
|
||||
assertFalse(isApplicable("class Foo {{ if (a inst<caret>) }}", template));
|
||||
assertTrue(isApplicable("class Foo {{ inst<caret> }}", template));
|
||||
assertTrue(isApplicable("inst<caret>", template));
|
||||
assertTrue(isApplicable("<caret>inst", template));
|
||||
assertFalse(isApplicable("class Foo {{ return (inst<caret>) }}", template));
|
||||
assertFalse(isApplicable("class Foo {{ return a <caret>inst) }}", template));
|
||||
}
|
||||
|
||||
public void testGroovyExpressionContext() throws Exception {
|
||||
@@ -59,6 +61,7 @@ public class GroovyLiveTemplatesTest extends LightCodeInsightFixtureTestCase{
|
||||
assertTrue(isApplicable("xxx<caret>", template));
|
||||
assertTrue(isApplicable("<caret>xxx", template));
|
||||
assertTrue(isApplicable("class Foo {{ return (toar<caret>) }}", template));
|
||||
assertFalse(isApplicable("class Foo {{ return (xxx <caret>yyy) }}", template));
|
||||
}
|
||||
|
||||
public void testGroovyDeclarationContext() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user