diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/SortModifiersInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/SortModifiersInspection.kt index a44401e7bd9..48fb00f8ffe 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/SortModifiersInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/SortModifiersInspection.kt @@ -7,12 +7,15 @@ package org.jetbrains.kotlin.idea.inspections import com.intellij.codeInspection.* import com.intellij.openapi.project.Project +import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiElementVisitor import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.addRemoveModifier.sortModifiers 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 { @@ -36,6 +39,8 @@ class SortModifiersInspection : AbstractKotlinInspection(), CleanupLocalInspecti if (modifiers.isEmpty()) 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) if (modifiers == sortedModifiers && !modifiersBeforeAnnotations) return @@ -46,8 +51,8 @@ class SortModifiersInspection : AbstractKotlinInspection(), CleanupLocalInspecti "Non-canonical modifiers order" val descriptor = holder.manager.createProblemDescriptor( - startElement, list, + rangeInElement, message, ProblemHighlightType.GENERIC_ERROR_OR_WARNING, isOnTheFly, diff --git a/idea/testData/inspectionsLocal/sortModifiers/annotatedBefore2.kt b/idea/testData/inspectionsLocal/sortModifiers/annotatedBefore2.kt new file mode 100644 index 00000000000..81085a1f734 --- /dev/null +++ b/idea/testData/inspectionsLocal/sortModifiers/annotatedBefore2.kt @@ -0,0 +1,5 @@ +// PROBLEM: none +annotation class Ann + +@Ann +abstract internal class Test \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/sortModifiers/annotation2.kt b/idea/testData/inspectionsLocal/sortModifiers/annotation2.kt new file mode 100644 index 00000000000..3f897e9246c --- /dev/null +++ b/idea/testData/inspectionsLocal/sortModifiers/annotation2.kt @@ -0,0 +1,4 @@ +// PROBLEM: none +annotation class Test + +internal abstract @Test /* this is a test */ class MyTest \ 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 08564c78715..a8eaa482b41 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -7151,11 +7151,21 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { 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") public void testAnnotation() throws Exception { 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") public void testAnnotationGroup() throws Exception { runTest("idea/testData/inspectionsLocal/sortModifiers/annotationGroup.kt");