Prohibit nested & local type aliases in 1.1: don't suggest to introduce typealias in a class or a function.
This commit is contained in:
+4
@@ -24,6 +24,9 @@ import org.jetbrains.kotlin.idea.quickfix.IntentionActionPriority
|
||||
import org.jetbrains.kotlin.idea.quickfix.KotlinSingleIntentionActionFactoryWithDelegate
|
||||
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.CreateClassFromTypeReferenceActionFactory
|
||||
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.getTypeConstraintInfo
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtFunction
|
||||
import org.jetbrains.kotlin.psi.KtUserType
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch
|
||||
import org.jetbrains.kotlin.types.typeUtil.containsError
|
||||
@@ -35,6 +38,7 @@ object CreateTypeAliasFromTypeReferenceActionFactory : KotlinSingleIntentionActi
|
||||
if (element.getParentOfTypeAndBranch<KtUserType>(true) { qualifier } != null) return null
|
||||
|
||||
val classInfo = CreateClassFromTypeReferenceActionFactory.extractFixData(element, diagnostic) ?: return null
|
||||
if (classInfo.targetParent is KtDeclaration) return null
|
||||
|
||||
val expectedType = getTypeConstraintInfo(element)?.upperBound
|
||||
if (expectedType != null && expectedType.containsError()) return null
|
||||
|
||||
+8
-2
@@ -1,5 +1,11 @@
|
||||
// "Create type alias 'A'" "true"
|
||||
// ERROR: Unresolved reference: Dummy
|
||||
// "Create type alias 'A'" "false"
|
||||
// ACTION: Convert to block body
|
||||
// ACTION: Create annotation 'A'
|
||||
// ACTION: Create class 'A'
|
||||
// ACTION: Create enum 'A'
|
||||
// ACTION: Create interface 'A'
|
||||
// ACTION: Remove explicit type specification
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
class T {
|
||||
|
||||
Vendored
-10
@@ -1,10 +0,0 @@
|
||||
// "Create type alias 'A'" "true"
|
||||
// ERROR: Unresolved reference: Dummy
|
||||
package p
|
||||
|
||||
class T {
|
||||
typealias A = Dummy
|
||||
|
||||
}
|
||||
|
||||
fun foo(): T.A = throw Throwable("")
|
||||
Vendored
+8
-2
@@ -1,5 +1,11 @@
|
||||
// "Create type alias 'A'" "true"
|
||||
// ERROR: Unresolved reference: Dummy
|
||||
// "Create type alias 'A'" "false"
|
||||
// ACTION: Convert to block body
|
||||
// ACTION: Create annotation 'A'
|
||||
// ACTION: Create class 'A'
|
||||
// ACTION: Create enum 'A'
|
||||
// ACTION: Create interface 'A'
|
||||
// ACTION: Remove explicit type specification
|
||||
// ERROR: Unresolved reference: A
|
||||
package p
|
||||
|
||||
class T
|
||||
|
||||
idea/testData/quickfix/createFromUsage/createTypeAlias/typeReference/userTypeReceiverNoBody.kt.after
Vendored
-9
@@ -1,9 +0,0 @@
|
||||
// "Create type alias 'A'" "true"
|
||||
// ERROR: Unresolved reference: Dummy
|
||||
package p
|
||||
|
||||
class T {
|
||||
typealias A = Dummy
|
||||
}
|
||||
|
||||
fun foo(): T.A = throw Throwable("")
|
||||
@@ -3,7 +3,6 @@
|
||||
// ACTION: Create class 'X'
|
||||
// ACTION: Create enum 'X'
|
||||
// ACTION: Create interface 'X'
|
||||
// ACTION: Create type alias 'X'
|
||||
// ERROR: Unresolved reference: X
|
||||
|
||||
class A
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
// ACTION: Create class 'X'
|
||||
// ACTION: Create enum 'X'
|
||||
// ACTION: Create interface 'X'
|
||||
// ACTION: Create type alias 'X'
|
||||
// ERROR: Unresolved reference: X
|
||||
// ERROR: Unresolved reference: X
|
||||
class A {
|
||||
|
||||
Reference in New Issue
Block a user