New J2K: Move annotations from getters to properties
This commit is contained in:
committed by
Ilya Kirillov
parent
1fa0ddcbe8
commit
a659fcd6af
+1
-1
@@ -139,7 +139,7 @@ private fun KtAnnotationEntry.applicableUseSiteTargets(): List<AnnotationUseSite
|
||||
}
|
||||
}
|
||||
|
||||
private fun KtAnnotationEntry.addUseSiteTarget(useSiteTarget: AnnotationUseSiteTarget, project: Project) {
|
||||
fun KtAnnotationEntry.addUseSiteTarget(useSiteTarget: AnnotationUseSiteTarget, project: Project) {
|
||||
project.executeWriteCommand("Add use-site target") {
|
||||
replace(KtPsiFactory(this).createAnnotationEntry("@${useSiteTarget.renderName}:$shortName${valueArgumentList?.text ?: ""}"))
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.search.LocalSearchScope
|
||||
import com.intellij.psi.search.searches.ReferencesSearch
|
||||
import com.intellij.psi.util.parentOfType
|
||||
import com.intellij.psi.util.parentsOfType
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||
@@ -29,6 +30,7 @@ import org.jetbrains.kotlin.idea.intentions.*
|
||||
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions.FoldIfToReturnAsymmetricallyIntention
|
||||
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions.FoldIfToReturnIntention
|
||||
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions.IfThenToElvisIntention
|
||||
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isNullExpression
|
||||
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isTrivialStatementBody
|
||||
import org.jetbrains.kotlin.idea.quickfix.*
|
||||
import org.jetbrains.kotlin.idea.references.KtSimpleNameReference
|
||||
@@ -36,11 +38,8 @@ import org.jetbrains.kotlin.idea.references.mainReference
|
||||
import org.jetbrains.kotlin.idea.references.readWriteAccess
|
||||
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
||||
import org.jetbrains.kotlin.j2k.ConverterSettings
|
||||
import org.jetbrains.kotlin.nj2k.postProcessing.ConvertDataClass
|
||||
import org.jetbrains.kotlin.nj2k.postProcessing.ConvertGettersAndSetters
|
||||
import org.jetbrains.kotlin.nj2k.postProcessing.resolve
|
||||
import org.jetbrains.kotlin.nj2k.postProcessing.topLevelContainingClassOrObject
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.nj2k.postProcessing.*
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
@@ -49,6 +48,7 @@ import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
import org.jetbrains.kotlin.types.isNullable
|
||||
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
import org.jetbrains.kotlin.utils.mapToIndex
|
||||
import java.util.*
|
||||
|
||||
@@ -90,6 +90,7 @@ object NewJ2KPostProcessingRegistrar {
|
||||
val mainProcessings = OneTimeProcessingGroup(
|
||||
SingleOneTimeProcessing(VarToVal()),
|
||||
SingleOneTimeProcessing(ConvertGettersAndSetters()),
|
||||
SingleOneTimeProcessing(MoveGetterAndSetterAnnotationsToProperty()),
|
||||
SingleOneTimeProcessing(registerGeneralInspectionBasedProcessing(RedundantModalityModifierInspection())),
|
||||
SingleOneTimeProcessing(registerGeneralInspectionBasedProcessing(RedundantVisibilityModifierInspection())),
|
||||
SingleOneTimeProcessing(registerGeneralInspectionBasedProcessing(RedundantGetterInspection())),
|
||||
|
||||
@@ -72,7 +72,22 @@ class ConvertDataClass : NewJ2kPostProcessing {
|
||||
constructorParameter.addAfter(factory.createWhiteSpace(), constructorParameter.valOrVarKeyword!!)
|
||||
constructorParameter.rename(property.name!!)
|
||||
if (property.modifierList != null) {
|
||||
val annotationEntries = constructorParameter.annotationEntries.map { it.copied() }
|
||||
constructorParameter.setModifierList(property.modifierList!!)
|
||||
constructorParameter.annotationEntries.forEach { it.delete() }
|
||||
for (annotationEntry in annotationEntries) {
|
||||
constructorParameter.addAnnotationEntry(annotationEntry).also { entry ->
|
||||
entry.addUseSiteTarget(AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER, element.project)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (annotationEntry in property.annotationEntries) {
|
||||
constructorParameter.addAnnotationEntry(annotationEntry).also { entry ->
|
||||
if (entry.useSiteTarget == null) {
|
||||
entry.addUseSiteTarget(AnnotationUseSiteTarget.FIELD, element.project)
|
||||
}
|
||||
}
|
||||
}
|
||||
property.delete()
|
||||
statement.delete()
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. 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.kotlin.nj2k.postProcessing
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.idea.intentions.addUseSiteTarget
|
||||
import org.jetbrains.kotlin.nj2k.NewJ2kPostProcessing
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
|
||||
|
||||
class MoveGetterAndSetterAnnotationsToProperty : NewJ2kPostProcessing {
|
||||
override val writeActionNeeded: Boolean = true
|
||||
|
||||
override fun createAction(element: KtElement, diagnostics: Diagnostics): (() -> Unit)? {
|
||||
if (element !is KtProperty) return null
|
||||
if (element.accessors.isEmpty()) return null
|
||||
return {
|
||||
for (accessor in element.accessors.sortedBy { it.isGetter }) {
|
||||
for (entry in accessor.annotationEntries) {
|
||||
element.addAnnotationEntry(entry).also {
|
||||
it.addUseSiteTarget(
|
||||
if (accessor.isGetter) AnnotationUseSiteTarget.PROPERTY_GETTER
|
||||
else AnnotationUseSiteTarget.PROPERTY_SETTER,
|
||||
element.project
|
||||
)
|
||||
}
|
||||
}
|
||||
accessor.annotationEntries.forEach { it.delete() }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user