mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-217757 Support @NamedParams annotation
GitOrigin-RevId: 2ef0d22de463ac5689aec4f715750a5f38d2a500
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e6bd15c161
commit
226dc36006
+12
@@ -6,12 +6,14 @@ package org.jetbrains.plugins.groovy.transformations.impl.namedVariant
|
||||
import com.intellij.codeInsight.AnnotationUtil
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.psi.util.PropertyUtilBase
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotation
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrLiteral
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.getArrayValue
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.GroovyPropertyUtils
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil
|
||||
|
||||
@@ -19,12 +21,22 @@ const val NAMED_VARIANT_ORIGIN_INFO: String = "via @NamedVariant"
|
||||
const val NAMED_ARGS_PARAMETER_NAME = "__namedArgs"
|
||||
const val GROOVY_TRANSFORM_NAMED_VARIANT = "groovy.transform.NamedVariant"
|
||||
const val GROOVY_TRANSFORM_NAMED_PARAM = "groovy.transform.NamedParam"
|
||||
const val GROOVY_TRANSFORM_NAMED_PARAMS = "groovy.transform.NamedParams"
|
||||
const val GROOVY_TRANSFORM_NAMED_DELEGATE = "groovy.transform.NamedDelegate"
|
||||
|
||||
|
||||
fun collectNamedParams(mapParameter: PsiParameter): List<Pair<String, PsiType>> {
|
||||
if (!mapParameter.type.equalsToText(CommonClassNames.JAVA_UTIL_MAP)) return emptyList()
|
||||
|
||||
val annotations = mapParameter
|
||||
.getAnnotation(GROOVY_TRANSFORM_NAMED_PARAMS)
|
||||
?.findDeclaredAttributeValue("value")
|
||||
?.getArrayValue { it as? GrAnnotation }
|
||||
|
||||
if (annotations != null) {
|
||||
return annotations.mapNotNull(::constructNamedParameter)
|
||||
}
|
||||
|
||||
return mapParameter.annotations.mapNotNull(::constructNamedParameter)
|
||||
}
|
||||
|
||||
|
||||
+11
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2018 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.
|
||||
// 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.codeInsight.editorActions
|
||||
|
||||
import com.intellij.openapi.actionSystem.IdeActions
|
||||
@@ -53,6 +53,16 @@ class GroovyParameterInfoHandlerTest implements ResolveTest {
|
||||
testParameterHint()
|
||||
}
|
||||
|
||||
@Test
|
||||
void 'method with several named params'() {
|
||||
testParameterHint()
|
||||
}
|
||||
|
||||
@Test
|
||||
void 'method with named params annotation'() {
|
||||
testParameterHint()
|
||||
}
|
||||
|
||||
private void testParameterHint() {
|
||||
def name = myNameRule.methodName.split(" ")*.capitalize().join('').uncapitalize()
|
||||
def testName = name + ".test"
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
import groovy.transform.NamedParam
|
||||
import groovy.transform.NamedParams
|
||||
|
||||
String namedParams(@NamedParams([
|
||||
@NamedParam(value = 'first', type = String, required = true),
|
||||
@NamedParam(value = 'last', type = String)
|
||||
]) Map args) {}
|
||||
|
||||
namedParams(<caret>)
|
||||
-----
|
||||
<html><b>first: String, last: String</b></html>
|
||||
@@ -0,0 +1,11 @@
|
||||
import groovy.transform.NamedParam
|
||||
import groovy.transform.NamedVariant
|
||||
@NamedVariant
|
||||
String foo(@NamedParam("larch1") int param1, @NamedParam("param2") int larch2) {
|
||||
null
|
||||
}
|
||||
println foo(<caret>)
|
||||
-----
|
||||
<html><b>@NamedParam("larch1") int param1</b>,</html><html> @NamedParam("param2") int larch2</html>
|
||||
-
|
||||
<html><b>larch1: int, param2: int</b></html>
|
||||
Reference in New Issue
Block a user