[jvm-lang] provide target substitutor via method request

This commit is contained in:
Daniil Ovchinnikov
2017-09-12 14:11:11 +02:00
parent c75ef8a5cf
commit 9bc4c75cee
4 changed files with 15 additions and 2 deletions

View File

@@ -16,6 +16,7 @@
package com.intellij.lang.jvm.actions
import com.intellij.lang.jvm.JvmModifier
import com.intellij.lang.jvm.types.JvmSubstitutor
import com.intellij.psi.codeStyle.SuggestedNameInfo
interface CreateMethodRequest {
@@ -31,6 +32,8 @@ interface CreateMethodRequest {
val annotations: Collection<AnnotationRequest>
val parameters: List<ExpectedParameter>
val targetSubstitutor: JvmSubstitutor
}
typealias ExpectedParameter = Pair<SuggestedNameInfo, Any? /* ExpectedTypeInfo[]*/>

View File

@@ -159,7 +159,8 @@ private class JavaMethodRenderer(
private fun setupTemplate(method: PsiMethod): TemplateBuilderImpl {
val builder = TemplateBuilderImpl(method)
val guesser = GuessTypeParameters(project, factory, builder, javaUsage?.targetSubstitutor)
val substitutor = JvmPsiConversionHelper.getInstance(project).convertSubstitutor(request.targetSubstitutor)
val guesser = GuessTypeParameters(project, factory, builder, substitutor)
setupTypeElement(guesser, method.returnTypeElement, request.returnType)
builder.setupParameters(guesser, method)
builder.setEndVariableAfter(method.body ?: method)

View File

@@ -25,6 +25,7 @@ import com.intellij.lang.jvm.JvmModifier
import com.intellij.lang.jvm.actions.AnnotationRequest
import com.intellij.lang.jvm.actions.CreateMethodRequest
import com.intellij.lang.jvm.actions.ExpectedParameter
import com.intellij.lang.jvm.types.JvmSubstitutor
import com.intellij.psi.*
import com.intellij.psi.codeStyle.JavaCodeStyleManager
import com.intellij.psi.codeStyle.VariableKind
@@ -53,7 +54,10 @@ class CreateMethodFromJavaUsageRequest(
override val returnType: Any? get() = guessExpectedTypes(methodCall, methodCall.parent is PsiStatement)
val targetSubstitutor: PsiSubstitutor get() = getTargetSubstitutor(methodCall)
override val targetSubstitutor: JvmSubstitutor get() {
val call = methodCall
return PsiJvmSubstitutor(call.project, getTargetSubstitutor(call))
}
override val parameters: List<ExpectedParameter>
get() {

View File

@@ -7,8 +7,11 @@ import com.intellij.codeInsight.daemon.QuickFixActionRegistrar
import com.intellij.codeInsight.quickfix.UnresolvedReferenceQuickFixProvider
import com.intellij.lang.jvm.JvmModifier
import com.intellij.lang.jvm.actions.*
import com.intellij.lang.jvm.types.JvmSubstitutor
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiJvmSubstitutor
import com.intellij.psi.PsiModifier
import com.intellij.psi.PsiSubstitutor
import com.intellij.psi.PsiType
import com.intellij.psi.codeStyle.JavaCodeStyleManager
import com.intellij.psi.codeStyle.JavaCodeStyleSettings
@@ -71,6 +74,8 @@ class CreateEventHandlerRequest(element: XmlAttributeValue) : CreateMethodReques
emptyList()
}
}
override val targetSubstitutor: JvmSubstitutor get() = PsiJvmSubstitutor(myProject, PsiSubstitutor.EMPTY)
}
private fun getVisibility(project: Project): JvmModifier {