Add 'Incorrect Transient' diagnostic
when users write @Transient, they get @kotlin.jvm.Transient, because it's always in auto-import. This annotation does not work with @Serializable classes; @kotlinx.serialization.Transient should be used instead. Add quickfix for 'incorrect transient' diagnostic: 'Import kotlinx.serialization.Transient'
This commit is contained in:
@@ -15,6 +15,9 @@ dependencies {
|
||||
compile(project(":idea:idea-maven"))
|
||||
compile(project(":plugins:annotation-based-compiler-plugins-ide-support"))
|
||||
compileOnly(intellijDep())
|
||||
Platform[192].orHigher {
|
||||
compileOnly(intellijPluginDep("java"))
|
||||
}
|
||||
excludeInAndroidStudio(rootProject) { compileOnly(intellijPluginDep("maven")) }
|
||||
compileOnly(intellijPluginDep("gradle"))
|
||||
|
||||
@@ -30,5 +33,5 @@ sourceSets {
|
||||
runtimeJar()
|
||||
|
||||
projectTest(parallel = true) {
|
||||
|
||||
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlinx.serialization.idea.quickfixes
|
||||
|
||||
import com.intellij.codeInsight.intention.IntentionAction
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||
import org.jetbrains.kotlin.idea.quickfix.KotlinQuickFixAction
|
||||
import org.jetbrains.kotlin.idea.quickfix.KotlinSingleIntentionActionFactory
|
||||
import org.jetbrains.kotlin.idea.util.ImportInsertHelperImpl
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlinx.serialization.compiler.diagnostic.SerializationErrors
|
||||
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializationAnnotations
|
||||
|
||||
internal class AddKotlinxSerializationTransientImportQuickFix(expression: PsiElement) :
|
||||
KotlinQuickFixAction<PsiElement>(expression) {
|
||||
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
||||
// Do not use Helper itself because it does not insert import on conflict;
|
||||
// so it will always fail because k.jvm.Transient is always in auto-import
|
||||
ImportInsertHelperImpl.addImport(project, file, SerializationAnnotations.serialTransientFqName, allUnder = false)
|
||||
}
|
||||
|
||||
override fun getFamilyName(): String = text
|
||||
|
||||
override fun getText(): String = "Import ${SerializationAnnotations.serialTransientFqName}"
|
||||
|
||||
object Factory : KotlinSingleIntentionActionFactory() {
|
||||
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
|
||||
if (diagnostic.factory != SerializationErrors.INCORRECT_TRANSIENT) return null
|
||||
val castedDiagnostic = SerializationErrors.INCORRECT_TRANSIENT.cast(diagnostic)
|
||||
|
||||
val element = castedDiagnostic.psiElement
|
||||
|
||||
return AddKotlinxSerializationTransientImportQuickFix(element)
|
||||
}
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlinx.serialization.idea.quickfixes
|
||||
|
||||
import org.jetbrains.kotlin.idea.quickfix.QuickFixContributor
|
||||
import org.jetbrains.kotlin.idea.quickfix.QuickFixes
|
||||
import org.jetbrains.kotlinx.serialization.compiler.diagnostic.SerializationErrors
|
||||
|
||||
class SerializationQuickFixContributor : QuickFixContributor {
|
||||
override fun registerQuickFixes(quickFixes: QuickFixes) {
|
||||
quickFixes.register(SerializationErrors.INCORRECT_TRANSIENT, AddKotlinxSerializationTransientImportQuickFix.Factory)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user