From 89816c5f12347db66839e4dd52bf48ee6d31b0e1 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 21 Jun 2016 18:03:21 +0300 Subject: [PATCH] References: Support implicit references to annotation method 'value'. Support Find Usages/Rename on these references #KT-12657 Fixed (cherry picked from commit 68d0d84) --- ChangeLog.md | 1 + .../jetbrains/kotlin/asJava/LightClassUtil.kt | 6 +- idea/src/META-INF/plugin.xml | 5 + ...ationMethodImplicitReferenceContributor.kt | 95 +++++++++++++++++++ ...onMethodKotlinImplicitReferenceSearcher.kt | 60 ++++++++++++ .../defaultJavaAnnotationMethodUsages.0.java | 13 +++ .../defaultJavaAnnotationMethodUsages.1.kt | 5 + ...aultJavaAnnotationMethodUsages.results.txt | 4 + ...otlinDefaultAnnotationParameterUsages.0.kt | 9 ++ ...linDefaultAnnotationParameterUsages.1.java | 7 ++ ...faultAnnotationParameterUsages.results.txt | 4 + .../after/test/JAnn.java | 13 +++ .../after/test/KAnn.kt | 7 ++ .../before/test/JAnn.java | 13 +++ .../before/test/KAnn.kt | 7 ++ .../renameDefaultJavaAnnotationMethod.test | 6 ++ .../after/test/JAnn.java | 9 ++ .../after/test/KAnn.kt | 9 ++ .../before/test/JAnn.java | 9 ++ .../before/test/KAnn.kt | 9 ++ .../renameDefaultKotlinAnnotationMethod.test | 6 ++ .../findUsages/FindUsagesTestGenerated.java | 12 +++ .../rename/RenameTestGenerated.java | 12 +++ 23 files changed, 316 insertions(+), 5 deletions(-) create mode 100644 idea/src/org/jetbrains/kotlin/idea/references/KotlinDefaultAnnotationMethodImplicitReferenceContributor.kt create mode 100644 idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/DefaultAnnotationMethodKotlinImplicitReferenceSearcher.kt create mode 100644 idea/testData/findUsages/java/findJavaMethodUsages/defaultJavaAnnotationMethodUsages.0.java create mode 100644 idea/testData/findUsages/java/findJavaMethodUsages/defaultJavaAnnotationMethodUsages.1.kt create mode 100644 idea/testData/findUsages/java/findJavaMethodUsages/defaultJavaAnnotationMethodUsages.results.txt create mode 100644 idea/testData/findUsages/kotlin/findParameterUsages/kotlinDefaultAnnotationParameterUsages.0.kt create mode 100644 idea/testData/findUsages/kotlin/findParameterUsages/kotlinDefaultAnnotationParameterUsages.1.java create mode 100644 idea/testData/findUsages/kotlin/findParameterUsages/kotlinDefaultAnnotationParameterUsages.results.txt create mode 100644 idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/after/test/JAnn.java create mode 100644 idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/after/test/KAnn.kt create mode 100644 idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/before/test/JAnn.java create mode 100644 idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/before/test/KAnn.kt create mode 100644 idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/renameDefaultJavaAnnotationMethod.test create mode 100644 idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/after/test/JAnn.java create mode 100644 idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/after/test/KAnn.kt create mode 100644 idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/before/test/JAnn.java create mode 100644 idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/before/test/KAnn.kt create mode 100644 idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/renameDefaultKotlinAnnotationMethod.test diff --git a/ChangeLog.md b/ChangeLog.md index 42d46c0eb3c..b12d58e50a5 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -227,6 +227,7 @@ - [`KT-7851`](https://youtrack.jetbrains.com/issue/KT-7851) Respect naming conventions in automatic variable rename - [`KT-8044`](https://youtrack.jetbrains.com/issue/KT-8044), [`KT-9432`](https://youtrack.jetbrains.com/issue/KT-9432) Support @JvmName annotation in rename refactoring - [`KT-8512`](https://youtrack.jetbrains.com/issue/KT-8512) Support "Rename tests" options in Rename dialog +- [`KT-12657`](https://youtrack.jetbrains.com/issue/KT-12657) Rename implicit usages of annotation method 'value' - [`KT-12759`](https://youtrack.jetbrains.com/issue/KT-12759) Suggest renaming both property accessors with matching @JvmName when renaming one of them from Java ###### Issues fixed diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt index da83c805235..eb29800629a 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt @@ -197,11 +197,7 @@ object LightClassUtil { var setterWrapper = specialSetter val additionalAccessors = arrayListOf() - val wrappers = getPsiMethodWrappers(ktDeclaration, true).filter { - JvmAbi.isGetterName(it.name) || JvmAbi.isSetterName(it.name) - } - - for (wrapper in wrappers) { + for (wrapper in getPsiMethodWrappers(ktDeclaration, true)) { if (JvmAbi.isSetterName(wrapper.name)) { if (setterWrapper == null || setterWrapper === specialSetter) { setterWrapper = wrapper diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index dfd0e8ea403..2c0abe2b501 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -413,6 +413,10 @@ id="kotlinFilePathReferenceContributor" language="kotlin" implementation="org.jetbrains.kotlin.idea.references.KotlinFilePathReferenceContributor"/> + + diff --git a/idea/src/org/jetbrains/kotlin/idea/references/KotlinDefaultAnnotationMethodImplicitReferenceContributor.kt b/idea/src/org/jetbrains/kotlin/idea/references/KotlinDefaultAnnotationMethodImplicitReferenceContributor.kt new file mode 100644 index 00000000000..4ac7c805d42 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/references/KotlinDefaultAnnotationMethodImplicitReferenceContributor.kt @@ -0,0 +1,95 @@ +/* + * 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.references + +import com.intellij.openapi.util.TextRange +import com.intellij.psi.* +import com.intellij.psi.util.MethodSignatureUtil +import com.intellij.util.ArrayUtil +import com.intellij.util.IncorrectOperationException +import org.jetbrains.kotlin.asJava.unwrapped +import org.jetbrains.kotlin.idea.core.quoteIfNeeded +import org.jetbrains.kotlin.idea.core.replaced +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject +import org.jetbrains.kotlin.psi.psiUtil.findPropertyByName +import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch +import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType + +class KotlinDefaultAnnotationMethodImplicitReferenceContributor : AbstractKotlinReferenceContributor() { + class ReferenceImpl(private val argument: KtValueArgument) : PsiReference { + private fun resolveAnnotationCallee(): PsiElement? = argument.getStrictParentOfType() + ?.calleeExpression + ?.constructorReferenceExpression + ?.mainReference + ?.resolve() + + override fun getElement() = argument + + override fun getRangeInElement() = TextRange.EMPTY_RANGE + + override fun resolve(): PsiElement? { + val annotationPsi = resolveAnnotationCallee() ?: return null + val name = PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME + return when (annotationPsi) { + is PsiClass -> { + val signature = MethodSignatureUtil.createMethodSignature( + name, PsiType.EMPTY_ARRAY, PsiTypeParameter.EMPTY_ARRAY, PsiSubstitutor.EMPTY + ) + MethodSignatureUtil.findMethodBySignature(annotationPsi, signature, false) + } + is KtPrimaryConstructor -> annotationPsi.containingClassOrObject?.findPropertyByName(name) as? KtParameter + else -> null + } + } + + override fun getCanonicalText() = PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME + + override fun handleElementRename(newElementName: String): PsiElement { + val psiFactory = KtPsiFactory(argument) + val newArgument = psiFactory.createArgument( + argument.getArgumentExpression(), + Name.identifier(newElementName.quoteIfNeeded()), + argument.getSpreadElement() != null + ) + return argument.replaced(newArgument) + } + + override fun bindToElement(element: PsiElement) = throw IncorrectOperationException("Not implemented") + + override fun isReferenceTo(element: PsiElement): Boolean { + val unwrapped = element.unwrapped + return (unwrapped is PsiMethod || unwrapped is KtParameter) && unwrapped == resolve() + } + + override fun getVariants() = ArrayUtil.EMPTY_OBJECT_ARRAY + + override fun isSoft() = false + } + + override fun registerReferenceProviders(registrar: PsiReferenceRegistrar) { + registrar.registerProvider { + if (it.isNamed()) return@registerProvider null + val annotationEntry = it.getParentOfTypeAndBranch { valueArgumentList } + ?: return@registerProvider null + if (annotationEntry.valueArguments.size != 1) return@registerProvider null + + ReferenceImpl(it) + } + } +} diff --git a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/DefaultAnnotationMethodKotlinImplicitReferenceSearcher.kt b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/DefaultAnnotationMethodKotlinImplicitReferenceSearcher.kt new file mode 100644 index 00000000000..e36c8389ea0 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/DefaultAnnotationMethodKotlinImplicitReferenceSearcher.kt @@ -0,0 +1,60 @@ +/* + * 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.search.ideaExtensions + +import com.intellij.openapi.application.QueryExecutorBase +import com.intellij.openapi.application.ReadActionProcessor +import com.intellij.openapi.application.runReadAction +import com.intellij.psi.PsiAnnotation +import com.intellij.psi.PsiMethod +import com.intellij.psi.PsiReference +import com.intellij.psi.search.searches.MethodReferencesSearch +import com.intellij.psi.search.searches.ReferencesSearch +import com.intellij.psi.util.PsiUtil +import com.intellij.util.Processor +import org.jetbrains.kotlin.idea.references.KtSimpleNameReference +import org.jetbrains.kotlin.idea.search.restrictToKotlinSources +import org.jetbrains.kotlin.psi.KtAnnotationEntry +import org.jetbrains.kotlin.psi.KtValueArgument +import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch +import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull +import org.jetbrains.kotlin.idea.references.KotlinDefaultAnnotationMethodImplicitReferenceContributor.ReferenceImpl as ImplicitReference + +class DefaultAnnotationMethodKotlinImplicitReferenceSearcher : QueryExecutorBase(true) { + private val PsiMethod.isDefaultAnnotationMethod: Boolean + get() = PsiUtil.isAnnotationMethod(this) && name == PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME && parameterList.parametersCount == 0 + + private fun createReferenceProcessor(consumer: Processor) = object : ReadActionProcessor() { + override fun processInReadAction(reference: PsiReference): Boolean { + if (reference !is KtSimpleNameReference) return true + val annotationEntry = reference.expression.getParentOfTypeAndBranch { typeReference } ?: return true + val argument = annotationEntry.valueArguments.singleOrNull() as? KtValueArgument ?: return true + val implicitRef = argument.references.firstIsInstanceOrNull() ?: return true + return consumer.process(implicitRef) + } + } + + override fun processQuery(queryParameters: MethodReferencesSearch.SearchParameters, consumer: Processor) { + runReadAction { + val method = queryParameters.method + if (!method.isDefaultAnnotationMethod) return@runReadAction null + val annotationClass = method.containingClass ?: return@runReadAction null + val searchScope = queryParameters.effectiveSearchScope.restrictToKotlinSources() + ReferencesSearch.search(annotationClass, searchScope) + }?.forEach(createReferenceProcessor(consumer)) + } +} diff --git a/idea/testData/findUsages/java/findJavaMethodUsages/defaultJavaAnnotationMethodUsages.0.java b/idea/testData/findUsages/java/findJavaMethodUsages/defaultJavaAnnotationMethodUsages.0.java new file mode 100644 index 00000000000..23154d00b75 --- /dev/null +++ b/idea/testData/findUsages/java/findJavaMethodUsages/defaultJavaAnnotationMethodUsages.0.java @@ -0,0 +1,13 @@ +// PSI_ELEMENT: com.intellij.psi.PsiMethod +// OPTIONS: usages +public @interface JAnn { + String value(); +} + +class Test { + @JAnn("abc") + void test1() { } + + @JAnn(value = "abc") + void test2() { } +} \ No newline at end of file diff --git a/idea/testData/findUsages/java/findJavaMethodUsages/defaultJavaAnnotationMethodUsages.1.kt b/idea/testData/findUsages/java/findJavaMethodUsages/defaultJavaAnnotationMethodUsages.1.kt new file mode 100644 index 00000000000..823b3865578 --- /dev/null +++ b/idea/testData/findUsages/java/findJavaMethodUsages/defaultJavaAnnotationMethodUsages.1.kt @@ -0,0 +1,5 @@ +@JAnn("abc") +fun test1() {} + +@JAnn(value = "abc") +fun test2() {} \ No newline at end of file diff --git a/idea/testData/findUsages/java/findJavaMethodUsages/defaultJavaAnnotationMethodUsages.results.txt b/idea/testData/findUsages/java/findJavaMethodUsages/defaultJavaAnnotationMethodUsages.results.txt new file mode 100644 index 00000000000..218810a82fa --- /dev/null +++ b/idea/testData/findUsages/java/findJavaMethodUsages/defaultJavaAnnotationMethodUsages.results.txt @@ -0,0 +1,4 @@ +[defaultJavaAnnotationMethodUsages.0.java] Unclassified usage 11 @JAnn(value = "abc") +[defaultJavaAnnotationMethodUsages.0.java] Unclassified usage 8 @JAnn("abc") +[defaultJavaAnnotationMethodUsages.1.kt] Named argument 4 @JAnn(value = "abc") +[defaultJavaAnnotationMethodUsages.1.kt] Unclassified usage 1 @JAnn("abc") \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findParameterUsages/kotlinDefaultAnnotationParameterUsages.0.kt b/idea/testData/findUsages/kotlin/findParameterUsages/kotlinDefaultAnnotationParameterUsages.0.kt new file mode 100644 index 00000000000..b2f2ee7309e --- /dev/null +++ b/idea/testData/findUsages/kotlin/findParameterUsages/kotlinDefaultAnnotationParameterUsages.0.kt @@ -0,0 +1,9 @@ +// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtParameter +// OPTIONS: usages +annotation class KAnn(val value: String) + +@KAnn("abc") +fun test1() {} + +@KAnn(value = "abc") +fun test2() {} \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findParameterUsages/kotlinDefaultAnnotationParameterUsages.1.java b/idea/testData/findUsages/kotlin/findParameterUsages/kotlinDefaultAnnotationParameterUsages.1.java new file mode 100644 index 00000000000..a6111b775a7 --- /dev/null +++ b/idea/testData/findUsages/kotlin/findParameterUsages/kotlinDefaultAnnotationParameterUsages.1.java @@ -0,0 +1,7 @@ +class Test { + @KAnn("abc") + void test1() { } + + @KAnn(value = "abc") + void test2() { } +} \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findParameterUsages/kotlinDefaultAnnotationParameterUsages.results.txt b/idea/testData/findUsages/kotlin/findParameterUsages/kotlinDefaultAnnotationParameterUsages.results.txt new file mode 100644 index 00000000000..7969817be03 --- /dev/null +++ b/idea/testData/findUsages/kotlin/findParameterUsages/kotlinDefaultAnnotationParameterUsages.results.txt @@ -0,0 +1,4 @@ +[kotlinDefaultAnnotationParameterUsages.0.kt] Named argument 8 @KAnn(value = "abc") +[kotlinDefaultAnnotationParameterUsages.0.kt] Unclassified usage 5 @KAnn("abc") +[kotlinDefaultAnnotationParameterUsages.1.java] Unclassified usage 2 @KAnn("abc") +[kotlinDefaultAnnotationParameterUsages.1.java] Unclassified usage 5 @KAnn(value = "abc") \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/after/test/JAnn.java b/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/after/test/JAnn.java new file mode 100644 index 00000000000..5059098f4ee --- /dev/null +++ b/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/after/test/JAnn.java @@ -0,0 +1,13 @@ +package test; + +public @interface JAnn { + String valueNew(); +} + +class Test { + @JAnn(valueNew = "abc") + void test1() { } + + @JAnn(valueNew = "abc") + void test2() { } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/after/test/KAnn.kt b/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/after/test/KAnn.kt new file mode 100644 index 00000000000..f6dba7ae76f --- /dev/null +++ b/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/after/test/KAnn.kt @@ -0,0 +1,7 @@ +package test + +@JAnn(valueNew = "abc") +fun test1() {} + +@JAnn(valueNew = "abc") +fun test2() {} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/before/test/JAnn.java b/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/before/test/JAnn.java new file mode 100644 index 00000000000..2d466ce0d71 --- /dev/null +++ b/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/before/test/JAnn.java @@ -0,0 +1,13 @@ +package test; + +public @interface JAnn { + String /*rename*/value(); +} + +class Test { + @JAnn("abc") + void test1() { } + + @JAnn(value = "abc") + void test2() { } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/before/test/KAnn.kt b/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/before/test/KAnn.kt new file mode 100644 index 00000000000..a2901a9e1ed --- /dev/null +++ b/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/before/test/KAnn.kt @@ -0,0 +1,7 @@ +package test + +@JAnn("abc") +fun test1() {} + +@JAnn(value = "abc") +fun test2() {} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/renameDefaultJavaAnnotationMethod.test b/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/renameDefaultJavaAnnotationMethod.test new file mode 100644 index 00000000000..71fa2bb1230 --- /dev/null +++ b/idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/renameDefaultJavaAnnotationMethod.test @@ -0,0 +1,6 @@ +{ + "type": "MARKED_ELEMENT", + "mainFile": "test/JAnn.java", + "newName": "valueNew", + "withRuntime": "true" +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/after/test/JAnn.java b/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/after/test/JAnn.java new file mode 100644 index 00000000000..57683945927 --- /dev/null +++ b/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/after/test/JAnn.java @@ -0,0 +1,9 @@ +package test; + +class Test { + @KAnn(valueNew = "abc") + void test1() { } + + @KAnn(valueNew = "abc") + void test2() { } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/after/test/KAnn.kt b/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/after/test/KAnn.kt new file mode 100644 index 00000000000..63e1e0c6675 --- /dev/null +++ b/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/after/test/KAnn.kt @@ -0,0 +1,9 @@ +package test + +annotation class KAnn(val valueNew: String) + +@KAnn(valueNew = "abc") +fun test1() {} + +@KAnn(valueNew = "abc") +fun test2() {} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/before/test/JAnn.java b/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/before/test/JAnn.java new file mode 100644 index 00000000000..7d76d9fbc46 --- /dev/null +++ b/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/before/test/JAnn.java @@ -0,0 +1,9 @@ +package test; + +class Test { + @KAnn("abc") + void test1() { } + + @KAnn(value = "abc") + void test2() { } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/before/test/KAnn.kt b/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/before/test/KAnn.kt new file mode 100644 index 00000000000..730763a12ac --- /dev/null +++ b/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/before/test/KAnn.kt @@ -0,0 +1,9 @@ +package test + +annotation class KAnn(val /*rename*/value: String) + +@KAnn("abc") +fun test1() {} + +@KAnn(value = "abc") +fun test2() {} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/renameDefaultKotlinAnnotationMethod.test b/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/renameDefaultKotlinAnnotationMethod.test new file mode 100644 index 00000000000..1a90cd07d17 --- /dev/null +++ b/idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/renameDefaultKotlinAnnotationMethod.test @@ -0,0 +1,6 @@ +{ + "type": "MARKED_ELEMENT", + "mainFile": "test/KAnn.kt", + "newName": "valueNew", + "withRuntime": "true" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java b/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java index 72bd3a1bdfb..add77406acd 100644 --- a/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java @@ -822,6 +822,12 @@ public class FindUsagesTestGenerated extends AbstractFindUsagesTest { doTest(fileName); } + @TestMetadata("kotlinDefaultAnnotationParameterUsages.0.kt") + public void testKotlinDefaultAnnotationParameterUsages() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findParameterUsages/kotlinDefaultAnnotationParameterUsages.0.kt"); + doTest(fileName); + } + @TestMetadata("kotlinFunctionParameterUsages.0.kt") public void testKotlinFunctionParameterUsages() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findParameterUsages/kotlinFunctionParameterUsages.0.kt"); @@ -1428,6 +1434,12 @@ public class FindUsagesTestGenerated extends AbstractFindUsagesTest { doTest(fileName); } + @TestMetadata("defaultJavaAnnotationMethodUsages.0.java") + public void testDefaultJavaAnnotationMethodUsages() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/java/findJavaMethodUsages/defaultJavaAnnotationMethodUsages.0.java"); + doTest(fileName); + } + @TestMetadata("JKMethodOverrides.0.java") public void testJKMethodOverrides() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/java/findJavaMethodUsages/JKMethodOverrides.0.java"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java index 4251f21609a..825774ffb45 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -311,6 +311,18 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("renameDefaultJavaAnnotationMethod/renameDefaultJavaAnnotationMethod.test") + public void testRenameDefaultJavaAnnotationMethod_RenameDefaultJavaAnnotationMethod() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameDefaultJavaAnnotationMethod/renameDefaultJavaAnnotationMethod.test"); + doTest(fileName); + } + + @TestMetadata("renameDefaultKotlinAnnotationMethod/renameDefaultKotlinAnnotationMethod.test") + public void testRenameDefaultKotlinAnnotationMethod_RenameDefaultKotlinAnnotationMethod() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameDefaultKotlinAnnotationMethod/renameDefaultKotlinAnnotationMethod.test"); + doTest(fileName); + } + @TestMetadata("renameEmptyKotlinFile/renameFile.test") public void testRenameEmptyKotlinFile_RenameFile() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameEmptyKotlinFile/renameFile.test");