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.KotlinSingleIntentionActionFactoryWithDelegate
|
||||||
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.CreateClassFromTypeReferenceActionFactory
|
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.CreateClassFromTypeReferenceActionFactory
|
||||||
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.getTypeConstraintInfo
|
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.KtUserType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch
|
||||||
import org.jetbrains.kotlin.types.typeUtil.containsError
|
import org.jetbrains.kotlin.types.typeUtil.containsError
|
||||||
@@ -35,6 +38,7 @@ object CreateTypeAliasFromTypeReferenceActionFactory : KotlinSingleIntentionActi
|
|||||||
if (element.getParentOfTypeAndBranch<KtUserType>(true) { qualifier } != null) return null
|
if (element.getParentOfTypeAndBranch<KtUserType>(true) { qualifier } != null) return null
|
||||||
|
|
||||||
val classInfo = CreateClassFromTypeReferenceActionFactory.extractFixData(element, diagnostic) ?: return null
|
val classInfo = CreateClassFromTypeReferenceActionFactory.extractFixData(element, diagnostic) ?: return null
|
||||||
|
if (classInfo.targetParent is KtDeclaration) return null
|
||||||
|
|
||||||
val expectedType = getTypeConstraintInfo(element)?.upperBound
|
val expectedType = getTypeConstraintInfo(element)?.upperBound
|
||||||
if (expectedType != null && expectedType.containsError()) return null
|
if (expectedType != null && expectedType.containsError()) return null
|
||||||
|
|||||||
+8
-2
@@ -1,5 +1,11 @@
|
|||||||
// "Create type alias 'A'" "true"
|
// "Create type alias 'A'" "false"
|
||||||
// ERROR: Unresolved reference: Dummy
|
// 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
|
package p
|
||||||
|
|
||||||
class T {
|
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"
|
// "Create type alias 'A'" "false"
|
||||||
// ERROR: Unresolved reference: Dummy
|
// 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
|
package p
|
||||||
|
|
||||||
class T
|
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 class 'X'
|
||||||
// ACTION: Create enum 'X'
|
// ACTION: Create enum 'X'
|
||||||
// ACTION: Create interface 'X'
|
// ACTION: Create interface 'X'
|
||||||
// ACTION: Create type alias 'X'
|
|
||||||
// ERROR: Unresolved reference: X
|
// ERROR: Unresolved reference: X
|
||||||
|
|
||||||
class A
|
class A
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
// ACTION: Create class 'X'
|
// ACTION: Create class 'X'
|
||||||
// ACTION: Create enum 'X'
|
// ACTION: Create enum 'X'
|
||||||
// ACTION: Create interface 'X'
|
// ACTION: Create interface 'X'
|
||||||
// ACTION: Create type alias 'X'
|
|
||||||
// ERROR: Unresolved reference: X
|
// ERROR: Unresolved reference: X
|
||||||
// ERROR: Unresolved reference: X
|
// ERROR: Unresolved reference: X
|
||||||
class A {
|
class A {
|
||||||
|
|||||||
Reference in New Issue
Block a user