From fce5051b76c7a34d95019f7ce58b4964d2e2884c Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Wed, 23 Jan 2019 18:04:52 +0300 Subject: [PATCH] [groovy] add api for determining whether some expression is not really an expression --- .../groovy/lang/GroovyExpressionFilter.kt | 15 +++++++++++++++ .../groovy/lang/psi/util/expressionUtil.kt | 16 ++++++++++++++++ plugins/groovy/src/META-INF/plugin.xml | 1 + 3 files changed, 32 insertions(+) create mode 100644 plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GroovyExpressionFilter.kt create mode 100644 plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/expressionUtil.kt diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GroovyExpressionFilter.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GroovyExpressionFilter.kt new file mode 100644 index 000000000000..e2d6e0be19a0 --- /dev/null +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/GroovyExpressionFilter.kt @@ -0,0 +1,15 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.plugins.groovy.lang + +import org.jetbrains.annotations.ApiStatus.Experimental +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression + +@Experimental +interface GroovyExpressionFilter { + + /** + * @return `true` if [expression] is not really an expression, + * meaning it would be transformed into something else + */ + fun isFake(expression: GrExpression): Boolean +} diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/expressionUtil.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/expressionUtil.kt new file mode 100644 index 000000000000..3b4e50aa0b1f --- /dev/null +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/expressionUtil.kt @@ -0,0 +1,16 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +@file:JvmName("GroovyExpressionUtil") + +package org.jetbrains.plugins.groovy.lang.psi.util + +import com.intellij.openapi.extensions.ExtensionPointName +import org.jetbrains.plugins.groovy.lang.GroovyExpressionFilter +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression + +private val EP_NAME = ExtensionPointName.create("org.intellij.groovy.expressionFilter") + +fun GrExpression.isFake(): Boolean { + return EP_NAME.extensions.any { + it.isFake(this) + } +} diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index b0c8f2958321..aaf628d43362 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -82,6 +82,7 @@ +