Can be constructor property: comment saver introduced to retain comments; unbound comments now added before, not after

(cherry picked from commit 886cf21)
This commit is contained in:
Mikhail Glukhikh
2016-06-20 20:12:47 +03:00
committed by Mikhail Glukhikh
parent 4145e3438f
commit 4abcc278fd
10 changed files with 43 additions and 4 deletions
@@ -332,7 +332,7 @@ class CommentSaver(originalElements: PsiChildRange, private val saveLineBreaks:
}
}
else {
restored = putAbandonedCommentsAfter.parent.addAfter(comment, putAbandonedCommentsAfter) as PsiComment
restored = putAbandonedCommentsAfter.parent.addBefore(comment, putAbandonedCommentsAfter) as PsiComment
putAbandonedCommentsAfter = restored
}
@@ -25,6 +25,7 @@ import com.intellij.psi.PsiElementVisitor
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
import org.jetbrains.kotlin.idea.util.CommentSaver
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.getAnnotationEntries
import org.jetbrains.kotlin.resolve.BindingContext
@@ -73,6 +74,7 @@ class CanBePrimaryConstructorPropertyInspection : AbstractKotlinInspection() {
override fun getFamilyName() = "Move to constructor"
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
val commentSaver = CommentSaver(original)
val isVar = original.isVar
val modifiers = original.modifierList?.text
val factory = KtPsiFactory(project)
@@ -83,6 +85,7 @@ class CanBePrimaryConstructorPropertyInspection : AbstractKotlinInspection() {
parameter.addBefore(newModifiers, parameter.valOrVarKeyword)
}
original.delete()
commentSaver.restore(parameter)
}
}
}
@@ -2,7 +2,8 @@
// WITH_RUNTIME
fun foo(p: Array<String?>) {
val v = p[0]!!<caret>/* null */
/* null */
val v = p[0]!!
// now let's check it for null
// 'v' should not be null
}
@@ -1,4 +1,5 @@
// "Remove function body" "true"
abstract class A() {
<caret>abstract fun foo() // 3/*1*/
/*1*/
abstract fun foo() // 3
}
@@ -0,0 +1,4 @@
// "Move to constructor" "true"
class Complex(x: Int, y: Double, z: String) {
val <caret>y: Double = y // Duplicating
}
@@ -0,0 +1,4 @@
// "Move to constructor" "true"
class Complex(x: Int, // Duplicating
val y: Double, z: String) {
}
@@ -0,0 +1,7 @@
// "Move to constructor" "true"
class Complex(x: Int, y: Double, z: String) {
/**
* Very complex field x
*/
val <caret>x = x
}
@@ -0,0 +1,7 @@
// "Move to constructor" "true"
class Complex(
/**
* Very complex field x
*/
val x: Int, y: Double, z: String) {
}
@@ -8,5 +8,5 @@ fun oldFun(p: Int) {
fun newFun(){}
fun foo() {
newFun()/* use zero */
/* use zero */newFun()
}
@@ -724,6 +724,18 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/canBePrimaryConstructorProperty"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true);
}
@TestMetadata("commentAfter.kt")
public void testCommentAfter() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/canBePrimaryConstructorProperty/commentAfter.kt");
doTest(fileName);
}
@TestMetadata("commentAhead.kt")
public void testCommentAhead() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/canBePrimaryConstructorProperty/commentAhead.kt");
doTest(fileName);
}
@TestMetadata("protectedOpenVar.kt")
public void testProtectedOpenVar() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/canBePrimaryConstructorProperty/protectedOpenVar.kt");