Create Function From Usage: Use Any if error type is inferred
This commit is contained in:
+4
@@ -10,6 +10,9 @@ import org.jetbrains.jet.plugin.refactoring.JetNameSuggester
|
||||
import org.jetbrains.jet.plugin.refactoring.EmptyValidator
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext
|
||||
import org.jetbrains.jet.plugin.util.supertypes
|
||||
import org.jetbrains.jet.lang.types.TypeUtils
|
||||
import org.jetbrains.jet.lang.types.ErrorUtils
|
||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns
|
||||
|
||||
/**
|
||||
* Represents a concrete type or a set of types yet to be inferred from an expression.
|
||||
@@ -42,6 +45,7 @@ abstract class TypeInfo(val variance: Variance) {
|
||||
abstract fun getPossibleTypes(builder: CallableBuilder): List<JetType>
|
||||
|
||||
protected fun JetType.getPossibleSupertypes(variance: Variance): List<JetType> {
|
||||
if (ErrorUtils.containsErrorType(this)) return Collections.singletonList(KotlinBuiltIns.getInstance().getAnyType())
|
||||
val single = Collections.singletonList(this)
|
||||
return when (variance) {
|
||||
Variance.IN_VARIANCE -> single + supertypes()
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
// "Create function 'foo' from usage" "true"
|
||||
|
||||
fun run<T>(f: () -> T) = f()
|
||||
|
||||
fun test() {
|
||||
run { foo() }
|
||||
}
|
||||
|
||||
fun foo(): Any {
|
||||
throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// "Create function 'foo' from usage" "true"
|
||||
// ERROR: Unresolved reference: B
|
||||
|
||||
class A: B {
|
||||
fun foo(): Any {
|
||||
throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun test() {
|
||||
A().foo()
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
// "Create function 'foo' from usage" "true"
|
||||
|
||||
fun run<T>(f: () -> T) = f()
|
||||
|
||||
fun test() {
|
||||
run { <caret>foo() }
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
// "Create function 'foo' from usage" "true"
|
||||
// ERROR: Unresolved reference: B
|
||||
|
||||
class A: B {
|
||||
|
||||
}
|
||||
|
||||
fun test() {
|
||||
A().<caret>foo()
|
||||
}
|
||||
@@ -802,6 +802,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("beforeInLambda.kt")
|
||||
public void testInLambda() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeInLambda.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("beforeInconsistentTypes.kt")
|
||||
public void testInconsistentTypes() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeInconsistentTypes.kt");
|
||||
@@ -868,6 +874,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("beforeUnresolvedSupertype.kt")
|
||||
public void testUnresolvedSupertype() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeUnresolvedSupertype.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/quickfix/createFromUsage/createFunction/component")
|
||||
|
||||
Reference in New Issue
Block a user