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:
Dmitry Petrov
2016-11-18 16:38:30 +03:00
parent 4c47d77a9f
commit 9ac3dbceca
7 changed files with 20 additions and 25 deletions
@@ -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
@@ -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 {
@@ -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("")
@@ -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
@@ -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 {