Add quick-fix for NO_CONSTRUCTOR error #KT-17842 Fixed

This commit is contained in:
Toshiaki Kameyama
2017-06-01 14:20:52 +09:00
committed by Dmitry Jemerov
parent 862631b2ec
commit bb5681fdb5
5 changed files with 71 additions and 0 deletions
@@ -496,5 +496,7 @@ class QuickFixRegistrar : QuickFixContributor {
RETURN_NOT_ALLOWED.registerFactory(ChangeToLabeledReturnFix)
INAPPLICABLE_RECEIVER_TARGET.registerFactory(MoveReceiverAnnotationFix)
NO_CONSTRUCTOR.registerFactory(RemoveNoConstructorFix)
}
}
@@ -0,0 +1,46 @@
/*
* Copyright 2010-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.quickfix
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.idea.core.replaced
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtPsiFactory
import org.jetbrains.kotlin.psi.KtSuperTypeCallEntry
import org.jetbrains.kotlin.psi.KtValueArgumentList
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
class RemoveNoConstructorFix(constructor: KtValueArgumentList) : KotlinQuickFixAction<KtValueArgumentList>(constructor) {
override fun getText() = "Remove no constructor"
override fun getFamilyName() = text
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
val superTypeCallEntry = element?.getStrictParentOfType<KtSuperTypeCallEntry>() ?: return
val superTypeEntry = KtPsiFactory(project).createSuperTypeEntry(superTypeCallEntry.firstChild.text)
superTypeCallEntry.replaced(superTypeEntry)
}
companion object : KotlinSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction<KtValueArgumentList>? =
(diagnostic.psiElement as? KtValueArgumentList)?.let { RemoveNoConstructorFix(it) }
}
}
+4
View File
@@ -0,0 +1,4 @@
// "Remove no constructor" "true"
interface Base
class Derived : Base()<caret>
@@ -0,0 +1,4 @@
// "Remove no constructor" "true"
interface Base
class Derived : Base
@@ -8163,6 +8163,21 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
}
}
@TestMetadata("idea/testData/quickfix/removeNoConstructor")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class RemoveNoConstructor extends AbstractQuickFixTest {
public void testAllFilesPresentInRemoveNoConstructor() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/removeNoConstructor"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), TargetBackend.ANY, true);
}
@TestMetadata("basic.kt")
public void testBasic() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/removeNoConstructor/basic.kt");
doTest(fileName);
}
}
@TestMetadata("idea/testData/quickfix/removeRedundantAssignment")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)