mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[groovy] correct parameter type inside method signature parameter
GitOrigin-RevId: 295c16246cb3e6df4a62f7dc2487f934eb1a3d8a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
618dd1f40d
commit
e310ef23f2
+1
-1
@@ -48,7 +48,7 @@ open class BaseMethodResolveResult(
|
||||
protected open fun createMethodCandidate(method: PsiMethod, place: PsiElement, state: ResolveState): GroovyMethodCandidate {
|
||||
val mapping = myCandidate.argumentMapping
|
||||
return if (mapping != null && method is GrGdkMethod) {
|
||||
GdkMethodCandidate(method.staticMethod, buildQualifier(place as? GrReferenceExpression, state), mapping)
|
||||
GdkMethodCandidate(method.staticMethod, buildQualifier(place as? GrReferenceExpression, state), place, mapping)
|
||||
}
|
||||
else {
|
||||
myCandidate
|
||||
|
||||
+3
-5
@@ -1,15 +1,13 @@
|
||||
// Copyright 2000-2020 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.resolve.impl
|
||||
|
||||
import com.intellij.psi.PsiMethod
|
||||
import com.intellij.psi.PsiParameter
|
||||
import com.intellij.psi.PsiSubstitutor
|
||||
import com.intellij.psi.PsiType
|
||||
import com.intellij.psi.*
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.api.*
|
||||
|
||||
class GdkArgumentMapping(
|
||||
method: PsiMethod,
|
||||
private val receiverArgument: Argument,
|
||||
private val context: PsiElement,
|
||||
delegate: ArgumentMapping<PsiCallParameter>
|
||||
) : DelegateArgumentMapping<PsiCallParameter>(delegate) {
|
||||
|
||||
@@ -19,7 +17,7 @@ class GdkArgumentMapping(
|
||||
|
||||
override fun targetParameter(argument: Argument): PsiCallParameter? {
|
||||
return if (argument == receiverArgument) {
|
||||
PsiCallParameterImpl(receiverParameter, PsiSubstitutor.EMPTY)
|
||||
PsiCallParameterImpl(receiverParameter, PsiSubstitutor.EMPTY, context)
|
||||
}
|
||||
else {
|
||||
super.targetParameter(argument)
|
||||
|
||||
+3
-1
@@ -1,6 +1,7 @@
|
||||
// Copyright 2000-2020 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.resolve.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiMethod
|
||||
import com.intellij.psi.PsiType
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.api.Argument
|
||||
@@ -11,10 +12,11 @@ import org.jetbrains.plugins.groovy.lang.resolve.api.PsiCallParameter
|
||||
class GdkMethodCandidate(
|
||||
override val method: PsiMethod,
|
||||
receiverArgument: Argument,
|
||||
context: PsiElement,
|
||||
originalMapping: ArgumentMapping<PsiCallParameter>
|
||||
) : GroovyMethodCandidate {
|
||||
|
||||
override val receiverType: PsiType? get() = null
|
||||
|
||||
override val argumentMapping: ArgumentMapping<PsiCallParameter>? = GdkArgumentMapping(method, receiverArgument, originalMapping)
|
||||
override val argumentMapping: ArgumentMapping<PsiCallParameter>? = GdkArgumentMapping(method, receiverArgument, context, originalMapping)
|
||||
}
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ class MethodCandidateImpl(
|
||||
|
||||
override val argumentMapping: ArgumentMapping<PsiCallParameter>? by recursionAwareLazy {
|
||||
arguments?.let {
|
||||
MethodSignature(method, erasureSubstitutor).applyTo(it, context)
|
||||
MethodSignature(method, erasureSubstitutor, context).applyTo(it, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-6
@@ -6,14 +6,12 @@ import com.intellij.util.lazyPub
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.isEffectivelyVarArgs
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.api.ArgumentMapping
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.api.Arguments
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.api.CallSignature
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.api.PsiCallParameter
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.api.*
|
||||
|
||||
internal class MethodSignature(
|
||||
private val method: PsiMethod,
|
||||
private val substitutor: PsiSubstitutor
|
||||
private val substitutor: PsiSubstitutor,
|
||||
context: PsiElement
|
||||
) : CallSignature<PsiCallParameter> {
|
||||
|
||||
override val isVararg: Boolean by lazyPub {
|
||||
@@ -22,7 +20,7 @@ internal class MethodSignature(
|
||||
|
||||
override val parameters: List<PsiCallParameter> by lazyPub {
|
||||
method.parameterList.parameters.map { psi ->
|
||||
PsiCallParameterImpl(psi, substitutor)
|
||||
PsiCallParameterImpl(psi, substitutor, context)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+11
-3
@@ -1,18 +1,26 @@
|
||||
// Copyright 2000-2020 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.resolve.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiParameter
|
||||
import com.intellij.psi.PsiSubstitutor
|
||||
import com.intellij.psi.PsiType
|
||||
import com.intellij.psi.impl.PsiClassImplUtil
|
||||
import com.intellij.util.recursionSafeLazy
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.api.PsiCallParameter
|
||||
|
||||
class PsiCallParameterImpl(
|
||||
override val psi: PsiParameter,
|
||||
private val substitutor: PsiSubstitutor
|
||||
private val substitutor: PsiSubstitutor,
|
||||
private val context: PsiElement
|
||||
) : PsiCallParameter {
|
||||
|
||||
override val type: PsiType get() = substitutor.substitute(psi.type)
|
||||
override val type: PsiType? by recursionSafeLazy {
|
||||
PsiClassImplUtil.correctType(substitutor.substitute(psi.type), context.resolveScope)
|
||||
}
|
||||
|
||||
override val parameterName: String? get() = psi.name
|
||||
|
||||
override val isOptional: Boolean get() = psi is GrParameter && psi.isOptional
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -3,7 +3,6 @@ package org.jetbrains.plugins.groovy.lang.resolve.impl
|
||||
|
||||
import com.intellij.lang.jvm.types.JvmPrimitiveTypeKind
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.psi.impl.PsiClassImplUtil.correctType
|
||||
import com.intellij.psi.util.InheritanceUtil
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.api.Argument
|
||||
@@ -56,7 +55,7 @@ fun positionalParametersDistance(map: Map<Argument, CallParameter>, context: Psi
|
||||
var result = 0L
|
||||
for ((argument, parameter) in map) {
|
||||
val runtimeType = argument.runtimeType ?: continue
|
||||
val parameterType = correctType(parameter.type, context.resolveScope) ?: continue
|
||||
val parameterType = parameter.type ?: continue
|
||||
result += parameterDistance(runtimeType, parameterType, context)
|
||||
}
|
||||
return result
|
||||
|
||||
+2
-2
@@ -9,13 +9,13 @@ import org.jetbrains.plugins.groovy.lang.resolve.api.CallSignature
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.impl.MethodSignature
|
||||
|
||||
internal class GroovyMethodReferenceType(
|
||||
myMethodReference: GrReferenceExpression
|
||||
private val myMethodReference: GrReferenceExpression
|
||||
) : GroovyClosureType(myMethodReference) {
|
||||
|
||||
override val signatures: List<CallSignature<*>> by lazyPub {
|
||||
myMethodReference.resolve(false).mapNotNullTo(SmartList()) { result ->
|
||||
(result.element as? PsiMethod)?.let {
|
||||
MethodSignature(it, result.substitutor)
|
||||
MethodSignature(it, result.substitutor, myMethodReference)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user