[jvm] Add fieldRequest factory method

GitOrigin-RevId: ac0b8982fc03ee0a943910047a1d02837be6af58
This commit is contained in:
Bart van Helvert
2021-08-23 17:35:33 +00:00
committed by intellij-monorepo-bot
parent b50acf3ee5
commit de7f4d9f91
2 changed files with 41 additions and 25 deletions
@@ -0,0 +1,31 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.lang.jvm.actions
import com.intellij.lang.jvm.JvmModifier
import com.intellij.lang.jvm.types.JvmSubstitutor
import com.intellij.lang.jvm.types.JvmType
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiType
fun fieldRequest(
name: String,
substitutor: JvmSubstitutor,
type: JvmType = PsiType.VOID,
initializer: PsiElement? = null,
modifiers: Collection<JvmModifier> = emptyList(),
isConstant: Boolean = false
) = object : CreateFieldRequest {
override fun isValid(): Boolean = true
override fun getFieldName(): String = name
override fun getFieldType(): List<ExpectedType> = expectedTypes(type)
override fun getTargetSubstitutor(): JvmSubstitutor = substitutor
override fun getInitializer(): PsiElement? = initializer
override fun getModifiers(): Collection<JvmModifier> = modifiers
override fun isConstant(): Boolean = isConstant
}
@@ -3,11 +3,8 @@ package com.intellij.codeInspection
import com.intellij.analysis.JvmAnalysisBundle
import com.intellij.lang.jvm.JvmModifier
import com.intellij.lang.jvm.actions.CreateFieldRequest
import com.intellij.lang.jvm.actions.ExpectedType
import com.intellij.lang.jvm.actions.createAddFieldActions
import com.intellij.lang.jvm.actions.expectedTypes
import com.intellij.lang.jvm.types.JvmSubstitutor
import com.intellij.lang.jvm.actions.fieldRequest
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.fileEditor.TextEditor
import com.intellij.openapi.project.Project
@@ -49,30 +46,18 @@ class SerializableHasSerialVersionUidFieldInspection : USerializableInspectionBa
val containingFile = psiClass.containingFile ?: return
val uFactory = uClass.getUastElementFactory(project) ?: return
val serialUid = SerialVersionUIDBuilder.computeDefaultSUID(psiClass)
val initializer = uFactory.createLongConstantExpression(serialUid, null)?.sourcePsi ?: return
val action = createAddFieldActions(psiClass,
SerialVersionUIDFieldInfo(HardcodedMethodConstants.SERIAL_VERSION_UID, initializer, project)).firstOrNull() ?: return
val initializer = uFactory.createLongConstantExpression(serialUid, null)?.sourcePsi ?: return
val action = createAddFieldActions(psiClass, fieldRequest(
name = HardcodedMethodConstants.SERIAL_VERSION_UID,
substitutor = PsiJvmSubstitutor(project, PsiSubstitutor.EMPTY),
type = PsiType.LONG,
initializer = initializer,
modifiers = listOf(JvmModifier.PRIVATE, JvmModifier.STATIC),
isConstant = true
)).first()
val vFile = containingFile.virtualFile ?: return
val editor = (FileEditorManager.getInstance(project).getSelectedEditor(vFile) as? TextEditor)?.editor ?: return
action.invoke(project, editor, containingFile)
}
}
private class SerialVersionUIDFieldInfo(private val name: String,
private val initializer: PsiElement,
private val project: Project) : CreateFieldRequest {
override fun getTargetSubstitutor(): JvmSubstitutor = PsiJvmSubstitutor(project, PsiSubstitutor.EMPTY)
override fun getInitializer(): PsiElement = initializer
override fun getModifiers(): Collection<JvmModifier> = listOf(JvmModifier.PRIVATE, JvmModifier.STATIC)
override fun isConstant(): Boolean = true
override fun getFieldType(): List<ExpectedType> = expectedTypes(PsiType.LONG)
override fun getFieldName(): String = name
override fun isValid(): Boolean = true
}
}