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 com.intellij.codeInsight.intention.IntentionAction
|
||||
import org.jetbrains.kotlin.psi.JetCallExpression
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.psi.JetSimpleNameExpression
|
||||
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.scopes.receivers.ReceiverValue
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.Qualifier
|
||||
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.*
|
||||
import org.jetbrains.kotlin.diagnostics.Errors
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||
import org.jetbrains.kotlin.psi.JetExpression
|
||||
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.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.psi.JetTypeReference
|
||||
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.quickfix.JetIntentionActionsFactory
|
||||
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.openapi.project.Project
|
||||
import org.jetbrains.kotlin.idea.refactoring.*
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
|
||||
object CreateFunctionOrPropertyFromCallActionFactory : JetIntentionActionsFactory() {
|
||||
override fun doCreateActions(diagnostic: Diagnostic): List<IntentionAction>? {
|
||||
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()) {
|
||||
in Errors.UNRESOLVED_REFERENCE_DIAGNOSTICS, Errors.EXPRESSION_EXPECTED_PACKAGE_FOUND -> {
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
// ACTION: Create class 'SomeTest'
|
||||
// ACTION: Create enum 'SomeTest'
|
||||
// ACTION: Create object 'SomeTest'
|
||||
// ACTION: Create property 'SomeTest'
|
||||
// ACTION: Create trait 'SomeTest'
|
||||
// ERROR: Unresolved reference: SomeTest
|
||||
|
||||
|
||||
-1
@@ -2,7 +2,6 @@
|
||||
// ACTION: Create class 'A'
|
||||
// ACTION: Create trait 'A'
|
||||
// ACTION: Create object 'A'
|
||||
// ACTION: Create property 'A'
|
||||
// ACTION: Create enum 'A'
|
||||
// ACTION: Create annotation 'A'
|
||||
// ERROR: Unresolved reference: A
|
||||
|
||||
-1
@@ -2,7 +2,6 @@
|
||||
// ACTION: Create class 'A'
|
||||
// ACTION: Create trait 'A'
|
||||
// ACTION: Create object 'A'
|
||||
// ACTION: Create property 'A'
|
||||
// ACTION: Create enum 'A'
|
||||
// ACTION: Create annotation 'A'
|
||||
// ERROR: Unresolved reference: A
|
||||
|
||||
-1
@@ -1,6 +1,5 @@
|
||||
// "Create class 'A'" "false"
|
||||
// ERROR: Unresolved reference: A
|
||||
// ACTION: Create property 'A'
|
||||
import J.<caret>A
|
||||
|
||||
class X {
|
||||
|
||||
-1
@@ -2,7 +2,6 @@
|
||||
// ACTION: Create annotation 'A'
|
||||
// ACTION: Create class 'A'
|
||||
// ACTION: Create enum 'A'
|
||||
// ACTION: Create property 'A'
|
||||
// ACTION: Create trait 'A'
|
||||
// ERROR: Unresolved reference: A
|
||||
import E.<caret>A
|
||||
|
||||
-1
@@ -3,7 +3,6 @@
|
||||
// ACTION: Create annotation 'A'
|
||||
// ACTION: Create class 'A'
|
||||
// ACTION: Create enum 'A'
|
||||
// ACTION: Create property 'A'
|
||||
// ACTION: Create trait '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);
|
||||
}
|
||||
|
||||
@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")
|
||||
public void testFunExtraArgs() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunExtraArgs.kt");
|
||||
@@ -1702,6 +1708,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
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")
|
||||
public void testThisInClass() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeThisInClass.kt");
|
||||
@@ -2519,6 +2531,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
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")
|
||||
public void testInconsistentTypes() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/beforeInconsistentTypes.kt");
|
||||
@@ -2567,6 +2585,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
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")
|
||||
public void testRefInStringTemplateRuntime() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/beforeRefInStringTemplateRuntime.kt");
|
||||
|
||||
Reference in New Issue
Block a user