diff --git a/ChangeLog.md b/ChangeLog.md index 34db7efc6e7..3ab3ac0ebab 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -103,6 +103,7 @@ These artifacts include extensions for the types available in the latter JDKs, s - [`KT-9285`](https://youtrack.jetbrains.com/issue/KT-9285) Rename: Optimize search of private class members - [`KT-13589`](https://youtrack.jetbrains.com/issue/KT-13589) Use TODO() consistently in implementation stubs - [`KT-13630`](https://youtrack.jetbrains.com/issue/KT-13630) Do not show Change Signature dialog when applying "Remove parameter" quick-fix +- Re-highlight only single function after local modifications #### Intention actions, inspections and quickfixes diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinChangeLocalityDetector.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinChangeLocalityDetector.kt new file mode 100644 index 00000000000..adede6ab4d4 --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinChangeLocalityDetector.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2016 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.highlighter + +import com.intellij.codeInsight.daemon.ChangeLocalityDetector +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.parents + +class KotlinChangeLocalityDetector : ChangeLocalityDetector { + override fun getChangeHighlightingDirtyScopeFor(element: PsiElement): PsiElement? { + val parent = element.parent + if (element is KtBlockExpression && parent is KtNamedFunction && parent.name != null) { + // Do nothing for local functions because of at least WRAPPED_INTO_REF highlighting + + if (parent.parents.all { it is KtClassBody || it is KtClassOrObject || it is KtFile || it is KtScript }) { + return parent + } + } + + return null + } +} \ No newline at end of file diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 776e855e40b..28924441a8f 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -495,6 +495,7 @@ +