From 17d988327a58b19c02b1dbd1fdccf3a5d0860780 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 25 May 2011 20:23:16 +0200 Subject: [PATCH] name pointcut for types --- .../plugins/groovy/dsl/DslPointcut.java | 18 ++++++++++++++++++ .../jetbrains/plugins/groovy/dsl/GdslType.java | 5 +++++ .../plugins/groovy/dsl/DsldTest.groovy | 12 ++++++++++++ 3 files changed, 35 insertions(+) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/dsl/DslPointcut.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/dsl/DslPointcut.java index e8d18f5a3dc0..7945593ab9f3 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/dsl/DslPointcut.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/dsl/DslPointcut.java @@ -106,6 +106,24 @@ public abstract class DslPointcut { }; } + public static DslPointcut name(final Object arg) { + return new DslPointcut() { + @Override + List matches(Object src, ProcessingContext context) { + if (src instanceof GdslType) { + return arg.equals(((GdslType)src).getName()) ? Arrays.asList((String)arg) : null; + } + return Collections.emptyList(); + } + + @Override + boolean operatesOn(Class c) { + return c == GdslType.class; + } + }; + + } + public static DslPointcut enclosingMethod(final Object arg) { return new DslPointcut() { @Override diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/dsl/GdslType.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/dsl/GdslType.java index 4453e13c52dd..4773f704b672 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/dsl/GdslType.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/dsl/GdslType.java @@ -1,5 +1,6 @@ package org.jetbrains.plugins.groovy.dsl; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiClassType; import com.intellij.psi.PsiType; @@ -15,6 +16,10 @@ public class GdslType { this.psiType = psiType; } + public String getShortName() { + return StringUtil.getShortName(getName()); + } + public String getName() { PsiType type = psiType; if (type instanceof PsiWildcardType) { diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/dsl/DsldTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/dsl/DsldTest.groovy index 1619f37c204c..9e18328efd78 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/dsl/DsldTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/dsl/DsldTest.groovy @@ -27,6 +27,15 @@ class DsldTest extends LightGroovyTestCase { 'println "".foo + [].foo' } + public void testTypeName() { + checkHighlighting 'contribute(currentType(name("Foo"))) { property name:"foo" }', + ''' +class Foo {} +class Bar extends Foo {} +println new Foo().foo + new Bar().foo +''' + } + public void testBind() { checkHighlighting 'contribute(bind(types:currentType("java.lang.CharSequence"))) { property name:types[0].name[-3..-1] }', 'println "".ing + "".foo' @@ -43,6 +52,9 @@ class DsldTest extends LightGroovyTestCase { class Foo { def goo() { println foo + "".foo } } +class Bar extends Foo { + def goo() { println foo } +} println new Foo().foo println foo '''