diff --git a/idea/resources/META-INF/plugin-common.xml b/idea/resources/META-INF/plugin-common.xml index 87c1b290969..c4fce455b04 100644 --- a/idea/resources/META-INF/plugin-common.xml +++ b/idea/resources/META-INF/plugin-common.xml @@ -865,11 +865,6 @@ - - org.jetbrains.kotlin.idea.intentions.FoldInitializerAndIfToElvisIntention - Kotlin - - org.jetbrains.kotlin.idea.intentions.ImportMemberIntention Kotlin @@ -1761,7 +1756,7 @@ language="kotlin" /> - ?: return diff --git a/idea/resources/intentionDescriptions/FoldInitializerAndIfToElvisIntention/before.kt.template b/idea/resources/intentionDescriptions/FoldInitializerAndIfToElvisIntention/before.kt.template deleted file mode 100644 index 7fd7d70efd1..00000000000 --- a/idea/resources/intentionDescriptions/FoldInitializerAndIfToElvisIntention/before.kt.template +++ /dev/null @@ -1,2 +0,0 @@ -val result = ... -if (result == null) return diff --git a/idea/resources/intentionDescriptions/FoldInitializerAndIfToElvisIntention/description.html b/idea/resources/intentionDescriptions/FoldInitializerAndIfToElvisIntention/description.html deleted file mode 100644 index 686783ca40d..00000000000 --- a/idea/resources/intentionDescriptions/FoldInitializerAndIfToElvisIntention/description.html +++ /dev/null @@ -1,5 +0,0 @@ - - -This intention converts an if expression checking a variable being null or not right after initializing it to an elvis operator in the initializer (if applicable). - - diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/FoldInitializerAndIfToElvisIntention.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/FoldInitializerAndIfToElvisInspection.kt similarity index 81% rename from idea/src/org/jetbrains/kotlin/idea/intentions/FoldInitializerAndIfToElvisIntention.kt rename to idea/src/org/jetbrains/kotlin/idea/inspections/FoldInitializerAndIfToElvisInspection.kt index 7bf947e5cab..b8f4c3bd3dc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/FoldInitializerAndIfToElvisIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/FoldInitializerAndIfToElvisInspection.kt @@ -1,22 +1,12 @@ /* - * Copyright 2010-2015 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. + * Copyright 2010-2019 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.kotlin.idea.intentions +package org.jetbrains.kotlin.idea.inspections import com.intellij.openapi.editor.Editor +import com.intellij.openapi.project.Project import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiComment import com.intellij.psi.PsiElement @@ -28,7 +18,6 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.replaced import org.jetbrains.kotlin.idea.core.setType -import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection import org.jetbrains.kotlin.idea.intentions.branchedTransformations.expressionComparedToNull import org.jetbrains.kotlin.idea.util.CommentSaver import org.jetbrains.kotlin.lexer.KtTokens @@ -45,18 +34,17 @@ import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf import org.jetbrains.kotlin.types.typeUtil.makeNotNullable import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull -@Suppress("DEPRECATION") -class FoldInitializerAndIfToElvisInspection : IntentionBasedInspection(FoldInitializerAndIfToElvisIntention::class) +class FoldInitializerAndIfToElvisInspection : AbstractApplicabilityBasedInspection(KtIfExpression::class.java) { + override fun inspectionText(element: KtIfExpression): String = "If-Null return/break/... foldable to '?:'" -class FoldInitializerAndIfToElvisIntention : - SelfTargetingRangeIntention(KtIfExpression::class.java, "Replace 'if' with elvis operator") { + override val defaultFixText: String = "Replace 'if' with elvis operator" - override fun applicabilityRange(element: KtIfExpression): TextRange? { - return FoldInitializerAndIfToElvisIntention.applicabilityRange(element) - } + override fun inspectionRange(element: KtIfExpression): TextRange? = textRange(element)?.shiftLeft(element.startOffset) - override fun applyTo(element: KtIfExpression, editor: Editor?) { - val newElvis = applyTo(element) + override fun isApplicable(element: KtIfExpression): Boolean = Companion.isApplicable(element) + + override fun applyTo(element: PsiElement, project: Project, editor: Editor?) { + val newElvis = Companion.applyTo(element as KtIfExpression) editor?.caretModel?.moveToOffset(newElvis.right!!.textOffset) } @@ -67,8 +55,12 @@ class FoldInitializerAndIfToElvisIntention : val type = data.ifNullExpression.analyze().getType(data.ifNullExpression) ?: return null if (!type.isNothing()) return null - val rParen = element.rightParenthesis ?: return null - return TextRange(element.startOffset, rParen.endOffset) + return textRange(element) + } + + private fun textRange(element: KtIfExpression): TextRange? { + val rightOffset = element.rightParenthesis?.endOffset ?: return null + return TextRange(element.startOffset, rightOffset) } fun isApplicable(element: KtIfExpression): Boolean = applicabilityRange(element) != null @@ -161,7 +153,12 @@ class FoldInitializerAndIfToElvisIntention : return null } - return Data(initializer, prevStatement, statement, typeReference) + return Data( + initializer, + prevStatement, + statement, + typeReference + ) } private fun PsiChildRange.withoutLastStatement(): PsiChildRange { diff --git a/idea/src/org/jetbrains/kotlin/idea/j2k/J2KPostProcessingRegistrarImpl.kt b/idea/src/org/jetbrains/kotlin/idea/j2k/J2KPostProcessingRegistrarImpl.kt index 69158f2f015..21e3a9553e8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/j2k/J2KPostProcessingRegistrarImpl.kt +++ b/idea/src/org/jetbrains/kotlin/idea/j2k/J2KPostProcessingRegistrarImpl.kt @@ -86,7 +86,7 @@ object J2KPostProcessingRegistrarImpl : J2KPostProcessingRegistrar { _processings.add(UseExpressionBodyProcessing()) registerInspectionBasedProcessing(UnnecessaryVariableInspection()) - registerIntentionBasedProcessing(FoldInitializerAndIfToElvisIntention()) + registerInspectionBasedProcessing(FoldInitializerAndIfToElvisInspection()) registerIntentionBasedProcessing(FoldIfToReturnIntention()) { it.then.isTrivialStatementBody() && it.`else`.isTrivialStatementBody() } registerIntentionBasedProcessing(FoldIfToReturnAsymmetricallyIntention()) { it.then.isTrivialStatementBody() && (KtPsiUtil.skipTrailingWhitespacesAndComments(it) as KtReturnExpression).returnedExpression.isTrivialStatementBody() } diff --git a/idea/src/org/jetbrains/kotlin/idea/joinLines/JoinInitializerAndIfToElvisHandler.kt b/idea/src/org/jetbrains/kotlin/idea/joinLines/JoinInitializerAndIfToElvisHandler.kt index dc2eaabb7eb..173d3f3b5f5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/joinLines/JoinInitializerAndIfToElvisHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/joinLines/JoinInitializerAndIfToElvisHandler.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.idea.joinLines import com.intellij.codeInsight.editorActions.JoinRawLinesHandlerDelegate import com.intellij.openapi.editor.Document import com.intellij.psi.PsiFile -import org.jetbrains.kotlin.idea.intentions.FoldInitializerAndIfToElvisIntention +import org.jetbrains.kotlin.idea.inspections.FoldInitializerAndIfToElvisInspection import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtIfExpression import org.jetbrains.kotlin.psi.psiUtil.getNextSiblingIgnoringWhitespaceAndComments @@ -23,8 +23,8 @@ class JoinInitializerAndIfToElvisHandler : JoinRawLinesHandlerDelegate { ?.firstOrNull { it.textContains('\n') } ?: return -1 val ifExpression = lineBreak.getNextSiblingIgnoringWhitespaceAndComments() as? KtIfExpression ?: return -1 - if (!FoldInitializerAndIfToElvisIntention.isApplicable(ifExpression)) return -1 - return FoldInitializerAndIfToElvisIntention.applyTo(ifExpression).textRange.startOffset + if (!FoldInitializerAndIfToElvisInspection.isApplicable(ifExpression)) return -1 + return FoldInitializerAndIfToElvisInspection.applyTo(ifExpression).textRange.startOffset } override fun tryJoinLines(document: Document, file: PsiFile, start: Int, end: Int) = -1 diff --git a/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/.inspection b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/.inspection new file mode 100644 index 00000000000..b9bcd228ba8 --- /dev/null +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/.inspection @@ -0,0 +1 @@ +org.jetbrains.kotlin.idea.inspections.FoldInitializerAndIfToElvisInspection diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/Break.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Break.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/Break.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Break.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/Break.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Break.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/Break.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Break.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/CommentInBlock.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/CommentInBlock.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/CommentInBlock.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/CommentInBlock.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/CommentInBlock.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/CommentInBlock.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/CommentInBlock.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/CommentInBlock.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/Comments.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Comments.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/Comments.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Comments.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/Comments.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Comments.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/Comments.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Comments.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/Comments2.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Comments2.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/Comments2.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Comments2.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/Comments2.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Comments2.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/Comments2.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Comments2.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/Continue.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Continue.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/Continue.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Continue.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/Continue.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Continue.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/Continue.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Continue.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/ExplicitValType.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ExplicitValType.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/ExplicitValType.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ExplicitValType.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/ExplicitValType.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ExplicitValType.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/ExplicitValType.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ExplicitValType.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/ExplicitVarType.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ExplicitVarType.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/ExplicitVarType.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ExplicitVarType.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/ExplicitVarType.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ExplicitVarType.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/ExplicitVarType.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ExplicitVarType.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/IfNotNull.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IfNotNull.kt similarity index 80% rename from idea/testData/intentions/foldInitializerAndIfToElvis/IfNotNull.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IfNotNull.kt index ca93bd96744..48754eabdbf 100644 --- a/idea/testData/intentions/foldInitializerAndIfToElvis/IfNotNull.kt +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IfNotNull.kt @@ -1,4 +1,4 @@ -// IS_APPLICABLE: false +// PROBLEM: none fun foo(p: List): Int { val v = p[0] if (v != null) return -1 diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/IsSameType.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSameType.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/IsSameType.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSameType.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/IsSameType.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSameType.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/IsSameType.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSameType.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/IsSideTypeFake.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSideTypeFake.kt similarity index 89% rename from idea/testData/intentions/foldInitializerAndIfToElvis/IsSideTypeFake.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSideTypeFake.kt index 995dd4340d8..5ac1ffbf473 100644 --- a/idea/testData/intentions/foldInitializerAndIfToElvis/IsSideTypeFake.kt +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSideTypeFake.kt @@ -1,4 +1,4 @@ -// IS_APPLICABLE: false +// PROBLEM: none interface A { fun a() {} } diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/IsSubType.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSubType.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/IsSubType.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSubType.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/IsSubType.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSubType.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/IsSubType.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSubType.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/IsSuperTypeFake.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSuperTypeFake.kt similarity index 85% rename from idea/testData/intentions/foldInitializerAndIfToElvis/IsSuperTypeFake.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSuperTypeFake.kt index ebaeb60c1ff..ad8dd7c7d2f 100644 --- a/idea/testData/intentions/foldInitializerAndIfToElvis/IsSuperTypeFake.kt +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSuperTypeFake.kt @@ -1,4 +1,4 @@ -// IS_APPLICABLE: false +// PROBLEM: none open class A open class B : A() { diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/MultiStatementBlock.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiStatementBlock.kt similarity index 83% rename from idea/testData/intentions/foldInitializerAndIfToElvis/MultiStatementBlock.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiStatementBlock.kt index 45e0b97ac0c..bebc158edb2 100644 --- a/idea/testData/intentions/foldInitializerAndIfToElvis/MultiStatementBlock.kt +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiStatementBlock.kt @@ -1,4 +1,4 @@ -// IS_APPLICABLE: false +// PROBLEM: none fun foo(p: List) { val v = p[0] if (v == null) { diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/NotExit.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/NotExit.kt similarity index 83% rename from idea/testData/intentions/foldInitializerAndIfToElvis/NotExit.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/NotExit.kt index 9f39addbf74..1e980355460 100644 --- a/idea/testData/intentions/foldInitializerAndIfToElvis/NotExit.kt +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/NotExit.kt @@ -1,4 +1,4 @@ -// IS_APPLICABLE: false +// PROBLEM: none fun foo(p: List): Int? { val v = p[0] if (v == null) bar() diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/NotIs.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/NotIs.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/NotIs.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/NotIs.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/NotIs.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/NotIs.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/NotIs.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/NotIs.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/NotIsNullableType.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/NotIsNullableType.kt similarity index 83% rename from idea/testData/intentions/foldInitializerAndIfToElvis/NotIsNullableType.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/NotIsNullableType.kt index 2a44b5136e8..53aea3579fc 100644 --- a/idea/testData/intentions/foldInitializerAndIfToElvis/NotIsNullableType.kt +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/NotIsNullableType.kt @@ -1,4 +1,4 @@ -// IS_APPLICABLE: false +// PROBLEM: none fun test(): String { val foo = foo() if (foo !is String?) return "0" diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/OtherVar1.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/OtherVar1.kt similarity index 87% rename from idea/testData/intentions/foldInitializerAndIfToElvis/OtherVar1.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/OtherVar1.kt index 07286f20aaa..4ccb8ef61e7 100644 --- a/idea/testData/intentions/foldInitializerAndIfToElvis/OtherVar1.kt +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/OtherVar1.kt @@ -1,4 +1,4 @@ -// IS_APPLICABLE: false +// PROBLEM: none class C { var v: String? = null diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/OtherVar2.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/OtherVar2.kt similarity index 87% rename from idea/testData/intentions/foldInitializerAndIfToElvis/OtherVar2.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/OtherVar2.kt index 8a2c8e8564d..584c3890c2b 100644 --- a/idea/testData/intentions/foldInitializerAndIfToElvis/OtherVar2.kt +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/OtherVar2.kt @@ -1,4 +1,4 @@ -// IS_APPLICABLE: false +// PROBLEM: none class C { var x: String? = null diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/Return.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Return.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/Return.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Return.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/Return.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Return.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/Return.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Return.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/ThrowInBlock.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ThrowInBlock.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/ThrowInBlock.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ThrowInBlock.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/ThrowInBlock.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ThrowInBlock.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/ThrowInBlock.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ThrowInBlock.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/UsedInside.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/UsedInside.kt similarity index 86% rename from idea/testData/intentions/foldInitializerAndIfToElvis/UsedInside.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/UsedInside.kt index da066385f3b..a47e7f00a5f 100644 --- a/idea/testData/intentions/foldInitializerAndIfToElvis/UsedInside.kt +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/UsedInside.kt @@ -1,4 +1,4 @@ -// IS_APPLICABLE: false +// PROBLEM: none interface A { val s: String diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/UsedInsideInTemplate.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/UsedInsideInTemplate.kt similarity index 86% rename from idea/testData/intentions/foldInitializerAndIfToElvis/UsedInsideInTemplate.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/UsedInsideInTemplate.kt index 615ba279e22..49a7095a674 100644 --- a/idea/testData/intentions/foldInitializerAndIfToElvis/UsedInsideInTemplate.kt +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/UsedInsideInTemplate.kt @@ -1,4 +1,4 @@ -// IS_APPLICABLE: false +// PROBLEM: none interface A { val s: String diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/Var.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Var.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/Var.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Var.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/Var.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Var.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/Var.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Var.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/ifStatementPriority.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ifStatementPriority.kt similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/ifStatementPriority.kt rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ifStatementPriority.kt diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/ifStatementPriority.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ifStatementPriority.kt.after similarity index 100% rename from idea/testData/intentions/foldInitializerAndIfToElvis/ifStatementPriority.kt.after rename to idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ifStatementPriority.kt.after diff --git a/idea/testData/intentions/foldInitializerAndIfToElvis/.intention b/idea/testData/intentions/foldInitializerAndIfToElvis/.intention deleted file mode 100644 index d15cccdf88e..00000000000 --- a/idea/testData/intentions/foldInitializerAndIfToElvis/.intention +++ /dev/null @@ -1 +0,0 @@ -org.jetbrains.kotlin.idea.intentions.FoldInitializerAndIfToElvisIntention diff --git a/idea/testData/quickfix/suppress/inspections/constantConditionIf.kt b/idea/testData/quickfix/suppress/inspections/constantConditionIf.kt new file mode 100644 index 00000000000..992bb996f2f --- /dev/null +++ b/idea/testData/quickfix/suppress/inspections/constantConditionIf.kt @@ -0,0 +1,8 @@ +// "Suppress 'ConstantConditionIf' for fun foo" "true" + +fun foo() { + if (true) { + } +} + +// TOOL: org.jetbrains.kotlin.idea.inspections.ConstantConditionIfInspection \ No newline at end of file diff --git a/idea/testData/quickfix/suppress/inspections/constantConditionIf.kt.after b/idea/testData/quickfix/suppress/inspections/constantConditionIf.kt.after new file mode 100644 index 00000000000..922cfb0ad51 --- /dev/null +++ b/idea/testData/quickfix/suppress/inspections/constantConditionIf.kt.after @@ -0,0 +1,9 @@ +// "Suppress 'ConstantConditionIf' for fun foo" "true" + +@Suppress("ConstantConditionIf") +fun foo() { + if (true) { + } +} + +// TOOL: org.jetbrains.kotlin.idea.inspections.ConstantConditionIfInspection \ No newline at end of file diff --git a/idea/testData/quickfix/suppress/inspections/ifNullToElvis.kt b/idea/testData/quickfix/suppress/inspections/ifNullToElvis.kt deleted file mode 100644 index 5ced09b4b38..00000000000 --- a/idea/testData/quickfix/suppress/inspections/ifNullToElvis.kt +++ /dev/null @@ -1,9 +0,0 @@ -// "Suppress 'FoldInitializerAndIfToElvis' for fun foo" "true" - -fun foo(p: List, b: Boolean) { - var v = p[0] - if (v == null) return - if (b) v = null -} - -// TOOL: org.jetbrains.kotlin.idea.intentions.FoldInitializerAndIfToElvisInspection \ No newline at end of file diff --git a/idea/testData/quickfix/suppress/inspections/ifNullToElvis.kt.after b/idea/testData/quickfix/suppress/inspections/ifNullToElvis.kt.after deleted file mode 100644 index 8f623d98b2b..00000000000 --- a/idea/testData/quickfix/suppress/inspections/ifNullToElvis.kt.after +++ /dev/null @@ -1,10 +0,0 @@ -// "Suppress 'FoldInitializerAndIfToElvis' for fun foo" "true" - -@Suppress("FoldInitializerAndIfToElvis") -fun foo(p: List, b: Boolean) { - var v = p[0] - if (v == null) return - if (b) v = null -} - -// TOOL: org.jetbrains.kotlin.idea.intentions.FoldInitializerAndIfToElvisInspection \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index a9b26ebc4c2..0efd48e8ce9 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -3410,6 +3410,139 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { } } + @TestMetadata("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class FoldInitializerAndIfToElvis extends AbstractLocalInspectionTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + public void testAllFilesPresentInFoldInitializerAndIfToElvis() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), TargetBackend.ANY, true); + } + + @TestMetadata("Break.kt") + public void testBreak() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Break.kt"); + } + + @TestMetadata("CommentInBlock.kt") + public void testCommentInBlock() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/CommentInBlock.kt"); + } + + @TestMetadata("Comments.kt") + public void testComments() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Comments.kt"); + } + + @TestMetadata("Comments2.kt") + public void testComments2() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Comments2.kt"); + } + + @TestMetadata("Continue.kt") + public void testContinue() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Continue.kt"); + } + + @TestMetadata("ExplicitValType.kt") + public void testExplicitValType() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ExplicitValType.kt"); + } + + @TestMetadata("ExplicitVarType.kt") + public void testExplicitVarType() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ExplicitVarType.kt"); + } + + @TestMetadata("IfNotNull.kt") + public void testIfNotNull() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IfNotNull.kt"); + } + + @TestMetadata("ifStatementPriority.kt") + public void testIfStatementPriority() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ifStatementPriority.kt"); + } + + @TestMetadata("IsSameType.kt") + public void testIsSameType() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSameType.kt"); + } + + @TestMetadata("IsSideTypeFake.kt") + public void testIsSideTypeFake() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSideTypeFake.kt"); + } + + @TestMetadata("IsSubType.kt") + public void testIsSubType() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSubType.kt"); + } + + @TestMetadata("IsSuperTypeFake.kt") + public void testIsSuperTypeFake() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/IsSuperTypeFake.kt"); + } + + @TestMetadata("MultiStatementBlock.kt") + public void testMultiStatementBlock() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiStatementBlock.kt"); + } + + @TestMetadata("NotExit.kt") + public void testNotExit() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/NotExit.kt"); + } + + @TestMetadata("NotIs.kt") + public void testNotIs() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/NotIs.kt"); + } + + @TestMetadata("NotIsNullableType.kt") + public void testNotIsNullableType() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/NotIsNullableType.kt"); + } + + @TestMetadata("OtherVar1.kt") + public void testOtherVar1() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/OtherVar1.kt"); + } + + @TestMetadata("OtherVar2.kt") + public void testOtherVar2() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/OtherVar2.kt"); + } + + @TestMetadata("Return.kt") + public void testReturn() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Return.kt"); + } + + @TestMetadata("ThrowInBlock.kt") + public void testThrowInBlock() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/ThrowInBlock.kt"); + } + + @TestMetadata("UsedInside.kt") + public void testUsedInside() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/UsedInside.kt"); + } + + @TestMetadata("UsedInsideInTemplate.kt") + public void testUsedInsideInTemplate() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/UsedInsideInTemplate.kt"); + } + + @TestMetadata("Var.kt") + public void testVar() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/Var.kt"); + } + } + @TestMetadata("idea/testData/inspectionsLocal/forEachParameterNotUsed") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 543bc03d1fd..79d5de6d4d3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -8551,139 +8551,6 @@ public class IntentionTestGenerated extends AbstractIntentionTest { } } - @TestMetadata("idea/testData/intentions/foldInitializerAndIfToElvis") - @TestDataPath("$PROJECT_ROOT") - @RunWith(JUnit3RunnerWithInners.class) - public static class FoldInitializerAndIfToElvis extends AbstractIntentionTest { - private void runTest(String testDataFilePath) throws Exception { - KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); - } - - public void testAllFilesPresentInFoldInitializerAndIfToElvis() throws Exception { - KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/intentions/foldInitializerAndIfToElvis"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), TargetBackend.ANY, true); - } - - @TestMetadata("Break.kt") - public void testBreak() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/Break.kt"); - } - - @TestMetadata("CommentInBlock.kt") - public void testCommentInBlock() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/CommentInBlock.kt"); - } - - @TestMetadata("Comments.kt") - public void testComments() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/Comments.kt"); - } - - @TestMetadata("Comments2.kt") - public void testComments2() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/Comments2.kt"); - } - - @TestMetadata("Continue.kt") - public void testContinue() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/Continue.kt"); - } - - @TestMetadata("ExplicitValType.kt") - public void testExplicitValType() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/ExplicitValType.kt"); - } - - @TestMetadata("ExplicitVarType.kt") - public void testExplicitVarType() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/ExplicitVarType.kt"); - } - - @TestMetadata("IfNotNull.kt") - public void testIfNotNull() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/IfNotNull.kt"); - } - - @TestMetadata("ifStatementPriority.kt") - public void testIfStatementPriority() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/ifStatementPriority.kt"); - } - - @TestMetadata("IsSameType.kt") - public void testIsSameType() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/IsSameType.kt"); - } - - @TestMetadata("IsSideTypeFake.kt") - public void testIsSideTypeFake() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/IsSideTypeFake.kt"); - } - - @TestMetadata("IsSubType.kt") - public void testIsSubType() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/IsSubType.kt"); - } - - @TestMetadata("IsSuperTypeFake.kt") - public void testIsSuperTypeFake() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/IsSuperTypeFake.kt"); - } - - @TestMetadata("MultiStatementBlock.kt") - public void testMultiStatementBlock() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/MultiStatementBlock.kt"); - } - - @TestMetadata("NotExit.kt") - public void testNotExit() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/NotExit.kt"); - } - - @TestMetadata("NotIs.kt") - public void testNotIs() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/NotIs.kt"); - } - - @TestMetadata("NotIsNullableType.kt") - public void testNotIsNullableType() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/NotIsNullableType.kt"); - } - - @TestMetadata("OtherVar1.kt") - public void testOtherVar1() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/OtherVar1.kt"); - } - - @TestMetadata("OtherVar2.kt") - public void testOtherVar2() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/OtherVar2.kt"); - } - - @TestMetadata("Return.kt") - public void testReturn() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/Return.kt"); - } - - @TestMetadata("ThrowInBlock.kt") - public void testThrowInBlock() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/ThrowInBlock.kt"); - } - - @TestMetadata("UsedInside.kt") - public void testUsedInside() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/UsedInside.kt"); - } - - @TestMetadata("UsedInsideInTemplate.kt") - public void testUsedInsideInTemplate() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/UsedInsideInTemplate.kt"); - } - - @TestMetadata("Var.kt") - public void testVar() throws Exception { - runTest("idea/testData/intentions/foldInitializerAndIfToElvis/Var.kt"); - } - } - @TestMetadata("idea/testData/intentions/implementAbstractMember") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index d85d1318ca2..2a720dfa58e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -11879,9 +11879,9 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/suppress/inspections"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), TargetBackend.ANY, true); } - @TestMetadata("ifNullToElvis.kt") - public void testIfNullToElvis() throws Exception { - runTest("idea/testData/quickfix/suppress/inspections/ifNullToElvis.kt"); + @TestMetadata("constantConditionIf.kt") + public void testConstantConditionIf() throws Exception { + runTest("idea/testData/quickfix/suppress/inspections/constantConditionIf.kt"); } @TestMetadata("unusedImports.kt") diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt index b15702815cf..ef5ec1c06c6 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt @@ -132,7 +132,7 @@ private val processings: List = listOf( RemoveExplicitPropertyTypeProcessing(), RemoveRedundantNullabilityProcessing(), generalInspectionBasedProcessing(CanBeValInspection(ignoreNotUsedVals = false)), - intentionBasedProcessing(FoldInitializerAndIfToElvisIntention()), + inspectionBasedProcessing(FoldInitializerAndIfToElvisInspection()), generalInspectionBasedProcessing(RedundantSemicolonInspection()), intentionBasedProcessing(RemoveEmptyClassBodyIntention()), intentionBasedProcessing(