Quick Fixes: Implement "Rename unresolved reference" fix
#KT-8795 Fixed
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.utils
|
||||
|
||||
import java.util.*
|
||||
|
||||
class HammingComparator<T>(private val referenceString: String, private val asString: T.() -> String) : Comparator<T> {
|
||||
private fun countDifference(s1: String): Int {
|
||||
return (0..Math.min(s1.lastIndex, referenceString.lastIndex)).count { s1[it] != referenceString[it] }
|
||||
}
|
||||
|
||||
override fun compare(lookupItem1: T, lookupItem2: T): Int {
|
||||
return countDifference(lookupItem1.asString()) - countDifference(lookupItem2.asString())
|
||||
}
|
||||
}
|
||||
@@ -85,6 +85,8 @@ public fun <K> Iterable<K>.mapToIndex(): Map<K, Int> {
|
||||
|
||||
public inline fun <T, C: Collection<T>> C.ifEmpty(body: () -> C): C = if (isEmpty()) body() else this
|
||||
|
||||
public inline fun <T> Array<out T>.ifEmpty(body: () -> Array<out T>): Array<out T> = if (isEmpty()) body() else this
|
||||
|
||||
public fun <T: Any> emptyOrSingletonList(item: T?): List<T> = if (item == null) listOf() else listOf(item)
|
||||
|
||||
public fun <T: Any> MutableCollection<T>.addIfNotNull(t: T?) {
|
||||
|
||||
@@ -345,6 +345,9 @@ public class QuickFixRegistrar : QuickFixContributor {
|
||||
|
||||
UNRESOLVED_REFERENCE.registerFactory(KotlinAddOrderEntryActionFactory)
|
||||
|
||||
UNRESOLVED_REFERENCE.registerFactory(RenameUnresolvedReferenceActionFactory)
|
||||
EXPRESSION_EXPECTED_PACKAGE_FOUND.registerFactory(RenameUnresolvedReferenceActionFactory)
|
||||
|
||||
MISPLACED_TYPE_PARAMETER_CONSTRAINTS.registerFactory(MoveTypeParameterConstraintFix)
|
||||
|
||||
DELEGATE_RESOLVED_TO_DEPRECATED_CONVENTION.registerFactory(DeprecatedFunctionConventionFix)
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.idea.quickfix
|
||||
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle
|
||||
import com.intellij.codeInsight.intention.IntentionAction
|
||||
import com.intellij.codeInsight.lookup.LookupElement
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder
|
||||
import com.intellij.codeInsight.template.*
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiFile
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility
|
||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||
import org.jetbrains.kotlin.idea.codeInsight.ReferenceVariantsHelper
|
||||
import org.jetbrains.kotlin.idea.core.isVisible
|
||||
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.guessTypes
|
||||
import org.jetbrains.kotlin.idea.util.psi.patternMatching.KotlinPsiUnifier
|
||||
import org.jetbrains.kotlin.idea.util.psi.patternMatching.toRange
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
|
||||
import org.jetbrains.kotlin.utils.HammingComparator
|
||||
import org.jetbrains.kotlin.utils.ifEmpty
|
||||
import java.util.*
|
||||
|
||||
object RenameUnresolvedReferenceActionFactory : KotlinSingleIntentionActionFactory() {
|
||||
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
|
||||
val ref = diagnostic.psiElement as? KtNameReferenceExpression ?: return null
|
||||
return RenameUnresolvedReferenceFix(ref)
|
||||
}
|
||||
}
|
||||
|
||||
class RenameUnresolvedReferenceFix(element: KtNameReferenceExpression): KotlinQuickFixAction<KtNameReferenceExpression>(element) {
|
||||
companion object {
|
||||
private val INPUT_VARIABLE_NAME = "INPUT_VAR"
|
||||
private val OTHER_VARIABLE_NAME = "OTHER_VAR"
|
||||
}
|
||||
|
||||
private class ReferenceNameExpression(
|
||||
private val items: Array<out LookupElement>,
|
||||
private val originalReferenceName: String
|
||||
) : Expression() {
|
||||
init {
|
||||
Arrays.sort(items, HammingComparator(originalReferenceName, { lookupString }))
|
||||
}
|
||||
|
||||
override fun calculateResult(context: ExpressionContext) = TextResult(items.firstOrNull()?.lookupString ?: originalReferenceName)
|
||||
|
||||
override fun calculateQuickResult(context: ExpressionContext) = null
|
||||
|
||||
override fun calculateLookupItems(context: ExpressionContext) = if (items.size <= 1) null else items
|
||||
}
|
||||
|
||||
override fun getText() = QuickFixBundle.message("rename.wrong.reference.text")
|
||||
|
||||
override fun getFamilyName() = QuickFixBundle.message("rename.wrong.reference.family")
|
||||
|
||||
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean {
|
||||
return super.isAvailable(project, editor, file)
|
||||
&& editor != null
|
||||
&& element.getStrictParentOfType<KtTypeReference>() == null
|
||||
}
|
||||
|
||||
private fun KtExpression.isCallee() = getParentOfTypeAndBranch<KtCallElement> { calleeExpression } != null
|
||||
|
||||
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
||||
if (editor == null) return
|
||||
val patternExpression = element.getQualifiedElement() as? KtExpression ?: return
|
||||
|
||||
val originalName = element.getReferencedName()
|
||||
val container = element.parents.firstOrNull { it is KtDeclarationWithBody || it is KtClassOrObject || it is KtFile } ?: return
|
||||
val isCallee = element.isCallee()
|
||||
val occurrences = patternExpression.toRange()
|
||||
.match(container, KotlinPsiUnifier.DEFAULT)
|
||||
.mapNotNull {
|
||||
val candidate = (it.range.elements.first() as? KtExpression)?.getQualifiedElementSelector() as? KtNameReferenceExpression
|
||||
if (candidate != null && candidate.isCallee() == isCallee) candidate else null
|
||||
}
|
||||
|
||||
val resolutionFacade = element.getResolutionFacade()
|
||||
val context = resolutionFacade.analyze(element, BodyResolveMode.PARTIAL)
|
||||
val moduleDescriptor = resolutionFacade.moduleDescriptor
|
||||
val variantsHelper = ReferenceVariantsHelper(context, resolutionFacade, moduleDescriptor) {
|
||||
it !is DeclarationDescriptorWithVisibility || it.isVisible(element, null, context, resolutionFacade)
|
||||
}
|
||||
val expectedTypes = patternExpression
|
||||
.guessTypes(context, moduleDescriptor)
|
||||
.ifEmpty { arrayOf(moduleDescriptor.builtIns.nullableAnyType) }
|
||||
val descriptorKindFilter = if (isCallee) DescriptorKindFilter.FUNCTIONS else DescriptorKindFilter.VARIABLES
|
||||
val lookupItems = variantsHelper
|
||||
.getReferenceVariants(element, descriptorKindFilter, { true })
|
||||
.filter { candidate ->
|
||||
candidate is CallableDescriptor && (expectedTypes.any { candidate.returnType?.isSubtypeOf(it) ?: false })
|
||||
}
|
||||
.mapTo(if (ApplicationManager.getApplication().isUnitTestMode) linkedSetOf() else linkedSetOf(originalName)) {
|
||||
it.name.asString()
|
||||
}
|
||||
.map { LookupElementBuilder.create(it) }
|
||||
.toTypedArray()
|
||||
val nameExpression = ReferenceNameExpression(lookupItems, originalName)
|
||||
|
||||
val builder = TemplateBuilderImpl(container)
|
||||
occurrences.forEach {
|
||||
if (it != element) {
|
||||
builder.replaceElement(it.getReferencedNameElement(), OTHER_VARIABLE_NAME, INPUT_VARIABLE_NAME, false)
|
||||
}
|
||||
else {
|
||||
builder.replaceElement(it.getReferencedNameElement(), INPUT_VARIABLE_NAME, nameExpression, true)
|
||||
}
|
||||
}
|
||||
|
||||
editor.caretModel.moveToOffset(container.startOffset)
|
||||
TemplateManager.getInstance(project).startTemplate(editor, builder.buildInlineTemplate())
|
||||
}
|
||||
}
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
// "class org.jetbrains.kotlin.idea.quickfix.AutoImportFix" "false"
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: externalFun
|
||||
|
||||
package testing
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// ACTION: Create object 'Nested'
|
||||
// ACTION: Create parameter 'Nested'
|
||||
// ACTION: Create property 'Nested'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: Nested
|
||||
|
||||
fun test() {
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// ACTION: Create object 'PrivateClass'
|
||||
// ACTION: Create parameter 'PrivateClass'
|
||||
// ACTION: Create property 'PrivateClass'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: PrivateClass
|
||||
|
||||
fun test() {
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
// ACTION: Create interface 'SomeTest'
|
||||
// ACTION: Create enum 'SomeTest'
|
||||
// ACTION: Create object 'SomeTest'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: SomeTest
|
||||
|
||||
package testing
|
||||
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
// "class org.jetbrains.kotlin.idea.quickfix.AutoImportFix" "false"
|
||||
// ACTION: Create class 'SomeTest'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: SomeTest
|
||||
|
||||
package testing
|
||||
|
||||
Vendored
+1
@@ -3,6 +3,7 @@
|
||||
// ERROR: Expression expected, but a package name found
|
||||
// ACTION: Create class 'SomeTest'
|
||||
// ACTION: Replace safe access expression with 'if' expression
|
||||
// ACTION: Rename reference
|
||||
|
||||
package testing
|
||||
|
||||
|
||||
+1
@@ -1,6 +1,7 @@
|
||||
// "class org.jetbrains.kotlin.idea.quickfix.AutoImportFix" "false"
|
||||
// ACTION: Create class 'SomeClass'
|
||||
// ACTION: Create function 'SomeClass'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: SomeClass
|
||||
|
||||
val x = <caret>SomeClass()
|
||||
@@ -1,6 +1,7 @@
|
||||
// "class org.jetbrains.kotlin.idea.quickfix.AutoImportFix" "false"
|
||||
// ACTION: Create class 'ExcludedClass'
|
||||
// ACTION: Create function 'ExcludedClass'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: ExcludedClass
|
||||
|
||||
val x = <caret>ExcludedClass()
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
// "class org.jetbrains.kotlin.idea.quickfix.AutoImportFix" "false"
|
||||
// ACTION: Create function 'someFunction'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: someFunction
|
||||
|
||||
val x = <caret>someFunction()
|
||||
@@ -1,6 +1,7 @@
|
||||
// "class org.jetbrains.kotlin.idea.quickfix.AutoImportFix" "false"
|
||||
// ACTION: Create function 'FooPackage'
|
||||
// ACTION: Create class 'FooPackage'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: FooPackage
|
||||
|
||||
package packageClass
|
||||
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
// "Create annotation 'foo'" "false"
|
||||
// ACTION: Create function 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
fun test() = <caret>foo(1, "2")
|
||||
+1
@@ -1,6 +1,7 @@
|
||||
// "Create class 'Foo'" "false"
|
||||
// ACTION: Create function 'Foo'
|
||||
// ACTION: Convert to block body
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: Foo
|
||||
|
||||
internal fun test(): A = <caret>Foo(2, "2")
|
||||
Vendored
+1
@@ -1,6 +1,7 @@
|
||||
// "Create class 'Foo'" "false"
|
||||
// ACTION: Create function 'Foo'
|
||||
// ACTION: Convert to block body
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: Foo
|
||||
|
||||
final class A
|
||||
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
// "Create class 'Foo'" "false"
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: Foo
|
||||
|
||||
fun test() = J.<caret>Foo(2, "2")
|
||||
Vendored
+1
@@ -1,5 +1,6 @@
|
||||
// "Create class 'Foo'" "false"
|
||||
// ACTION: Create extension function 'Foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: Foo
|
||||
|
||||
fun test() {
|
||||
|
||||
Vendored
+1
@@ -1,5 +1,6 @@
|
||||
// "Create class 'Foo'" "false"
|
||||
// ACTION: Create extension function 'Foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: Foo
|
||||
|
||||
class A<T>(val items: List<T>) {
|
||||
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
// "Create class 'A'" "false"
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
import J.<caret>A
|
||||
|
||||
|
||||
+1
@@ -3,6 +3,7 @@
|
||||
// ACTION: Create class 'A'
|
||||
// ACTION: Create enum 'A'
|
||||
// ACTION: Create interface 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
import E.<caret>A
|
||||
|
||||
|
||||
+1
@@ -4,6 +4,7 @@
|
||||
// ACTION: Create object 'A'
|
||||
// ACTION: Create enum 'A'
|
||||
// ACTION: Create annotation 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
Vendored
+1
@@ -4,6 +4,7 @@
|
||||
// ACTION: Create object 'A'
|
||||
// ACTION: Create enum 'A'
|
||||
// ACTION: Create annotation 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
+1
@@ -4,6 +4,7 @@
|
||||
// ACTION: Create class 'A'
|
||||
// ACTION: Create interface 'A'
|
||||
// ACTION: Create enum 'A'
|
||||
// ACTION: Rename reference
|
||||
import J.<caret>A
|
||||
|
||||
class X {
|
||||
|
||||
Vendored
+1
@@ -3,6 +3,7 @@
|
||||
// ACTION: Create local variable 'A'
|
||||
// ACTION: Create parameter 'A'
|
||||
// ACTION: Create property 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// "Create class 'A'" "false"
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
fun foo() = J.<caret>A.B
|
||||
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
// "Create class 'A'" "false"
|
||||
// ACTION: Create object 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
+1
@@ -3,6 +3,7 @@
|
||||
// ACTION: Create local variable 'A'
|
||||
// ACTION: Create parameter 'A'
|
||||
// ACTION: Create property 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
Vendored
+1
@@ -1,5 +1,6 @@
|
||||
// "Create class 'A'" "false"
|
||||
// ACTION: Create object 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
Vendored
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Create extension property 'A'
|
||||
// ACTION: Create member property 'A'
|
||||
// ACTION: Create property 'A' as constructor parameter
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
Vendored
+1
@@ -3,6 +3,7 @@
|
||||
// ACTION: Create local variable 'A'
|
||||
// ACTION: Create parameter 'A'
|
||||
// ACTION: Create property 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
// "Create enum constant 'A'" "false"
|
||||
// ACTION: Create member property 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
fun foo() = J.<caret>A
|
||||
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
// "Create enum constant 'A'" "false"
|
||||
// ACTION: Convert to block body
|
||||
// ACTION: Create member property 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
internal fun foo(): J = J.<caret>A
|
||||
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
// "Create enum constant 'A'" "false"
|
||||
// ACTION: Create member property 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
fun foo() = J.<caret>A
|
||||
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
// "Create enum constant 'A'" "false"
|
||||
// ACTION: Convert to block body
|
||||
// ACTION: Create member property 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
internal fun foo(): X = E.<caret>A
|
||||
|
||||
Vendored
+1
@@ -1,5 +1,6 @@
|
||||
// "Create enum constant 'A'" "false"
|
||||
// ACTION: Create object 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
Vendored
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Create extension property 'A'
|
||||
// ACTION: Create member property 'A'
|
||||
// ACTION: Create property 'A' as constructor parameter
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
Vendored
+1
@@ -1,6 +1,7 @@
|
||||
// "Create enum constant 'A'" "false"
|
||||
// ACTION: Convert to block body
|
||||
// ACTION: Create object 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
+1
@@ -3,6 +3,7 @@
|
||||
// ACTION: Create local variable 'A'
|
||||
// ACTION: Create parameter 'A'
|
||||
// ACTION: Create property 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
// "Create object 'A'" "false"
|
||||
// ACTION: Create member property 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
fun foo() = J.<caret>A
|
||||
|
||||
Vendored
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Create extension property 'A'
|
||||
// ACTION: Create member property 'A'
|
||||
// ACTION: Create property 'A' as constructor parameter
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
+1
@@ -3,6 +3,7 @@
|
||||
// ACTION: Create parameter 'Foo'
|
||||
// ACTION: Create property 'Foo'
|
||||
// ACTION: Split property declaration
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: Foo
|
||||
open class Cyclic<E : Cyclic<E>>
|
||||
|
||||
|
||||
+1
@@ -3,6 +3,7 @@
|
||||
// ACTION: Create local variable 'A'
|
||||
// ACTION: Create parameter 'A'
|
||||
// ACTION: Create property 'A'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
|
||||
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Create annotation 'bar'
|
||||
// ACTION: Make internal
|
||||
// ACTION: Make private
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
// ERROR: Unresolved reference: bar
|
||||
|
||||
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
// "Create extension function 'foo'" "false"
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
package p
|
||||
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
// "Create member function 'foo'" "false"
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
class A<T>(val n: T)
|
||||
|
||||
+1
@@ -1,6 +1,7 @@
|
||||
// "Create member function 'foo'" "false"
|
||||
// ACTION: Convert to expression body
|
||||
// ACTION: Create extension function 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
fun test(): Int {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// "Create function 'foo'" "false"
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
package p
|
||||
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
// "Create extension function 'foo'" "false"
|
||||
// ACTION: Create member function 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
fun test() {
|
||||
|
||||
Vendored
+1
@@ -1,5 +1,6 @@
|
||||
// "Create function 'foo'" "false"
|
||||
// "Create member function 'foo'" "false"
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
fun test() {
|
||||
|
||||
+1
@@ -1,6 +1,7 @@
|
||||
// "Create local variable 'foo'" "false"
|
||||
// ACTION: Create parameter 'foo'
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
class A {
|
||||
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
// "Create local variable 'foo'" "false"
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
val t: Int = <caret>foo
|
||||
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Create extension property 'foo'
|
||||
// ACTION: Create member property 'foo'
|
||||
// ACTION: Create property 'foo' as constructor parameter
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
class A
|
||||
|
||||
+1
@@ -1,6 +1,7 @@
|
||||
// "Create parameter 'foo'" "false"
|
||||
// ACTION: Create local variable 'foo'
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
fun test(n: Int) {
|
||||
|
||||
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Convert to expression body
|
||||
// ACTION: Create local variable 'foo'
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
class A {
|
||||
|
||||
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Convert to expression body
|
||||
// ACTION: Create local variable 'foo'
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
object A {
|
||||
|
||||
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Convert to expression body
|
||||
// ACTION: Create local variable 'foo'
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
interface A {
|
||||
|
||||
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Convert to expression body
|
||||
// ACTION: Create local variable 'foo'
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
val test: Int get() {
|
||||
|
||||
Vendored
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Create local variable 'foo'
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Split property declaration
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
class A {
|
||||
|
||||
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Convert to expression body
|
||||
// ACTION: Create local variable 'foo'
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
class A {
|
||||
|
||||
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Convert to expression body
|
||||
// ACTION: Create local variable 'foo'
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
class A<T> {
|
||||
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
// "Create parameter 'foo'" "false"
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
class A {
|
||||
|
||||
Vendored
+1
@@ -1,5 +1,6 @@
|
||||
// "Create parameter 'foo'" "false"
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
object A {
|
||||
|
||||
Vendored
+1
@@ -1,5 +1,6 @@
|
||||
// "Create parameter 'foo'" "false"
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
val test: Int = <caret>foo
|
||||
+1
@@ -1,6 +1,7 @@
|
||||
// "Create parameter 'x'" "false"
|
||||
// ERROR: Unresolved reference: x
|
||||
// ACTION: Create property 'x'
|
||||
// ACTION: Rename reference
|
||||
|
||||
enum class E(n: Int) {
|
||||
X(<caret>x)
|
||||
|
||||
+1
@@ -1,6 +1,7 @@
|
||||
// "Create parameter 'b'" "false"
|
||||
// ERROR: Unresolved reference: b
|
||||
// ACTION: Create property 'b'
|
||||
// ACTION: Rename reference
|
||||
|
||||
open class A(val a: Int) {
|
||||
|
||||
|
||||
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Create extension property 'foo'
|
||||
// ACTION: Create member property 'foo'
|
||||
// ACTION: Create property 'foo' as constructor parameter
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
class A
|
||||
|
||||
Vendored
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Convert to expression body
|
||||
// ACTION: Create parameter 'foo'
|
||||
// ACTION: Create local variable 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
fun test() {
|
||||
|
||||
Vendored
+1
@@ -3,6 +3,7 @@
|
||||
// ACTION: Create local variable 'foo'
|
||||
// ACTION: Create parameter 'foo'
|
||||
// ACTION: Create property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
class A {
|
||||
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
// "Create member property 'foo' as constructor parameter" "false"
|
||||
// ACTION: Create member property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
fun test() {
|
||||
|
||||
Vendored
+1
@@ -3,6 +3,7 @@
|
||||
// ACTION: Convert to expression body
|
||||
// ACTION: Create local variable 'foo'
|
||||
// ACTION: Create parameter 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
fun test(): Int {
|
||||
|
||||
Vendored
+1
@@ -1,6 +1,7 @@
|
||||
// "Create member property 'foo' as constructor parameter" "false"
|
||||
// ACTION: Create member property 'foo'
|
||||
// ACTION: Create extension property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
class A<T>(val n: T) {
|
||||
|
||||
Vendored
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Create member property 'foo'
|
||||
// ACTION: Convert to expression body
|
||||
// ACTION: Create extension property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
fun test(): String? {
|
||||
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
// "Create property 'foo' as constructor parameter" "false"
|
||||
// ACTION: Create extension property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
class A<T>(val n: T)
|
||||
|
||||
+1
@@ -1,6 +1,7 @@
|
||||
// "Create property 'foo'" "false"
|
||||
// ACTION: Create extension function 'bar'
|
||||
// ACTION: Create member function 'bar'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: bar
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
// "Create extension property 'foo'" "false"
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
package p
|
||||
|
||||
+1
@@ -2,6 +2,7 @@
|
||||
// ACTION: Convert to expression body
|
||||
// ACTION: Create parameter 'foo'
|
||||
// ACTION: Create local variable 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
fun test() {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// "Create property 'foo'" "false"
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
package p
|
||||
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
// "Create extension property 'foo'" "false"
|
||||
// ACTION: Create member property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
fun test() {
|
||||
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
// "Create property 'foo'" "false"
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
fun test() {
|
||||
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
// "Create property 'foo'" "false"
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
class A<T>(val n: T)
|
||||
|
||||
Vendored
+1
@@ -1,6 +1,7 @@
|
||||
// "Create property 'foo'" "false"
|
||||
// ACTION: Convert to expression body
|
||||
// ACTION: Create extension property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
fun test(): String? {
|
||||
|
||||
Vendored
+1
@@ -1,6 +1,7 @@
|
||||
// "Create property 'foo'" "false"
|
||||
// ACTION: Convert to expression body
|
||||
// ACTION: Create extension property 'foo'
|
||||
// ACTION: Rename reference
|
||||
// ERROR: Unresolved reference: foo
|
||||
|
||||
internal fun test(a: A): String? {
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
// "Rename reference" "true"
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
class A {
|
||||
fun f() = 1
|
||||
fun g() = ""
|
||||
}
|
||||
|
||||
class B
|
||||
|
||||
fun bar(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun baz(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun foo(a: A, b: B) {
|
||||
val aa = A()
|
||||
bar(a.x)
|
||||
baz(a.x)
|
||||
bar(a.<caret>x())
|
||||
baz(a.x())
|
||||
bar(a.x(1))
|
||||
baz(a.x(1))
|
||||
bar(aa.x())
|
||||
bar(b.x())
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
// "Rename reference" "true"
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
class A {
|
||||
fun f() = 1
|
||||
fun g() = ""
|
||||
}
|
||||
|
||||
class B
|
||||
|
||||
fun bar(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun baz(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun foo(a: A, b: B) {
|
||||
val aa = A()
|
||||
bar(a.x)
|
||||
baz(a.x)
|
||||
bar(a.f<caret>())
|
||||
baz(a.f())
|
||||
bar(a.x(1))
|
||||
baz(a.x(1))
|
||||
bar(aa.x())
|
||||
bar(b.x())
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// "Rename reference" "true"
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
class A {
|
||||
val a = 1
|
||||
val s = ""
|
||||
}
|
||||
|
||||
class B
|
||||
|
||||
fun bar(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun baz(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun foo(a: A, b: B) {
|
||||
val aa = A()
|
||||
bar(a.x<caret>)
|
||||
baz(a.x)
|
||||
bar(a.x())
|
||||
baz(a.x(1))
|
||||
bar(aa.x)
|
||||
bar(b.x)
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// "Rename reference" "true"
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
class A {
|
||||
val a = 1
|
||||
val s = ""
|
||||
}
|
||||
|
||||
class B
|
||||
|
||||
fun bar(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun baz(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun foo(a: A, b: B) {
|
||||
val aa = A()
|
||||
bar(a.a<caret>)
|
||||
baz(a.a)
|
||||
bar(a.x())
|
||||
baz(a.x(1))
|
||||
bar(aa.x)
|
||||
bar(b.x)
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// "Rename reference" "false"
|
||||
// ACTION: Create annotation 'X'
|
||||
// ACTION: Create class 'X'
|
||||
// ACTION: Create enum 'X'
|
||||
// ACTION: Create interface 'X'
|
||||
// ERROR: Unresolved reference: X
|
||||
// ERROR: Unresolved reference: X
|
||||
class A {
|
||||
class B
|
||||
|
||||
fun foo() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
fun test(x: A.<caret>X) {
|
||||
val t: A.X
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
// "Rename reference" "true"
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
class A {
|
||||
fun f() = 1
|
||||
fun g() = ""
|
||||
|
||||
fun bar(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun baz(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
bar(x)
|
||||
baz(x)
|
||||
bar(<caret>x())
|
||||
baz(x())
|
||||
bar(x(1))
|
||||
baz(x(1))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
// "Rename reference" "true"
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
class A {
|
||||
fun f() = 1
|
||||
fun g() = ""
|
||||
|
||||
fun bar(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun baz(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
bar(x)
|
||||
baz(x)
|
||||
bar(f<caret>())
|
||||
baz(f())
|
||||
bar(x(1))
|
||||
baz(x(1))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
// "Rename reference" "true"
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
class A {
|
||||
val a = 1
|
||||
val s = ""
|
||||
|
||||
fun bar(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun baz(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
bar(<caret>x)
|
||||
baz(x)
|
||||
bar(x())
|
||||
baz(x(1))
|
||||
}
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
// "Rename reference" "true"
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
class A {
|
||||
val a = 1
|
||||
val s = ""
|
||||
|
||||
fun bar(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun baz(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
bar(a<caret>)
|
||||
baz(a)
|
||||
bar(x())
|
||||
baz(x(1))
|
||||
}
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
// "Rename reference" "true"
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
package x
|
||||
|
||||
class A {
|
||||
val a = 1
|
||||
val s = ""
|
||||
|
||||
fun bar(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun baz(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
bar(<caret>x)
|
||||
baz(x)
|
||||
bar(x())
|
||||
baz(x(1))
|
||||
}
|
||||
}
|
||||
Vendored
+24
@@ -0,0 +1,24 @@
|
||||
// "Rename reference" "true"
|
||||
// ERROR: Unresolved reference: x
|
||||
// ERROR: Unresolved reference: x
|
||||
package x
|
||||
|
||||
class A {
|
||||
val a = 1
|
||||
val s = ""
|
||||
|
||||
fun bar(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun baz(i: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
bar(a<caret>)
|
||||
baz(a)
|
||||
bar(x())
|
||||
baz(x(1))
|
||||
}
|
||||
}
|
||||
@@ -5758,6 +5758,51 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/quickfix/renameUnresolvedReference")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class RenameUnresolvedReference extends AbstractQuickFixTest {
|
||||
public void testAllFilesPresentInRenameUnresolvedReference() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/renameUnresolvedReference"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("qualifiedFunRef.kt")
|
||||
public void testQualifiedFunRef() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/renameUnresolvedReference/qualifiedFunRef.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("qualifiedPropertyRef.kt")
|
||||
public void testQualifiedPropertyRef() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/renameUnresolvedReference/qualifiedPropertyRef.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("typeRef.kt")
|
||||
public void testTypeRef() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/renameUnresolvedReference/typeRef.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("unqualifiedFunRef.kt")
|
||||
public void testUnqualifiedFunRef() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/renameUnresolvedReference/unqualifiedFunRef.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("unqualifiedPropertyRef.kt")
|
||||
public void testUnqualifiedPropertyRef() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/renameUnresolvedReference/unqualifiedPropertyRef.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("unqualifiedPropertyRefWithPackageError.kt")
|
||||
public void testUnqualifiedPropertyRefWithPackageError() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/renameUnresolvedReference/unqualifiedPropertyRefWithPackageError.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/quickfix/supercalls")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
Reference in New Issue
Block a user