From de7f4d9f9146a756fdd4a9d782ba64bb3e00ddc9 Mon Sep 17 00:00:00 2001 From: Bart van Helvert Date: Mon, 23 Aug 2021 13:58:36 +0200 Subject: [PATCH] [jvm] Add fieldRequest factory method GitOrigin-RevId: ac0b8982fc03ee0a943910047a1d02837be6af58 --- .../lang/jvm/actions/fieldRequests.kt | 31 ++++++++++++++++ ...zableHasSerialVersionUidFieldInspection.kt | 35 ++++++------------- 2 files changed, 41 insertions(+), 25 deletions(-) create mode 100644 java/java-analysis-api/src/com/intellij/lang/jvm/actions/fieldRequests.kt diff --git a/java/java-analysis-api/src/com/intellij/lang/jvm/actions/fieldRequests.kt b/java/java-analysis-api/src/com/intellij/lang/jvm/actions/fieldRequests.kt new file mode 100644 index 000000000000..407b4cdcac94 --- /dev/null +++ b/java/java-analysis-api/src/com/intellij/lang/jvm/actions/fieldRequests.kt @@ -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 = emptyList(), + isConstant: Boolean = false +) = object : CreateFieldRequest { + override fun isValid(): Boolean = true + + override fun getFieldName(): String = name + + override fun getFieldType(): List = expectedTypes(type) + + override fun getTargetSubstitutor(): JvmSubstitutor = substitutor + + override fun getInitializer(): PsiElement? = initializer + + override fun getModifiers(): Collection = modifiers + + override fun isConstant(): Boolean = isConstant +} \ No newline at end of file diff --git a/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/SerializableHasSerialVersionUidFieldInspection.kt b/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/SerializableHasSerialVersionUidFieldInspection.kt index 82224417f5bb..b8a24b666f1f 100644 --- a/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/SerializableHasSerialVersionUidFieldInspection.kt +++ b/jvm/jvm-analysis-impl/src/com/intellij/codeInspection/SerializableHasSerialVersionUidFieldInspection.kt @@ -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 = listOf(JvmModifier.PRIVATE, JvmModifier.STATIC) - - override fun isConstant(): Boolean = true - - override fun getFieldType(): List = expectedTypes(PsiType.LONG) - - override fun getFieldName(): String = name - - override fun isValid(): Boolean = true - } } \ No newline at end of file