From 8d76e1994bd233644d6b45d91c21f77045a7571c Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Tue, 1 Nov 2016 22:01:50 +0300 Subject: [PATCH] [grails] fix detached criteria closures delegate --- .../groovy/lang/psi/patterns/GroovyClosurePattern.kt | 1 + .../plugins/groovy/lang/psi/patterns/groovyPatterns.kt | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/patterns/GroovyClosurePattern.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/patterns/GroovyClosurePattern.kt index 64b6f68dcd2d..ae1a7b19b114 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/patterns/GroovyClosurePattern.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/patterns/GroovyClosurePattern.kt @@ -41,6 +41,7 @@ class GroovyClosurePattern : GroovyExpressionPattern return false } + context?.put(closureCallKey, call) val method = call.resolveMethod() ?: return false return methodPattern.accepts(method) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/patterns/groovyPatterns.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/patterns/groovyPatterns.kt index 6178b3ca519a..9cdf0a265bf6 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/patterns/groovyPatterns.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/patterns/groovyPatterns.kt @@ -15,17 +15,21 @@ */ package org.jetbrains.plugins.groovy.lang.psi.patterns +import com.intellij.openapi.util.Key import com.intellij.patterns.PatternCondition import com.intellij.util.ProcessingContext import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.GrListOrMap +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrCall import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression +val closureCallKey = Key.create("groovy.pattern.closure.call") + inline fun groovyExpression() = GroovyExpressionPattern.Capture(T::class.java) fun groovyList() = groovyExpression().with(object : PatternCondition("isList") { override fun accepts(t: GrListOrMap, context: ProcessingContext?) = !t.isMap }) -fun psiMethod(containingClass: String, name: String) = GroovyPatterns.psiMethod().withName(name).definedInClass(containingClass) +fun psiMethod(containingClass: String, vararg name: String) = GroovyPatterns.psiMethod().withName(*name).definedInClass(containingClass) fun groovyClosure() = GroovyClosurePattern()