diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/AddAnnotationUseSiteTargetIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/AddAnnotationUseSiteTargetIntention.kt index 4be23f239e3..eae809c3638 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/AddAnnotationUseSiteTargetIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/AddAnnotationUseSiteTargetIntention.kt @@ -139,7 +139,7 @@ private fun KtAnnotationEntry.applicableUseSiteTargets(): List + 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() diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/MoveGetterAndSetterAnnotationsToProperty.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/MoveGetterAndSetterAnnotationsToProperty.kt new file mode 100644 index 00000000000..3703212332a --- /dev/null +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/MoveGetterAndSetterAnnotationsToProperty.kt @@ -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() } + } + } + } +} \ No newline at end of file