Uast: type-mapper checks deeper for local classes (KT-21546, EA-100195)
This commit is contained in:
committed by
xiexed
parent
f9813e3276
commit
da98b7e07b
+3
-7
@@ -36,12 +36,11 @@ import org.jetbrains.kotlin.builtins.isBuiltinFunctionalTypeOrSubtype
|
|||||||
import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter
|
import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
|
||||||
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
@@ -113,11 +112,8 @@ internal fun KotlinType.toPsiType(source: UElement, element: KtElement, boxed: B
|
|||||||
|
|
||||||
private fun KotlinType.containsLocalTypes(): Boolean {
|
private fun KotlinType.containsLocalTypes(): Boolean {
|
||||||
val typeDeclarationDescriptor = this.constructor.declarationDescriptor
|
val typeDeclarationDescriptor = this.constructor.declarationDescriptor
|
||||||
if (typeDeclarationDescriptor is ClassDescriptor) {
|
if (typeDeclarationDescriptor is ClassDescriptor && DescriptorUtils.isLocal(typeDeclarationDescriptor)) {
|
||||||
val containerDescriptor = typeDeclarationDescriptor.containingDeclaration
|
return true
|
||||||
if (containerDescriptor is PropertyDescriptor || containerDescriptor is FunctionDescriptor) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return arguments.any { !it.isStarProjection && it.type.containsLocalTypes() }
|
return arguments.any { !it.isStarProjection && it.type.containsLocalTypes() }
|
||||||
|
|||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
fun main(args: Array<String>) { // Error
|
||||||
|
|
||||||
|
data class TestUsed(val parameter: CharSequence) {
|
||||||
|
private data class Used(val parameter: Any) {
|
||||||
|
companion object {
|
||||||
|
fun Any.doStuff1() = Used(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,6 +11,7 @@ import org.jetbrains.uast.*
|
|||||||
import org.jetbrains.uast.kotlin.KotlinUastLanguagePlugin
|
import org.jetbrains.uast.kotlin.KotlinUastLanguagePlugin
|
||||||
import org.jetbrains.uast.test.env.findElementByText
|
import org.jetbrains.uast.test.env.findElementByText
|
||||||
import org.jetbrains.uast.test.env.findElementByTextFromPsi
|
import org.jetbrains.uast.test.env.findElementByTextFromPsi
|
||||||
|
import org.jetbrains.uast.visitor.AbstractUastVisitor
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
@@ -166,4 +167,17 @@ class KotlinUastApiTest : AbstractKotlinUastTest() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testBrokenMethodTypeResolve() {
|
||||||
|
doTest("BrokenMethod") { _, file ->
|
||||||
|
|
||||||
|
file.accept(object : AbstractUastVisitor() {
|
||||||
|
override fun visitCallExpression(node: UCallExpression): Boolean {
|
||||||
|
node.returnType
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user