Create from usage: Do not create functions/properties from import directives
This commit is contained in:
+5
-9
@@ -18,27 +18,19 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||||
import com.intellij.codeInsight.intention.IntentionAction
|
import com.intellij.codeInsight.intention.IntentionAction
|
||||||
import org.jetbrains.kotlin.psi.JetCallExpression
|
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.psi.JetSimpleNameExpression
|
|
||||||
import org.jetbrains.kotlin.lexer.JetTokens
|
import org.jetbrains.kotlin.lexer.JetTokens
|
||||||
import org.jetbrains.kotlin.psi.JetQualifiedExpression
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.Qualifier
|
import org.jetbrains.kotlin.resolve.scopes.receivers.Qualifier
|
||||||
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.*
|
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.*
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||||
import org.jetbrains.kotlin.psi.JetExpression
|
|
||||||
import java.util.Collections
|
import java.util.Collections
|
||||||
import org.jetbrains.kotlin.psi.JetClassBody
|
|
||||||
import org.jetbrains.kotlin.psi.JetFile
|
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getAssignmentByLHS
|
import org.jetbrains.kotlin.psi.psiUtil.getAssignmentByLHS
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.psi.JetTypeReference
|
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import org.jetbrains.kotlin.psi.JetAnnotationEntry
|
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory
|
import org.jetbrains.kotlin.idea.quickfix.JetIntentionActionsFactory
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
||||||
@@ -46,11 +38,15 @@ import org.jetbrains.kotlin.idea.codeInsight.DescriptorToDeclarationUtil
|
|||||||
import com.intellij.psi.PsiClass
|
import com.intellij.psi.PsiClass
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import org.jetbrains.kotlin.idea.refactoring.*
|
import org.jetbrains.kotlin.idea.refactoring.*
|
||||||
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
object CreateFunctionOrPropertyFromCallActionFactory : JetIntentionActionsFactory() {
|
object CreateFunctionOrPropertyFromCallActionFactory : JetIntentionActionsFactory() {
|
||||||
override fun doCreateActions(diagnostic: Diagnostic): List<IntentionAction>? {
|
override fun doCreateActions(diagnostic: Diagnostic): List<IntentionAction>? {
|
||||||
val diagElement = diagnostic.getPsiElement()
|
val diagElement = diagnostic.getPsiElement()
|
||||||
if (PsiTreeUtil.getParentOfType(diagElement, javaClass<JetTypeReference>(), javaClass<JetAnnotationEntry>()) != null) return null
|
if (PsiTreeUtil.getParentOfType(
|
||||||
|
diagElement,
|
||||||
|
javaClass<JetTypeReference>(), javaClass<JetAnnotationEntry>(), javaClass<JetImportDirective>()
|
||||||
|
) != null) return null
|
||||||
|
|
||||||
val callExpr = when (diagnostic.getFactory()) {
|
val callExpr = when (diagnostic.getFactory()) {
|
||||||
in Errors.UNRESOLVED_REFERENCE_DIAGNOSTICS, Errors.EXPRESSION_EXPECTED_PACKAGE_FOUND -> {
|
in Errors.UNRESOLVED_REFERENCE_DIAGNOSTICS, Errors.EXPRESSION_EXPECTED_PACKAGE_FOUND -> {
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
// ACTION: Create class 'SomeTest'
|
// ACTION: Create class 'SomeTest'
|
||||||
// ACTION: Create enum 'SomeTest'
|
// ACTION: Create enum 'SomeTest'
|
||||||
// ACTION: Create object 'SomeTest'
|
// ACTION: Create object 'SomeTest'
|
||||||
// ACTION: Create property 'SomeTest'
|
|
||||||
// ACTION: Create trait 'SomeTest'
|
// ACTION: Create trait 'SomeTest'
|
||||||
// ERROR: Unresolved reference: SomeTest
|
// ERROR: Unresolved reference: SomeTest
|
||||||
|
|
||||||
|
|||||||
-1
@@ -2,7 +2,6 @@
|
|||||||
// ACTION: Create class 'A'
|
// ACTION: Create class 'A'
|
||||||
// ACTION: Create trait 'A'
|
// ACTION: Create trait 'A'
|
||||||
// ACTION: Create object 'A'
|
// ACTION: Create object 'A'
|
||||||
// ACTION: Create property 'A'
|
|
||||||
// ACTION: Create enum 'A'
|
// ACTION: Create enum 'A'
|
||||||
// ACTION: Create annotation 'A'
|
// ACTION: Create annotation 'A'
|
||||||
// ERROR: Unresolved reference: A
|
// ERROR: Unresolved reference: A
|
||||||
|
|||||||
-1
@@ -2,7 +2,6 @@
|
|||||||
// ACTION: Create class 'A'
|
// ACTION: Create class 'A'
|
||||||
// ACTION: Create trait 'A'
|
// ACTION: Create trait 'A'
|
||||||
// ACTION: Create object 'A'
|
// ACTION: Create object 'A'
|
||||||
// ACTION: Create property 'A'
|
|
||||||
// ACTION: Create enum 'A'
|
// ACTION: Create enum 'A'
|
||||||
// ACTION: Create annotation 'A'
|
// ACTION: Create annotation 'A'
|
||||||
// ERROR: Unresolved reference: A
|
// ERROR: Unresolved reference: A
|
||||||
|
|||||||
-1
@@ -1,6 +1,5 @@
|
|||||||
// "Create class 'A'" "false"
|
// "Create class 'A'" "false"
|
||||||
// ERROR: Unresolved reference: A
|
// ERROR: Unresolved reference: A
|
||||||
// ACTION: Create property 'A'
|
|
||||||
import J.<caret>A
|
import J.<caret>A
|
||||||
|
|
||||||
class X {
|
class X {
|
||||||
|
|||||||
-1
@@ -2,7 +2,6 @@
|
|||||||
// ACTION: Create annotation 'A'
|
// ACTION: Create annotation 'A'
|
||||||
// ACTION: Create class 'A'
|
// ACTION: Create class 'A'
|
||||||
// ACTION: Create enum 'A'
|
// ACTION: Create enum 'A'
|
||||||
// ACTION: Create property 'A'
|
|
||||||
// ACTION: Create trait 'A'
|
// ACTION: Create trait 'A'
|
||||||
// ERROR: Unresolved reference: A
|
// ERROR: Unresolved reference: A
|
||||||
import E.<caret>A
|
import E.<caret>A
|
||||||
|
|||||||
-1
@@ -3,7 +3,6 @@
|
|||||||
// ACTION: Create annotation 'A'
|
// ACTION: Create annotation 'A'
|
||||||
// ACTION: Create class 'A'
|
// ACTION: Create class 'A'
|
||||||
// ACTION: Create enum 'A'
|
// ACTION: Create enum 'A'
|
||||||
// ACTION: Create property 'A'
|
|
||||||
// ACTION: Create trait 'A'
|
// ACTION: Create trait 'A'
|
||||||
import J.<caret>A
|
import J.<caret>A
|
||||||
|
|
||||||
|
|||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
// "Create extension function 'foo'" "false"
|
||||||
|
// ERROR: Unresolved reference: foo
|
||||||
|
|
||||||
|
package p
|
||||||
|
|
||||||
|
import p.<caret>foo
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// "Create function 'foo'" "false"
|
||||||
|
// ERROR: Unresolved reference: foo
|
||||||
|
|
||||||
|
package p
|
||||||
|
|
||||||
|
import p.<caret>foo
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
|
||||||
|
}
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
// "Create extension property 'foo'" "false"
|
||||||
|
// ERROR: Unresolved reference: foo
|
||||||
|
|
||||||
|
package p
|
||||||
|
|
||||||
|
import p.<caret>foo
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// "Create property 'foo'" "false"
|
||||||
|
// ERROR: Unresolved reference: foo
|
||||||
|
|
||||||
|
package p
|
||||||
|
|
||||||
|
import p.<caret>foo
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1546,6 +1546,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("beforeExtensionRefInImport.kt")
|
||||||
|
public void testExtensionRefInImport() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeExtensionRefInImport.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("beforeFunExtraArgs.kt")
|
@TestMetadata("beforeFunExtraArgs.kt")
|
||||||
public void testFunExtraArgs() throws Exception {
|
public void testFunExtraArgs() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunExtraArgs.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunExtraArgs.kt");
|
||||||
@@ -1702,6 +1708,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("beforeRefInImport.kt")
|
||||||
|
public void testRefInImport() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeRefInImport.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("beforeThisInClass.kt")
|
@TestMetadata("beforeThisInClass.kt")
|
||||||
public void testThisInClass() throws Exception {
|
public void testThisInClass() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeThisInClass.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeThisInClass.kt");
|
||||||
@@ -2519,6 +2531,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("beforeExtensionRefInImport.kt")
|
||||||
|
public void testExtensionRefInImport() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/beforeExtensionRefInImport.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("beforeInconsistentTypes.kt")
|
@TestMetadata("beforeInconsistentTypes.kt")
|
||||||
public void testInconsistentTypes() throws Exception {
|
public void testInconsistentTypes() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/beforeInconsistentTypes.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/beforeInconsistentTypes.kt");
|
||||||
@@ -2567,6 +2585,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("beforeRefInImport.kt")
|
||||||
|
public void testRefInImport() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/beforeRefInImport.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("beforeRefInStringTemplateRuntime.kt")
|
@TestMetadata("beforeRefInStringTemplateRuntime.kt")
|
||||||
public void testRefInStringTemplateRuntime() throws Exception {
|
public void testRefInStringTemplateRuntime() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/beforeRefInStringTemplateRuntime.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/beforeRefInStringTemplateRuntime.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user