From 1d6bd69e3502d8ef117476828e33eef569efe30e Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 12 Sep 2011 18:36:09 +0200 Subject: [PATCH] more on inst applicability in groovy --- .../template/GroovyTemplateContextType.java | 19 +++++++++---------- .../groovy/lang/GroovyLiveTemplatesTest.java | 3 +++ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/template/GroovyTemplateContextType.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/template/GroovyTemplateContextType.java index 08e9450f3b5a..cfb315964728 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/template/GroovyTemplateContextType.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/template/GroovyTemplateContextType.java @@ -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 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; } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyLiveTemplatesTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyLiveTemplatesTest.java index 5987779ff7ab..2cc0e5c309ca 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyLiveTemplatesTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyLiveTemplatesTest.java @@ -49,7 +49,9 @@ public class GroovyLiveTemplatesTest extends LightCodeInsightFixtureTestCase{ assertFalse(isApplicable("class Foo {{ if (a inst) }}", template)); assertTrue(isApplicable("class Foo {{ inst }}", template)); assertTrue(isApplicable("inst", template)); + assertTrue(isApplicable("inst", template)); assertFalse(isApplicable("class Foo {{ return (inst) }}", template)); + assertFalse(isApplicable("class Foo {{ return a inst) }}", template)); } public void testGroovyExpressionContext() throws Exception { @@ -59,6 +61,7 @@ public class GroovyLiveTemplatesTest extends LightCodeInsightFixtureTestCase{ assertTrue(isApplicable("xxx", template)); assertTrue(isApplicable("xxx", template)); assertTrue(isApplicable("class Foo {{ return (toar) }}", template)); + assertFalse(isApplicable("class Foo {{ return (xxx yyy) }}", template)); } public void testGroovyDeclarationContext() throws Exception {