don't repeat myself, use metaprogramming to get the poincuts

This commit is contained in:
peter
2011-05-25 19:49:50 +02:00
parent 27e20875f0
commit ce7241ce7a
2 changed files with 11 additions and 3 deletions
@@ -15,6 +15,7 @@ import java.util.*;
/**
* @author peter
*/
@SuppressWarnings("UnusedDeclaration")
public abstract class DslPointcut<T,V> {
public static final DslPointcut UNKNOWN = new DslPointcut() {
@@ -6,6 +6,7 @@ import com.intellij.openapi.util.text.StringUtil
import com.intellij.patterns.ElementPattern
import com.intellij.patterns.PsiJavaPatterns
import com.intellij.util.ProcessingContext
import java.lang.reflect.Modifier
import org.jetbrains.plugins.groovy.dsl.dsltop.GdslMembersProvider
import org.jetbrains.plugins.groovy.dsl.psi.PsiEnhancerCategory
import org.jetbrains.plugins.groovy.dsl.toplevel.CompositeContextFilter
@@ -70,11 +71,17 @@ public class GroovyDslExecutor {
mc.contributor = contribute
mc.contribute = contribute
mc.currentType = { arg -> DslPointcut.currentType(handleImplicitBind(arg)) }
mc.enclosingType = { arg -> DslPointcut.enclosingType(handleImplicitBind(arg)) }
mc.enclosingMethod = { arg -> DslPointcut.enclosingMethod(handleImplicitBind(arg)) }
mc.bind = { arg -> DslPointcut.bind(arg) }
for (m in DslPointcut.class.declaredMethods) {
if ((m.modifiers & Modifier.STATIC) && (m.modifiers & Modifier.PUBLIC)) {
def name = m.name
if (name != 'bind') {
mc."$name" = { arg -> org.jetbrains.plugins.groovy.dsl.DslPointcut."$name"(handleImplicitBind(arg)) }
}
}
}
oldStylePrimitives(mc)
mc.initialize()