Non-canonical modifiers order: do not highlight annotation
#KT-29238 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
0075e90042
commit
de7adf55ff
@@ -7,12 +7,15 @@ package org.jetbrains.kotlin.idea.inspections
|
|||||||
|
|
||||||
import com.intellij.codeInspection.*
|
import com.intellij.codeInspection.*
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.openapi.util.TextRange
|
||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.addRemoveModifier.sortModifiers
|
import org.jetbrains.kotlin.psi.addRemoveModifier.sortModifiers
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.allChildren
|
import org.jetbrains.kotlin.psi.psiUtil.allChildren
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
|
|
||||||
class SortModifiersInspection : AbstractKotlinInspection(), CleanupLocalInspectionTool {
|
class SortModifiersInspection : AbstractKotlinInspection(), CleanupLocalInspectionTool {
|
||||||
|
|
||||||
@@ -36,6 +39,8 @@ class SortModifiersInspection : AbstractKotlinInspection(), CleanupLocalInspecti
|
|||||||
if (modifiers.isEmpty()) return
|
if (modifiers.isEmpty()) return
|
||||||
|
|
||||||
val startElement = modifierElements.firstOrNull { it.node.elementType is KtModifierKeywordToken } ?: return
|
val startElement = modifierElements.firstOrNull { it.node.elementType is KtModifierKeywordToken } ?: return
|
||||||
|
val endElement = modifierElements.lastOrNull { it.node.elementType is KtModifierKeywordToken } ?: return
|
||||||
|
val rangeInElement = TextRange(startElement.startOffset, endElement.endOffset).shiftLeft(list.startOffset)
|
||||||
|
|
||||||
val sortedModifiers = sortModifiers(modifiers)
|
val sortedModifiers = sortModifiers(modifiers)
|
||||||
if (modifiers == sortedModifiers && !modifiersBeforeAnnotations) return
|
if (modifiers == sortedModifiers && !modifiersBeforeAnnotations) return
|
||||||
@@ -46,8 +51,8 @@ class SortModifiersInspection : AbstractKotlinInspection(), CleanupLocalInspecti
|
|||||||
"Non-canonical modifiers order"
|
"Non-canonical modifiers order"
|
||||||
|
|
||||||
val descriptor = holder.manager.createProblemDescriptor(
|
val descriptor = holder.manager.createProblemDescriptor(
|
||||||
startElement,
|
|
||||||
list,
|
list,
|
||||||
|
rangeInElement,
|
||||||
message,
|
message,
|
||||||
ProblemHighlightType.GENERIC_ERROR_OR_WARNING,
|
ProblemHighlightType.GENERIC_ERROR_OR_WARNING,
|
||||||
isOnTheFly,
|
isOnTheFly,
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
annotation class Ann
|
||||||
|
|
||||||
|
<caret>@Ann
|
||||||
|
abstract internal class Test
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
annotation class Test
|
||||||
|
|
||||||
|
internal abstract <caret>@Test /* this is a test */ class MyTest
|
||||||
+10
@@ -7151,11 +7151,21 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
|||||||
runTest("idea/testData/inspectionsLocal/sortModifiers/annotatedBefore.kt");
|
runTest("idea/testData/inspectionsLocal/sortModifiers/annotatedBefore.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("annotatedBefore2.kt")
|
||||||
|
public void testAnnotatedBefore2() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/sortModifiers/annotatedBefore2.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("annotation.kt")
|
@TestMetadata("annotation.kt")
|
||||||
public void testAnnotation() throws Exception {
|
public void testAnnotation() throws Exception {
|
||||||
runTest("idea/testData/inspectionsLocal/sortModifiers/annotation.kt");
|
runTest("idea/testData/inspectionsLocal/sortModifiers/annotation.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("annotation2.kt")
|
||||||
|
public void testAnnotation2() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/sortModifiers/annotation2.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("annotationGroup.kt")
|
@TestMetadata("annotationGroup.kt")
|
||||||
public void testAnnotationGroup() throws Exception {
|
public void testAnnotationGroup() throws Exception {
|
||||||
runTest("idea/testData/inspectionsLocal/sortModifiers/annotationGroup.kt");
|
runTest("idea/testData/inspectionsLocal/sortModifiers/annotationGroup.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user