Create from usage: Do not create functions/properties from import directives

This commit is contained in:
Alexey Sedunov
2015-02-19 17:23:55 +03:00
parent 41d51e0a13
commit 6bdff82c3a
12 changed files with 69 additions and 15 deletions
@@ -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
@@ -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
@@ -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,6 +1,5 @@
// "Create class 'A'" "false"
// ERROR: Unresolved reference: A
// ACTION: Create property 'A'
import J.<caret>A
class X {
@@ -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
@@ -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
@@ -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() {
}
@@ -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");