FIR UAST: implement constructors/delegations
But, the logic is identical to the counterpart in FE1.0 UAST Many declaration abstractions, such as (primary|secondary) constructor methods and class, are very similar, and thus can be commonized soon once the remaining parts (in particular, annotations) are done.
This commit is contained in:
committed by
Ilya Kirillov
parent
8b3c6489da
commit
31d1c002c5
@@ -5,11 +5,18 @@
|
|||||||
|
|
||||||
package org.jetbrains.uast.kotlin
|
package org.jetbrains.uast.kotlin
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.uast.*
|
import org.jetbrains.uast.*
|
||||||
|
|
||||||
interface BaseKotlinConverter {
|
interface BaseKotlinConverter {
|
||||||
|
|
||||||
|
fun convertDeclaration(
|
||||||
|
element: PsiElement,
|
||||||
|
givenParent: UElement?,
|
||||||
|
requiredTypes: Array<out Class<out UElement>>
|
||||||
|
): UElement?
|
||||||
|
|
||||||
fun convertReceiverParameter(receiver: KtTypeReference): UParameter? {
|
fun convertReceiverParameter(receiver: KtTypeReference): UParameter? {
|
||||||
val call = (receiver.parent as? KtCallableDeclaration) ?: return null
|
val call = (receiver.parent as? KtCallableDeclaration) ?: return null
|
||||||
if (call.receiverTypeReference != receiver) return null
|
if (call.receiverTypeReference != receiver) return null
|
||||||
|
|||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.uast.kotlin
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.psi.KtDelegatedSuperTypeEntry
|
||||||
|
import org.jetbrains.uast.*
|
||||||
|
import org.jetbrains.uast.kotlin.kinds.KotlinSpecialExpressionKinds
|
||||||
|
|
||||||
|
class KotlinSupertypeDelegationUExpression(
|
||||||
|
override val sourcePsi: KtDelegatedSuperTypeEntry,
|
||||||
|
givenParent: UElement?
|
||||||
|
) : KotlinAbstractUExpression(givenParent), UExpressionList {
|
||||||
|
|
||||||
|
override val psi: PsiElement
|
||||||
|
get() = sourcePsi
|
||||||
|
|
||||||
|
val typeReference: UTypeReferenceExpression? by lz {
|
||||||
|
sourcePsi.typeReference?.let {
|
||||||
|
KotlinUTypeReferenceExpression(it, this) {
|
||||||
|
baseResolveProviderService.resolveToType(it, this) ?: UastErrorType
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val delegateExpression: UExpression? by lz {
|
||||||
|
sourcePsi.delegateExpression?.let { languagePlugin?.convertElement(it, this, UExpression::class.java) as? UExpression }
|
||||||
|
}
|
||||||
|
|
||||||
|
override val expressions: List<UExpression>
|
||||||
|
get() = listOfNotNull(typeReference, delegateExpression)
|
||||||
|
|
||||||
|
override val kind: UastSpecialExpressionKind
|
||||||
|
get() = KotlinSpecialExpressionKinds.SUPER_DELEGATION
|
||||||
|
}
|
||||||
+5
@@ -5,8 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.uast.kotlin
|
package org.jetbrains.uast.kotlin
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiClass
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFile
|
import com.intellij.psi.PsiFile
|
||||||
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass
|
import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMember
|
import org.jetbrains.kotlin.asJava.elements.KtLightMember
|
||||||
@@ -52,3 +54,6 @@ fun KtElement.canAnalyze(): Boolean {
|
|||||||
if (containingFile.doNotAnalyze != null) return false // To prevent exceptions during analysis
|
if (containingFile.doNotAnalyze != null) return false // To prevent exceptions during analysis
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val PsiClass.isEnumEntryLightClass: Boolean
|
||||||
|
get() = (this as? KtLightClass)?.kotlinOrigin is KtEnumEntry
|
||||||
|
|||||||
@@ -6,9 +6,11 @@
|
|||||||
package org.jetbrains.uast.kotlin
|
package org.jetbrains.uast.kotlin
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
|
import com.intellij.psi.PsiMethod
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.psi.KtBlockExpression
|
import org.jetbrains.kotlin.psi.KtBlockExpression
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
|
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
|
||||||
import org.jetbrains.uast.*
|
import org.jetbrains.uast.*
|
||||||
import org.jetbrains.uast.kotlin.internal.KotlinFakeUElement
|
import org.jetbrains.uast.kotlin.internal.KotlinFakeUElement
|
||||||
|
|
||||||
@@ -66,3 +68,19 @@ fun wrapExpressionBody(function: UElement, bodyExpression: KtExpression): UExpre
|
|||||||
}
|
}
|
||||||
else -> function.getLanguagePlugin().convertElement(bodyExpression, function) as? UExpression
|
else -> function.getLanguagePlugin().convertElement(bodyExpression, function) as? UExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun reportConvertFailure(psiMethod: PsiMethod): Nothing {
|
||||||
|
val isValid = psiMethod.isValid
|
||||||
|
val report = KotlinExceptionWithAttachments(
|
||||||
|
"cant convert $psiMethod of ${psiMethod.javaClass} to UMethod" + if (!isValid) " (method is not valid)" else ""
|
||||||
|
)
|
||||||
|
|
||||||
|
if (isValid) {
|
||||||
|
report.withAttachment("method", psiMethod.text)
|
||||||
|
psiMethod.containingFile?.let {
|
||||||
|
report.withAttachment("file", it.text)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw report
|
||||||
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ internal object FirKotlinConverter : BaseKotlinConverter {
|
|||||||
?: convertPsiElement(element, givenParent, requiredTypes)
|
?: convertPsiElement(element, givenParent, requiredTypes)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun convertDeclaration(
|
override fun convertDeclaration(
|
||||||
element: PsiElement,
|
element: PsiElement,
|
||||||
givenParent: UElement?,
|
givenParent: UElement?,
|
||||||
requiredTypes: Array<out Class<out UElement>>
|
requiredTypes: Array<out Class<out UElement>>
|
||||||
@@ -104,6 +104,10 @@ internal object FirKotlinConverter : BaseKotlinConverter {
|
|||||||
// TODO: KtAnnotationEntry
|
// TODO: KtAnnotationEntry
|
||||||
// TODO: KtCallExpression (for nested annotation)
|
// TODO: KtCallExpression (for nested annotation)
|
||||||
|
|
||||||
|
is KtDelegatedSuperTypeEntry -> el<KotlinSupertypeDelegationUExpression> {
|
||||||
|
KotlinSupertypeDelegationUExpression(original, givenParent)
|
||||||
|
}
|
||||||
|
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+65
-11
@@ -5,17 +5,21 @@
|
|||||||
|
|
||||||
package org.jetbrains.uast.kotlin
|
package org.jetbrains.uast.kotlin
|
||||||
|
|
||||||
import com.intellij.psi.PsiClass
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.PsiElement
|
|
||||||
import com.intellij.psi.PsiFile
|
|
||||||
import com.intellij.psi.PsiIdentifier
|
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
|
import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
|
||||||
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||||
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
|
import org.jetbrains.kotlin.psi.KtDelegatedSuperTypeEntry
|
||||||
import org.jetbrains.kotlin.psi.KtObjectDeclaration
|
import org.jetbrains.kotlin.psi.KtObjectDeclaration
|
||||||
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
import org.jetbrains.uast.*
|
import org.jetbrains.uast.*
|
||||||
import org.jetbrains.uast.internal.acceptList
|
import org.jetbrains.uast.internal.acceptList
|
||||||
import org.jetbrains.uast.visitor.UastVisitor
|
import org.jetbrains.uast.visitor.UastVisitor
|
||||||
|
|
||||||
|
// TODO: can be commonized once annotation is handled
|
||||||
sealed class AbstractFirKotlinUClass(
|
sealed class AbstractFirKotlinUClass(
|
||||||
givenParent: UElement?
|
givenParent: UElement?
|
||||||
) : KotlinAbstractUElement(givenParent), UClass, UAnchorOwner {
|
) : KotlinAbstractUElement(givenParent), UClass, UAnchorOwner {
|
||||||
@@ -41,11 +45,14 @@ sealed class AbstractFirKotlinUClass(
|
|||||||
KotlinUTypeReferenceExpression(it, this)
|
KotlinUTypeReferenceExpression(it, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: delegateExpressions
|
val delegateExpressions: List<UExpression>
|
||||||
|
get() = ktClass?.superTypeListEntries.orEmpty()
|
||||||
|
.filterIsInstance<KtDelegatedSuperTypeEntry>()
|
||||||
|
.map { KotlinSupertypeDelegationUExpression(it, this) }
|
||||||
|
|
||||||
override fun accept(visitor: UastVisitor) {
|
override fun accept(visitor: UastVisitor) {
|
||||||
if (visitor.visitClass(this)) return
|
if (visitor.visitClass(this)) return
|
||||||
// TODO: delegate expressions
|
delegateExpressions.acceptList(visitor)
|
||||||
uAnnotations.acceptList(visitor)
|
uAnnotations.acceptList(visitor)
|
||||||
uastDeclarations.acceptList(visitor)
|
uastDeclarations.acceptList(visitor)
|
||||||
visitor.afterVisitClass(this)
|
visitor.afterVisitClass(this)
|
||||||
@@ -63,6 +70,7 @@ sealed class AbstractFirKotlinUClass(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: can be commonized once *KotlinUClass is commonized
|
||||||
class FirKotlinUClass(
|
class FirKotlinUClass(
|
||||||
override val javaPsi: KtLightClass,
|
override val javaPsi: KtLightClass,
|
||||||
givenParent: UElement?,
|
givenParent: UElement?,
|
||||||
@@ -92,8 +100,13 @@ class FirKotlinUClass(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getInnerClasses(): Array<UClass> {
|
override fun getInnerClasses(): Array<UClass> {
|
||||||
// TODO: Not yet implemented
|
// filter DefaultImpls to avoid processing same methods from original interface multiple times
|
||||||
return super.getInnerClasses()
|
// filter Enum entry classes to avoid duplication with PsiEnumConstant initializer class
|
||||||
|
return psi.innerClasses.filter {
|
||||||
|
it.name != JvmAbi.DEFAULT_IMPLS_CLASS_NAME && !it.isEnumEntryLightClass
|
||||||
|
}.mapNotNull {
|
||||||
|
languagePlugin?.convertOpt<UClass>(it, this)
|
||||||
|
}.toTypedArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getSuperClass(): UClass? {
|
override fun getSuperClass(): UClass? {
|
||||||
@@ -101,7 +114,6 @@ class FirKotlinUClass(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getFields(): Array<UField> {
|
override fun getFields(): Array<UField> {
|
||||||
// TODO: Not yet implemented
|
|
||||||
return super.getFields()
|
return super.getFields()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,8 +123,50 @@ class FirKotlinUClass(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getMethods(): Array<UMethod> {
|
override fun getMethods(): Array<UMethod> {
|
||||||
// TODO: Not yet implemented
|
val hasPrimaryConstructor = ktClass?.hasPrimaryConstructor() ?: false
|
||||||
return super.getMethods()
|
var secondaryConstructorsCount = 0
|
||||||
|
|
||||||
|
fun createUMethod(psiMethod: PsiMethod): UMethod {
|
||||||
|
return if (psiMethod is KtLightMethod && psiMethod.isConstructor) {
|
||||||
|
if (!hasPrimaryConstructor && secondaryConstructorsCount++ == 0)
|
||||||
|
FirKotlinSecondaryConstructorWithInitializersUMethod(ktClass, psiMethod, this)
|
||||||
|
else
|
||||||
|
FirKotlinConstructorUMethod(ktClass, psiMethod, this)
|
||||||
|
} else {
|
||||||
|
languagePlugin?.convertOpt(psiMethod, this) ?: reportConvertFailure(psiMethod)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isDelegatedMethod(psiMethod: PsiMethod) = psiMethod is KtLightMethod && psiMethod.isDelegated
|
||||||
|
|
||||||
|
val result = ArrayList<UMethod>(javaPsi.methods.size)
|
||||||
|
val handledKtDeclarations = mutableSetOf<PsiElement>()
|
||||||
|
|
||||||
|
for (lightMethod in javaPsi.methods) {
|
||||||
|
if (isDelegatedMethod(lightMethod)) continue
|
||||||
|
val uMethod = createUMethod(lightMethod)
|
||||||
|
result.add(uMethod)
|
||||||
|
|
||||||
|
// Ensure we pick the main Kotlin origin, not the auxiliary one
|
||||||
|
val kotlinOrigin = (lightMethod as? KtLightMethod)?.kotlinOrigin ?: uMethod.sourcePsi
|
||||||
|
handledKtDeclarations.addIfNotNull(kotlinOrigin)
|
||||||
|
}
|
||||||
|
|
||||||
|
val ktDeclarations: List<KtDeclaration> = run ktDeclarations@{
|
||||||
|
ktClass?.let { return@ktDeclarations it.declarations }
|
||||||
|
(javaPsi as? KtLightClassForFacade)?.let { facade ->
|
||||||
|
return@ktDeclarations facade.files.flatMap { file -> file.declarations }
|
||||||
|
}
|
||||||
|
emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
|
ktDeclarations.asSequence()
|
||||||
|
.filterNot { handledKtDeclarations.contains(it) }
|
||||||
|
.mapNotNullTo(result) {
|
||||||
|
baseResolveProviderService.baseKotlinConverter.convertDeclaration(it, this, arrayOf(UElement::class.java)) as? UMethod
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.toTypedArray()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+49
-1
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.asJava.elements.*
|
|||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||||
import org.jetbrains.kotlin.utils.SmartList
|
import org.jetbrains.kotlin.utils.SmartList
|
||||||
|
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||||
import org.jetbrains.uast.*
|
import org.jetbrains.uast.*
|
||||||
|
|
||||||
open class FirKotlinUMethod(
|
open class FirKotlinUMethod(
|
||||||
@@ -124,7 +125,8 @@ open class FirKotlinUMethod(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class FirKotlinConstructorUMethod(
|
// TODO: can be commonized if *KotlinUMethod is commonized
|
||||||
|
open class FirKotlinConstructorUMethod(
|
||||||
private val ktClass: KtClassOrObject?,
|
private val ktClass: KtClassOrObject?,
|
||||||
override val psi: PsiMethod,
|
override val psi: PsiMethod,
|
||||||
kotlinOrigin: KtDeclaration?,
|
kotlinOrigin: KtDeclaration?,
|
||||||
@@ -141,6 +143,29 @@ class FirKotlinConstructorUMethod(
|
|||||||
val isPrimary: Boolean
|
val isPrimary: Boolean
|
||||||
get() = sourcePsi is KtPrimaryConstructor || sourcePsi is KtClassOrObject
|
get() = sourcePsi is KtPrimaryConstructor || sourcePsi is KtClassOrObject
|
||||||
|
|
||||||
|
override val uastBody: UExpression? by lz {
|
||||||
|
val delegationCall: KtCallElement? = sourcePsi.let {
|
||||||
|
when {
|
||||||
|
isPrimary -> ktClass?.superTypeListEntries?.firstIsInstanceOrNull<KtSuperTypeCallEntry>()
|
||||||
|
it is KtSecondaryConstructor -> it.getDelegationCall()
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val bodyExpressions = getBodyExpressions()
|
||||||
|
if (delegationCall == null && bodyExpressions.isEmpty()) return@lz null
|
||||||
|
KotlinLazyUBlockExpression(this) { uastParent ->
|
||||||
|
SmartList<UExpression>().apply {
|
||||||
|
delegationCall?.let {
|
||||||
|
// TODO: function call for delegationCall
|
||||||
|
add(UastEmptyExpression(uastParent))
|
||||||
|
}
|
||||||
|
bodyExpressions.forEach {
|
||||||
|
add(baseResolveProviderService.baseKotlinConverter.convertOrEmpty(it, uastParent))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override val uastAnchor: UIdentifier? by lz {
|
override val uastAnchor: UIdentifier? by lz {
|
||||||
KotlinUIdentifier(
|
KotlinUIdentifier(
|
||||||
javaPsi.nameIdentifier,
|
javaPsi.nameIdentifier,
|
||||||
@@ -148,4 +173,27 @@ class FirKotlinConstructorUMethod(
|
|||||||
this
|
this
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected open fun getBodyExpressions(): List<KtExpression> {
|
||||||
|
if (isPrimary) return getInitializers()
|
||||||
|
val bodyExpression = (sourcePsi as? KtFunction)?.bodyExpression ?: return emptyList()
|
||||||
|
if (bodyExpression is KtBlockExpression) return bodyExpression.statements
|
||||||
|
return listOf(bodyExpression)
|
||||||
|
}
|
||||||
|
|
||||||
|
protected fun getInitializers(): List<KtExpression> {
|
||||||
|
return ktClass?.getAnonymousInitializers()?.mapNotNull { it.body } ?: emptyList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: can be commonized if *KotlinUMethod is commonized
|
||||||
|
// also reuse the comments there (about KT-21617)
|
||||||
|
class FirKotlinSecondaryConstructorWithInitializersUMethod(
|
||||||
|
ktClass: KtClassOrObject?,
|
||||||
|
psi: KtLightMethod,
|
||||||
|
givenParent: UElement?
|
||||||
|
) : FirKotlinConstructorUMethod(ktClass, psi, givenParent) {
|
||||||
|
override fun getBodyExpressions(): List<KtExpression> {
|
||||||
|
return getInitializers() + super.getBodyExpressions()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -16,5 +16,11 @@ UFile (package = )
|
|||||||
UBlockExpression
|
UBlockExpression
|
||||||
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
||||||
UClass (name = Derived)
|
UClass (name = Derived)
|
||||||
|
UExpressionList (super_delegation)
|
||||||
|
UTypeReferenceExpression (name = Base)
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
||||||
|
UExpressionList (super_delegation)
|
||||||
|
UTypeReferenceExpression (name = java.lang.CharSequence)
|
||||||
|
ULiteralExpression (value = "abc")
|
||||||
UMethod (name = Derived)
|
UMethod (name = Derived)
|
||||||
UParameter (name = b)
|
UParameter (name = b)
|
||||||
|
|||||||
@@ -5,20 +5,34 @@ UFile (package = )
|
|||||||
UParameter (name = str)
|
UParameter (name = str)
|
||||||
UMethod (name = A)
|
UMethod (name = A)
|
||||||
UParameter (name = i)
|
UParameter (name = i)
|
||||||
|
UBlockExpression
|
||||||
|
UastEmptyExpression
|
||||||
UMethod (name = getStr)
|
UMethod (name = getStr)
|
||||||
UClass (name = AWithInit)
|
UClass (name = AWithInit)
|
||||||
UField (name = str)
|
UField (name = str)
|
||||||
UMethod (name = AWithInit)
|
UMethod (name = AWithInit)
|
||||||
UParameter (name = str)
|
UParameter (name = str)
|
||||||
|
UBlockExpression
|
||||||
|
UBlockExpression
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
||||||
UMethod (name = AWithInit)
|
UMethod (name = AWithInit)
|
||||||
UParameter (name = i)
|
UParameter (name = i)
|
||||||
|
UBlockExpression
|
||||||
|
UastEmptyExpression
|
||||||
UMethod (name = getStr)
|
UMethod (name = getStr)
|
||||||
UClass (name = AWith2Init)
|
UClass (name = AWith2Init)
|
||||||
UField (name = str)
|
UField (name = str)
|
||||||
UMethod (name = AWith2Init)
|
UMethod (name = AWith2Init)
|
||||||
UParameter (name = str)
|
UParameter (name = str)
|
||||||
|
UBlockExpression
|
||||||
|
UBlockExpression
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
||||||
|
UBlockExpression
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
||||||
UMethod (name = AWith2Init)
|
UMethod (name = AWith2Init)
|
||||||
UParameter (name = i)
|
UParameter (name = i)
|
||||||
|
UBlockExpression
|
||||||
|
UastEmptyExpression
|
||||||
UMethod (name = getStr)
|
UMethod (name = getStr)
|
||||||
UClass (name = AOnlyInit)
|
UClass (name = AOnlyInit)
|
||||||
UMethod (name = AOnlyInit)
|
UMethod (name = AOnlyInit)
|
||||||
@@ -27,10 +41,12 @@ UFile (package = )
|
|||||||
UMethod (name = AWithSecondary)
|
UMethod (name = AWithSecondary)
|
||||||
UParameter (name = i)
|
UParameter (name = i)
|
||||||
UBlockExpression
|
UBlockExpression
|
||||||
|
UastEmptyExpression
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
||||||
UMethod (name = AWithSecondary)
|
UMethod (name = AWithSecondary)
|
||||||
UParameter (name = s)
|
UParameter (name = s)
|
||||||
UBlockExpression
|
UBlockExpression
|
||||||
|
UastEmptyExpression
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
||||||
UMethod (name = getA)
|
UMethod (name = getA)
|
||||||
UMethod (name = setA)
|
UMethod (name = setA)
|
||||||
@@ -40,10 +56,14 @@ UFile (package = )
|
|||||||
UMethod (name = AWithSecondaryInit)
|
UMethod (name = AWithSecondaryInit)
|
||||||
UParameter (name = i)
|
UParameter (name = i)
|
||||||
UBlockExpression
|
UBlockExpression
|
||||||
|
UastEmptyExpression
|
||||||
|
UBlockExpression
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
||||||
UMethod (name = AWithSecondaryInit)
|
UMethod (name = AWithSecondaryInit)
|
||||||
UParameter (name = s)
|
UParameter (name = s)
|
||||||
UBlockExpression
|
UBlockExpression
|
||||||
|
UastEmptyExpression
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
||||||
[!] UnknownKotlinExpression (PROPERTY)
|
[!] UnknownKotlinExpression (PROPERTY)
|
||||||
[!] UnknownKotlinExpression (DOT_QUALIFIED_EXPRESSION)
|
[!] UnknownKotlinExpression (DOT_QUALIFIED_EXPRESSION)
|
||||||
@@ -54,4 +74,7 @@ UFile (package = )
|
|||||||
UField (name = a)
|
UField (name = a)
|
||||||
UMethod (name = AWithFieldInit)
|
UMethod (name = AWithFieldInit)
|
||||||
UParameter (name = i)
|
UParameter (name = i)
|
||||||
|
UBlockExpression
|
||||||
|
UBlockExpression
|
||||||
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
||||||
UMethod (name = getA)
|
UMethod (name = getA)
|
||||||
|
|||||||
+34
-6
@@ -1,21 +1,38 @@
|
|||||||
public final class A {
|
public final class A {
|
||||||
private final var str: java.lang.String
|
private final var str: java.lang.String
|
||||||
public fun A(str: java.lang.String) = UastEmptyExpression
|
public fun A(str: java.lang.String) = UastEmptyExpression
|
||||||
public fun A(i: int) = UastEmptyExpression
|
public fun A(i: int) {
|
||||||
|
UastEmptyExpression
|
||||||
|
}
|
||||||
public final fun getStr() : java.lang.String = UastEmptyExpression
|
public final fun getStr() : java.lang.String = UastEmptyExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class AWithInit {
|
public final class AWithInit {
|
||||||
private final var str: java.lang.String
|
private final var str: java.lang.String
|
||||||
public fun AWithInit(str: java.lang.String) = UastEmptyExpression
|
public fun AWithInit(str: java.lang.String) {
|
||||||
public fun AWithInit(i: int) = UastEmptyExpression
|
{
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public fun AWithInit(i: int) {
|
||||||
|
UastEmptyExpression
|
||||||
|
}
|
||||||
public final fun getStr() : java.lang.String = UastEmptyExpression
|
public final fun getStr() : java.lang.String = UastEmptyExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class AWith2Init {
|
public final class AWith2Init {
|
||||||
private final var str: java.lang.String
|
private final var str: java.lang.String
|
||||||
public fun AWith2Init(str: java.lang.String) = UastEmptyExpression
|
public fun AWith2Init(str: java.lang.String) {
|
||||||
public fun AWith2Init(i: int) = UastEmptyExpression
|
{
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
||||||
|
}
|
||||||
|
{
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public fun AWith2Init(i: int) {
|
||||||
|
UastEmptyExpression
|
||||||
|
}
|
||||||
public final fun getStr() : java.lang.String = UastEmptyExpression
|
public final fun getStr() : java.lang.String = UastEmptyExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,9 +43,11 @@ public final class AOnlyInit {
|
|||||||
public final class AWithSecondary {
|
public final class AWithSecondary {
|
||||||
private var a: java.lang.String
|
private var a: java.lang.String
|
||||||
public fun AWithSecondary(i: int) {
|
public fun AWithSecondary(i: int) {
|
||||||
|
UastEmptyExpression
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
||||||
}
|
}
|
||||||
public fun AWithSecondary(s: java.lang.String) {
|
public fun AWithSecondary(s: java.lang.String) {
|
||||||
|
UastEmptyExpression
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
||||||
}
|
}
|
||||||
public final fun getA() : java.lang.String = UastEmptyExpression
|
public final fun getA() : java.lang.String = UastEmptyExpression
|
||||||
@@ -38,9 +57,14 @@ public final class AWithSecondary {
|
|||||||
public final class AWithSecondaryInit {
|
public final class AWithSecondaryInit {
|
||||||
private var a: java.lang.String
|
private var a: java.lang.String
|
||||||
public fun AWithSecondaryInit(i: int) {
|
public fun AWithSecondaryInit(i: int) {
|
||||||
|
UastEmptyExpression
|
||||||
|
{
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
||||||
|
}
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
||||||
}
|
}
|
||||||
public fun AWithSecondaryInit(s: java.lang.String) {
|
public fun AWithSecondaryInit(s: java.lang.String) {
|
||||||
|
UastEmptyExpression
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
||||||
[!] UnknownKotlinExpression (PROPERTY)
|
[!] UnknownKotlinExpression (PROPERTY)
|
||||||
[!] UnknownKotlinExpression (DOT_QUALIFIED_EXPRESSION)
|
[!] UnknownKotlinExpression (DOT_QUALIFIED_EXPRESSION)
|
||||||
@@ -51,6 +75,10 @@ public final class AWithSecondaryInit {
|
|||||||
|
|
||||||
public final class AWithFieldInit {
|
public final class AWithFieldInit {
|
||||||
private final var a: java.lang.String
|
private final var a: java.lang.String
|
||||||
public fun AWithFieldInit(i: int) = UastEmptyExpression
|
public fun AWithFieldInit(i: int) {
|
||||||
|
{
|
||||||
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
||||||
|
}
|
||||||
|
}
|
||||||
public final fun getA() : java.lang.String = UastEmptyExpression
|
public final fun getA() : java.lang.String = UastEmptyExpression
|
||||||
}
|
}
|
||||||
|
|||||||
+3
@@ -22,6 +22,9 @@ UFile (package = )
|
|||||||
UField (name = mutableProp)
|
UField (name = mutableProp)
|
||||||
UMethod (name = A)
|
UMethod (name = A)
|
||||||
UParameter (name = init)
|
UParameter (name = init)
|
||||||
|
UBlockExpression
|
||||||
|
UBlockExpression
|
||||||
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
||||||
UMethod (name = getMutableProp)
|
UMethod (name = getMutableProp)
|
||||||
UMethod (name = setMutableProp)
|
UMethod (name = setMutableProp)
|
||||||
UParameter (name = value)
|
UParameter (name = value)
|
||||||
|
|||||||
+5
-1
@@ -19,7 +19,11 @@ public final class PropertyReferencesKt {
|
|||||||
public final class A {
|
public final class A {
|
||||||
private var privateProp: int = "not-yet-compile-time-constant"
|
private var privateProp: int = "not-yet-compile-time-constant"
|
||||||
private var mutableProp: int
|
private var mutableProp: int
|
||||||
public fun A(init: int) = UastEmptyExpression
|
public fun A(init: int) {
|
||||||
|
{
|
||||||
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION)
|
||||||
|
}
|
||||||
|
}
|
||||||
public final fun getMutableProp() : int = UastEmptyExpression
|
public final fun getMutableProp() : int = UastEmptyExpression
|
||||||
public final fun setMutableProp(value: int) : void = UastEmptyExpression
|
public final fun setMutableProp(value: int) : void = UastEmptyExpression
|
||||||
public final fun add(x: int) : int {
|
public final fun add(x: int) : int {
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ UFile (package = )
|
|||||||
UParameter (name = str)
|
UParameter (name = str)
|
||||||
UMethod (name = A)
|
UMethod (name = A)
|
||||||
UParameter (name = i)
|
UParameter (name = i)
|
||||||
|
UBlockExpression
|
||||||
|
UastEmptyExpression
|
||||||
UMethod (name = getStr)
|
UMethod (name = getStr)
|
||||||
UMethod (name = foo)
|
UMethod (name = foo)
|
||||||
UParameter (name = a)
|
UParameter (name = a)
|
||||||
@@ -19,12 +21,17 @@ UFile (package = )
|
|||||||
UClass (name = B)
|
UClass (name = B)
|
||||||
UMethod (name = B)
|
UMethod (name = B)
|
||||||
UParameter (name = param)
|
UParameter (name = param)
|
||||||
|
UBlockExpression
|
||||||
|
UastEmptyExpression
|
||||||
UClass (name = C)
|
UClass (name = C)
|
||||||
UMethod (name = C)
|
UMethod (name = C)
|
||||||
UParameter (name = p)
|
UParameter (name = p)
|
||||||
|
UBlockExpression
|
||||||
|
UastEmptyExpression
|
||||||
UMethod (name = C)
|
UMethod (name = C)
|
||||||
UParameter (name = i)
|
UParameter (name = i)
|
||||||
UBlockExpression
|
UBlockExpression
|
||||||
|
UastEmptyExpression
|
||||||
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
||||||
UMethod (name = foo)
|
UMethod (name = foo)
|
||||||
UParameter (name = a)
|
UParameter (name = a)
|
||||||
|
|||||||
+10
-3
@@ -8,19 +8,26 @@ public final class SuperCallsKt {
|
|||||||
public class A {
|
public class A {
|
||||||
private final var str: java.lang.String
|
private final var str: java.lang.String
|
||||||
public fun A(str: java.lang.String) = UastEmptyExpression
|
public fun A(str: java.lang.String) = UastEmptyExpression
|
||||||
public fun A(i: int) = UastEmptyExpression
|
public fun A(i: int) {
|
||||||
|
UastEmptyExpression
|
||||||
|
}
|
||||||
public final fun getStr() : java.lang.String = UastEmptyExpression
|
public final fun getStr() : java.lang.String = UastEmptyExpression
|
||||||
public fun foo(a: long) : void {
|
public fun foo(a: long) : void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class B : A {
|
public final class B : A {
|
||||||
public fun B(param: java.lang.String) = UastEmptyExpression
|
public fun B(param: java.lang.String) {
|
||||||
|
UastEmptyExpression
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class C : A {
|
public final class C : A {
|
||||||
public fun C(p: java.lang.String) = UastEmptyExpression
|
public fun C(p: java.lang.String) {
|
||||||
|
UastEmptyExpression
|
||||||
|
}
|
||||||
public fun C(i: int) {
|
public fun C(i: int) {
|
||||||
|
UastEmptyExpression
|
||||||
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
[!] UnknownKotlinExpression (CALL_EXPRESSION)
|
||||||
}
|
}
|
||||||
public fun foo(a: long) : void {
|
public fun foo(a: long) : void {
|
||||||
|
|||||||
+6
@@ -16,5 +16,11 @@ UFile (package = ) [public final class ConstructorDelegateKt {...]
|
|||||||
UBlockExpression [{...}] : PsiType:Unit
|
UBlockExpression [{...}] : PsiType:Unit
|
||||||
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)]
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)]
|
||||||
UClass (name = Derived) [public final class Derived : Base, java.lang.CharSequence {...}]
|
UClass (name = Derived) [public final class Derived : Base, java.lang.CharSequence {...}]
|
||||||
|
UExpressionList (super_delegation) [super_delegation Base : [!] UnknownKotlinExpression (CALL_EXPRESSION)]
|
||||||
|
UTypeReferenceExpression (name = Base) [Base]
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)]
|
||||||
|
UExpressionList (super_delegation) [super_delegation java.lang.CharSequence : "abc"]
|
||||||
|
UTypeReferenceExpression (name = java.lang.CharSequence) [java.lang.CharSequence]
|
||||||
|
ULiteralExpression (value = "abc") ["abc"] : PsiType:String
|
||||||
UMethod (name = Derived) [public fun Derived(b: Base) = UastEmptyExpression]
|
UMethod (name = Derived) [public fun Derived(b: Base) = UastEmptyExpression]
|
||||||
UParameter (name = b) [var b: Base]
|
UParameter (name = b) [var b: Base]
|
||||||
|
|||||||
@@ -3,22 +3,36 @@ UFile (package = ) [public final class A {...]
|
|||||||
UField (name = str) [private final var str: java.lang.String]
|
UField (name = str) [private final var str: java.lang.String]
|
||||||
UMethod (name = A) [public fun A(str: java.lang.String) = UastEmptyExpression]
|
UMethod (name = A) [public fun A(str: java.lang.String) = UastEmptyExpression]
|
||||||
UParameter (name = str) [var str: java.lang.String]
|
UParameter (name = str) [var str: java.lang.String]
|
||||||
UMethod (name = A) [public fun A(i: int) = UastEmptyExpression]
|
UMethod (name = A) [public fun A(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
|
UBlockExpression [{...}]
|
||||||
|
UastEmptyExpression [UastEmptyExpression]
|
||||||
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
||||||
UClass (name = AWithInit) [public final class AWithInit {...}]
|
UClass (name = AWithInit) [public final class AWithInit {...}]
|
||||||
UField (name = str) [private final var str: java.lang.String]
|
UField (name = str) [private final var str: java.lang.String]
|
||||||
UMethod (name = AWithInit) [public fun AWithInit(str: java.lang.String) = UastEmptyExpression]
|
UMethod (name = AWithInit) [public fun AWithInit(str: java.lang.String) {...}]
|
||||||
UParameter (name = str) [var str: java.lang.String]
|
UParameter (name = str) [var str: java.lang.String]
|
||||||
UMethod (name = AWithInit) [public fun AWithInit(i: int) = UastEmptyExpression]
|
UBlockExpression [{...}]
|
||||||
|
UBlockExpression [{...}] : PsiType:Unit
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)]
|
||||||
|
UMethod (name = AWithInit) [public fun AWithInit(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
|
UBlockExpression [{...}]
|
||||||
|
UastEmptyExpression [UastEmptyExpression]
|
||||||
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
||||||
UClass (name = AWith2Init) [public final class AWith2Init {...}]
|
UClass (name = AWith2Init) [public final class AWith2Init {...}]
|
||||||
UField (name = str) [private final var str: java.lang.String]
|
UField (name = str) [private final var str: java.lang.String]
|
||||||
UMethod (name = AWith2Init) [public fun AWith2Init(str: java.lang.String) = UastEmptyExpression]
|
UMethod (name = AWith2Init) [public fun AWith2Init(str: java.lang.String) {...}]
|
||||||
UParameter (name = str) [var str: java.lang.String]
|
UParameter (name = str) [var str: java.lang.String]
|
||||||
UMethod (name = AWith2Init) [public fun AWith2Init(i: int) = UastEmptyExpression]
|
UBlockExpression [{...}]
|
||||||
|
UBlockExpression [{...}] : PsiType:Unit
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)]
|
||||||
|
UBlockExpression [{...}] : PsiType:Unit
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)]
|
||||||
|
UMethod (name = AWith2Init) [public fun AWith2Init(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
|
UBlockExpression [{...}]
|
||||||
|
UastEmptyExpression [UastEmptyExpression]
|
||||||
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
||||||
UClass (name = AOnlyInit) [public final class AOnlyInit {...}]
|
UClass (name = AOnlyInit) [public final class AOnlyInit {...}]
|
||||||
UMethod (name = AOnlyInit) [public fun AOnlyInit() = UastEmptyExpression]
|
UMethod (name = AOnlyInit) [public fun AOnlyInit() = UastEmptyExpression]
|
||||||
@@ -26,11 +40,13 @@ UFile (package = ) [public final class A {...]
|
|||||||
UField (name = a) [private var a: java.lang.String]
|
UField (name = a) [private var a: java.lang.String]
|
||||||
UMethod (name = AWithSecondary) [public fun AWithSecondary(i: int) {...}]
|
UMethod (name = AWithSecondary) [public fun AWithSecondary(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
UBlockExpression [{...}] : PsiType:Unit
|
UBlockExpression [{...}]
|
||||||
|
UastEmptyExpression [UastEmptyExpression]
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)]
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)]
|
||||||
UMethod (name = AWithSecondary) [public fun AWithSecondary(s: java.lang.String) {...}]
|
UMethod (name = AWithSecondary) [public fun AWithSecondary(s: java.lang.String) {...}]
|
||||||
UParameter (name = s) [var s: java.lang.String]
|
UParameter (name = s) [var s: java.lang.String]
|
||||||
UBlockExpression [{...}] : PsiType:Unit
|
UBlockExpression [{...}]
|
||||||
|
UastEmptyExpression [UastEmptyExpression]
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)]
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)]
|
||||||
UMethod (name = getA) [public final fun getA() : java.lang.String = UastEmptyExpression]
|
UMethod (name = getA) [public final fun getA() : java.lang.String = UastEmptyExpression]
|
||||||
UMethod (name = setA) [public final fun setA(value: java.lang.String) : void = UastEmptyExpression]
|
UMethod (name = setA) [public final fun setA(value: java.lang.String) : void = UastEmptyExpression]
|
||||||
@@ -39,11 +55,15 @@ UFile (package = ) [public final class A {...]
|
|||||||
UField (name = a) [private var a: java.lang.String]
|
UField (name = a) [private var a: java.lang.String]
|
||||||
UMethod (name = AWithSecondaryInit) [public fun AWithSecondaryInit(i: int) {...}]
|
UMethod (name = AWithSecondaryInit) [public fun AWithSecondaryInit(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
|
UBlockExpression [{...}]
|
||||||
|
UastEmptyExpression [UastEmptyExpression]
|
||||||
UBlockExpression [{...}] : PsiType:Unit
|
UBlockExpression [{...}] : PsiType:Unit
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)]
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)]
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)]
|
||||||
UMethod (name = AWithSecondaryInit) [public fun AWithSecondaryInit(s: java.lang.String) {...}]
|
UMethod (name = AWithSecondaryInit) [public fun AWithSecondaryInit(s: java.lang.String) {...}]
|
||||||
UParameter (name = s) [var s: java.lang.String]
|
UParameter (name = s) [var s: java.lang.String]
|
||||||
UBlockExpression [{...}] : PsiType:String
|
UBlockExpression [{...}]
|
||||||
|
UastEmptyExpression [UastEmptyExpression]
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)]
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)]
|
||||||
[!] UnknownKotlinExpression (PROPERTY) [[!] UnknownKotlinExpression (PROPERTY)]
|
[!] UnknownKotlinExpression (PROPERTY) [[!] UnknownKotlinExpression (PROPERTY)]
|
||||||
[!] UnknownKotlinExpression (DOT_QUALIFIED_EXPRESSION) [[!] UnknownKotlinExpression (DOT_QUALIFIED_EXPRESSION)]
|
[!] UnknownKotlinExpression (DOT_QUALIFIED_EXPRESSION) [[!] UnknownKotlinExpression (DOT_QUALIFIED_EXPRESSION)]
|
||||||
@@ -52,6 +72,9 @@ UFile (package = ) [public final class A {...]
|
|||||||
UParameter (name = value) [var value: java.lang.String]
|
UParameter (name = value) [var value: java.lang.String]
|
||||||
UClass (name = AWithFieldInit) [public final class AWithFieldInit {...}]
|
UClass (name = AWithFieldInit) [public final class AWithFieldInit {...}]
|
||||||
UField (name = a) [private final var a: java.lang.String]
|
UField (name = a) [private final var a: java.lang.String]
|
||||||
UMethod (name = AWithFieldInit) [public fun AWithFieldInit(i: int) = UastEmptyExpression]
|
UMethod (name = AWithFieldInit) [public fun AWithFieldInit(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
|
UBlockExpression [{...}]
|
||||||
|
UBlockExpression [{...}] : PsiType:Unit
|
||||||
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)]
|
||||||
UMethod (name = getA) [public final fun getA() : java.lang.String = UastEmptyExpression]
|
UMethod (name = getA) [public final fun getA() : java.lang.String = UastEmptyExpression]
|
||||||
|
|||||||
+4
-1
@@ -20,8 +20,11 @@ UFile (package = ) [public final class PropertyReferencesKt {...]
|
|||||||
UField (name = privateProp) [private var privateProp: int = "not-yet-compile-time-constant"]
|
UField (name = privateProp) [private var privateProp: int = "not-yet-compile-time-constant"]
|
||||||
ULiteralExpression (value = "not-yet-compile-time-constant") ["not-yet-compile-time-constant"] : PsiType:int
|
ULiteralExpression (value = "not-yet-compile-time-constant") ["not-yet-compile-time-constant"] : PsiType:int
|
||||||
UField (name = mutableProp) [private var mutableProp: int]
|
UField (name = mutableProp) [private var mutableProp: int]
|
||||||
UMethod (name = A) [public fun A(init: int) = UastEmptyExpression]
|
UMethod (name = A) [public fun A(init: int) {...}]
|
||||||
UParameter (name = init) [var init: int]
|
UParameter (name = init) [var init: int]
|
||||||
|
UBlockExpression [{...}]
|
||||||
|
UBlockExpression [{...}] : PsiType:Unit
|
||||||
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)]
|
||||||
UMethod (name = getMutableProp) [public final fun getMutableProp() : int = UastEmptyExpression]
|
UMethod (name = getMutableProp) [public final fun getMutableProp() : int = UastEmptyExpression]
|
||||||
UMethod (name = setMutableProp) [public final fun setMutableProp(value: int) : void = UastEmptyExpression]
|
UMethod (name = setMutableProp) [public final fun setMutableProp(value: int) : void = UastEmptyExpression]
|
||||||
UParameter (name = value) [var value: int]
|
UParameter (name = value) [var value: int]
|
||||||
|
|||||||
@@ -10,21 +10,28 @@ UFile (package = ) [public final class SuperCallsKt {...]
|
|||||||
UField (name = str) [private final var str: java.lang.String]
|
UField (name = str) [private final var str: java.lang.String]
|
||||||
UMethod (name = A) [public fun A(str: java.lang.String) = UastEmptyExpression]
|
UMethod (name = A) [public fun A(str: java.lang.String) = UastEmptyExpression]
|
||||||
UParameter (name = str) [var str: java.lang.String]
|
UParameter (name = str) [var str: java.lang.String]
|
||||||
UMethod (name = A) [public fun A(i: int) = UastEmptyExpression]
|
UMethod (name = A) [public fun A(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
|
UBlockExpression [{...}]
|
||||||
|
UastEmptyExpression [UastEmptyExpression]
|
||||||
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
||||||
UMethod (name = foo) [public fun foo(a: long) : void {...}]
|
UMethod (name = foo) [public fun foo(a: long) : void {...}]
|
||||||
UParameter (name = a) [var a: long]
|
UParameter (name = a) [var a: long]
|
||||||
UBlockExpression [{...}] : PsiType:Unit
|
UBlockExpression [{...}] : PsiType:Unit
|
||||||
UClass (name = B) [public final class B : A {...}]
|
UClass (name = B) [public final class B : A {...}]
|
||||||
UMethod (name = B) [public fun B(param: java.lang.String) = UastEmptyExpression]
|
UMethod (name = B) [public fun B(param: java.lang.String) {...}]
|
||||||
UParameter (name = param) [var param: java.lang.String]
|
UParameter (name = param) [var param: java.lang.String]
|
||||||
|
UBlockExpression [{...}]
|
||||||
|
UastEmptyExpression [UastEmptyExpression]
|
||||||
UClass (name = C) [public final class C : A {...}]
|
UClass (name = C) [public final class C : A {...}]
|
||||||
UMethod (name = C) [public fun C(p: java.lang.String) = UastEmptyExpression]
|
UMethod (name = C) [public fun C(p: java.lang.String) {...}]
|
||||||
UParameter (name = p) [var p: java.lang.String]
|
UParameter (name = p) [var p: java.lang.String]
|
||||||
|
UBlockExpression [{...}]
|
||||||
|
UastEmptyExpression [UastEmptyExpression]
|
||||||
UMethod (name = C) [public fun C(i: int) {...}]
|
UMethod (name = C) [public fun C(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
UBlockExpression [{...}] : PsiType:Unit
|
UBlockExpression [{...}]
|
||||||
|
UastEmptyExpression [UastEmptyExpression]
|
||||||
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)]
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)]
|
||||||
UMethod (name = foo) [public fun foo(a: long) : void {...}]
|
UMethod (name = foo) [public fun foo(a: long) : void {...}]
|
||||||
UParameter (name = a) [var a: long]
|
UParameter (name = a) [var a: long]
|
||||||
|
|||||||
+6
@@ -16,5 +16,11 @@ UFile (package = ) [public final class ConstructorDelegateKt {...]
|
|||||||
UBlockExpression [{...}] = Undetermined
|
UBlockExpression [{...}] = Undetermined
|
||||||
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)] = Undetermined
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)] = Undetermined
|
||||||
UClass (name = Derived) [public final class Derived : Base, java.lang.CharSequence {...}]
|
UClass (name = Derived) [public final class Derived : Base, java.lang.CharSequence {...}]
|
||||||
|
UExpressionList (super_delegation) [super_delegation Base : [!] UnknownKotlinExpression (CALL_EXPRESSION)] = Undetermined
|
||||||
|
UTypeReferenceExpression (name = Base) [Base] = Undetermined
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)] = Undetermined
|
||||||
|
UExpressionList (super_delegation) [super_delegation java.lang.CharSequence : "abc"] = Undetermined
|
||||||
|
UTypeReferenceExpression (name = java.lang.CharSequence) [java.lang.CharSequence] = Undetermined
|
||||||
|
ULiteralExpression (value = "abc") ["abc"] = Undetermined
|
||||||
UMethod (name = Derived) [public fun Derived(b: Base) = UastEmptyExpression]
|
UMethod (name = Derived) [public fun Derived(b: Base) = UastEmptyExpression]
|
||||||
UParameter (name = b) [var b: Base]
|
UParameter (name = b) [var b: Base]
|
||||||
|
|||||||
@@ -3,22 +3,36 @@ UFile (package = ) [public final class A {...]
|
|||||||
UField (name = str) [private final var str: java.lang.String]
|
UField (name = str) [private final var str: java.lang.String]
|
||||||
UMethod (name = A) [public fun A(str: java.lang.String) = UastEmptyExpression]
|
UMethod (name = A) [public fun A(str: java.lang.String) = UastEmptyExpression]
|
||||||
UParameter (name = str) [var str: java.lang.String]
|
UParameter (name = str) [var str: java.lang.String]
|
||||||
UMethod (name = A) [public fun A(i: int) = UastEmptyExpression]
|
UMethod (name = A) [public fun A(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UastEmptyExpression [UastEmptyExpression] = Undetermined
|
||||||
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
||||||
UClass (name = AWithInit) [public final class AWithInit {...}]
|
UClass (name = AWithInit) [public final class AWithInit {...}]
|
||||||
UField (name = str) [private final var str: java.lang.String]
|
UField (name = str) [private final var str: java.lang.String]
|
||||||
UMethod (name = AWithInit) [public fun AWithInit(str: java.lang.String) = UastEmptyExpression]
|
UMethod (name = AWithInit) [public fun AWithInit(str: java.lang.String) {...}]
|
||||||
UParameter (name = str) [var str: java.lang.String]
|
UParameter (name = str) [var str: java.lang.String]
|
||||||
UMethod (name = AWithInit) [public fun AWithInit(i: int) = UastEmptyExpression]
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)] = Undetermined
|
||||||
|
UMethod (name = AWithInit) [public fun AWithInit(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UastEmptyExpression [UastEmptyExpression] = Undetermined
|
||||||
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
||||||
UClass (name = AWith2Init) [public final class AWith2Init {...}]
|
UClass (name = AWith2Init) [public final class AWith2Init {...}]
|
||||||
UField (name = str) [private final var str: java.lang.String]
|
UField (name = str) [private final var str: java.lang.String]
|
||||||
UMethod (name = AWith2Init) [public fun AWith2Init(str: java.lang.String) = UastEmptyExpression]
|
UMethod (name = AWith2Init) [public fun AWith2Init(str: java.lang.String) {...}]
|
||||||
UParameter (name = str) [var str: java.lang.String]
|
UParameter (name = str) [var str: java.lang.String]
|
||||||
UMethod (name = AWith2Init) [public fun AWith2Init(i: int) = UastEmptyExpression]
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)] = Undetermined
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)] = Undetermined
|
||||||
|
UMethod (name = AWith2Init) [public fun AWith2Init(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UastEmptyExpression [UastEmptyExpression] = Undetermined
|
||||||
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
||||||
UClass (name = AOnlyInit) [public final class AOnlyInit {...}]
|
UClass (name = AOnlyInit) [public final class AOnlyInit {...}]
|
||||||
UMethod (name = AOnlyInit) [public fun AOnlyInit() = UastEmptyExpression]
|
UMethod (name = AOnlyInit) [public fun AOnlyInit() = UastEmptyExpression]
|
||||||
@@ -27,10 +41,12 @@ UFile (package = ) [public final class A {...]
|
|||||||
UMethod (name = AWithSecondary) [public fun AWithSecondary(i: int) {...}]
|
UMethod (name = AWithSecondary) [public fun AWithSecondary(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
UBlockExpression [{...}] = Undetermined
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UastEmptyExpression [UastEmptyExpression] = Undetermined
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)] = Undetermined
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)] = Undetermined
|
||||||
UMethod (name = AWithSecondary) [public fun AWithSecondary(s: java.lang.String) {...}]
|
UMethod (name = AWithSecondary) [public fun AWithSecondary(s: java.lang.String) {...}]
|
||||||
UParameter (name = s) [var s: java.lang.String]
|
UParameter (name = s) [var s: java.lang.String]
|
||||||
UBlockExpression [{...}] = Undetermined
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UastEmptyExpression [UastEmptyExpression] = Undetermined
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)] = Undetermined
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)] = Undetermined
|
||||||
UMethod (name = getA) [public final fun getA() : java.lang.String = UastEmptyExpression]
|
UMethod (name = getA) [public final fun getA() : java.lang.String = UastEmptyExpression]
|
||||||
UMethod (name = setA) [public final fun setA(value: java.lang.String) : void = UastEmptyExpression]
|
UMethod (name = setA) [public final fun setA(value: java.lang.String) : void = UastEmptyExpression]
|
||||||
@@ -40,10 +56,14 @@ UFile (package = ) [public final class A {...]
|
|||||||
UMethod (name = AWithSecondaryInit) [public fun AWithSecondaryInit(i: int) {...}]
|
UMethod (name = AWithSecondaryInit) [public fun AWithSecondaryInit(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
UBlockExpression [{...}] = Undetermined
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UastEmptyExpression [UastEmptyExpression] = Undetermined
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)] = Undetermined
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)] = Undetermined
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)] = Undetermined
|
||||||
UMethod (name = AWithSecondaryInit) [public fun AWithSecondaryInit(s: java.lang.String) {...}]
|
UMethod (name = AWithSecondaryInit) [public fun AWithSecondaryInit(s: java.lang.String) {...}]
|
||||||
UParameter (name = s) [var s: java.lang.String]
|
UParameter (name = s) [var s: java.lang.String]
|
||||||
UBlockExpression [{...}] = Undetermined
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UastEmptyExpression [UastEmptyExpression] = Undetermined
|
||||||
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)] = Undetermined
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)] = Undetermined
|
||||||
[!] UnknownKotlinExpression (PROPERTY) [[!] UnknownKotlinExpression (PROPERTY)] = Undetermined
|
[!] UnknownKotlinExpression (PROPERTY) [[!] UnknownKotlinExpression (PROPERTY)] = Undetermined
|
||||||
[!] UnknownKotlinExpression (DOT_QUALIFIED_EXPRESSION) [[!] UnknownKotlinExpression (DOT_QUALIFIED_EXPRESSION)] = Undetermined
|
[!] UnknownKotlinExpression (DOT_QUALIFIED_EXPRESSION) [[!] UnknownKotlinExpression (DOT_QUALIFIED_EXPRESSION)] = Undetermined
|
||||||
@@ -52,6 +72,9 @@ UFile (package = ) [public final class A {...]
|
|||||||
UParameter (name = value) [var value: java.lang.String]
|
UParameter (name = value) [var value: java.lang.String]
|
||||||
UClass (name = AWithFieldInit) [public final class AWithFieldInit {...}]
|
UClass (name = AWithFieldInit) [public final class AWithFieldInit {...}]
|
||||||
UField (name = a) [private final var a: java.lang.String]
|
UField (name = a) [private final var a: java.lang.String]
|
||||||
UMethod (name = AWithFieldInit) [public fun AWithFieldInit(i: int) = UastEmptyExpression]
|
UMethod (name = AWithFieldInit) [public fun AWithFieldInit(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)] = Undetermined
|
||||||
UMethod (name = getA) [public final fun getA() : java.lang.String = UastEmptyExpression]
|
UMethod (name = getA) [public final fun getA() : java.lang.String = UastEmptyExpression]
|
||||||
|
|||||||
+4
-1
@@ -20,8 +20,11 @@ UFile (package = ) [public final class PropertyReferencesKt {...]
|
|||||||
UField (name = privateProp) [private var privateProp: int = "not-yet-compile-time-constant"]
|
UField (name = privateProp) [private var privateProp: int = "not-yet-compile-time-constant"]
|
||||||
ULiteralExpression (value = "not-yet-compile-time-constant") ["not-yet-compile-time-constant"] = "not-yet-compile-time-constant"
|
ULiteralExpression (value = "not-yet-compile-time-constant") ["not-yet-compile-time-constant"] = "not-yet-compile-time-constant"
|
||||||
UField (name = mutableProp) [private var mutableProp: int]
|
UField (name = mutableProp) [private var mutableProp: int]
|
||||||
UMethod (name = A) [public fun A(init: int) = UastEmptyExpression]
|
UMethod (name = A) [public fun A(init: int) {...}]
|
||||||
UParameter (name = init) [var init: int]
|
UParameter (name = init) [var init: int]
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
[!] UnknownKotlinExpression (BINARY_EXPRESSION) [[!] UnknownKotlinExpression (BINARY_EXPRESSION)] = Undetermined
|
||||||
UMethod (name = getMutableProp) [public final fun getMutableProp() : int = UastEmptyExpression]
|
UMethod (name = getMutableProp) [public final fun getMutableProp() : int = UastEmptyExpression]
|
||||||
UMethod (name = setMutableProp) [public final fun setMutableProp(value: int) : void = UastEmptyExpression]
|
UMethod (name = setMutableProp) [public final fun setMutableProp(value: int) : void = UastEmptyExpression]
|
||||||
UParameter (name = value) [var value: int]
|
UParameter (name = value) [var value: int]
|
||||||
|
|||||||
@@ -10,21 +10,28 @@ UFile (package = ) [public final class SuperCallsKt {...]
|
|||||||
UField (name = str) [private final var str: java.lang.String]
|
UField (name = str) [private final var str: java.lang.String]
|
||||||
UMethod (name = A) [public fun A(str: java.lang.String) = UastEmptyExpression]
|
UMethod (name = A) [public fun A(str: java.lang.String) = UastEmptyExpression]
|
||||||
UParameter (name = str) [var str: java.lang.String]
|
UParameter (name = str) [var str: java.lang.String]
|
||||||
UMethod (name = A) [public fun A(i: int) = UastEmptyExpression]
|
UMethod (name = A) [public fun A(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UastEmptyExpression [UastEmptyExpression] = Undetermined
|
||||||
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
UMethod (name = getStr) [public final fun getStr() : java.lang.String = UastEmptyExpression]
|
||||||
UMethod (name = foo) [public fun foo(a: long) : void {...}]
|
UMethod (name = foo) [public fun foo(a: long) : void {...}]
|
||||||
UParameter (name = a) [var a: long]
|
UParameter (name = a) [var a: long]
|
||||||
UBlockExpression [{...}] = Undetermined
|
UBlockExpression [{...}] = Undetermined
|
||||||
UClass (name = B) [public final class B : A {...}]
|
UClass (name = B) [public final class B : A {...}]
|
||||||
UMethod (name = B) [public fun B(param: java.lang.String) = UastEmptyExpression]
|
UMethod (name = B) [public fun B(param: java.lang.String) {...}]
|
||||||
UParameter (name = param) [var param: java.lang.String]
|
UParameter (name = param) [var param: java.lang.String]
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UastEmptyExpression [UastEmptyExpression] = Undetermined
|
||||||
UClass (name = C) [public final class C : A {...}]
|
UClass (name = C) [public final class C : A {...}]
|
||||||
UMethod (name = C) [public fun C(p: java.lang.String) = UastEmptyExpression]
|
UMethod (name = C) [public fun C(p: java.lang.String) {...}]
|
||||||
UParameter (name = p) [var p: java.lang.String]
|
UParameter (name = p) [var p: java.lang.String]
|
||||||
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UastEmptyExpression [UastEmptyExpression] = Undetermined
|
||||||
UMethod (name = C) [public fun C(i: int) {...}]
|
UMethod (name = C) [public fun C(i: int) {...}]
|
||||||
UParameter (name = i) [var i: int]
|
UParameter (name = i) [var i: int]
|
||||||
UBlockExpression [{...}] = Undetermined
|
UBlockExpression [{...}] = Undetermined
|
||||||
|
UastEmptyExpression [UastEmptyExpression] = Undetermined
|
||||||
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)] = Undetermined
|
[!] UnknownKotlinExpression (CALL_EXPRESSION) [[!] UnknownKotlinExpression (CALL_EXPRESSION)] = Undetermined
|
||||||
UMethod (name = foo) [public fun foo(a: long) : void {...}]
|
UMethod (name = foo) [public fun foo(a: long) : void {...}]
|
||||||
UParameter (name = a) [var a: long]
|
UParameter (name = a) [var a: long]
|
||||||
|
|||||||
@@ -5,8 +5,10 @@ UFile (package = ) [public final class UnresolvedKt {...]
|
|||||||
UBlockExpression [{...}] : PsiType:Unit
|
UBlockExpression [{...}] : PsiType:Unit
|
||||||
UClass (name = A) [public final class A : error.NonExistentClass {...}]
|
UClass (name = A) [public final class A : error.NonExistentClass {...}]
|
||||||
UField (name = prop) [private final var prop: error.NonExistentClass]
|
UField (name = prop) [private final var prop: error.NonExistentClass]
|
||||||
UMethod (name = A) [public fun A(prop: error.NonExistentClass) = UastEmptyExpression]
|
UMethod (name = A) [public fun A(prop: error.NonExistentClass) {...}]
|
||||||
UParameter (name = prop) [var prop: error.NonExistentClass]
|
UParameter (name = prop) [var prop: error.NonExistentClass]
|
||||||
|
UBlockExpression [{...}]
|
||||||
|
UastEmptyExpression [UastEmptyExpression]
|
||||||
UMethod (name = getProp) [public final fun getProp() : error.NonExistentClass = UastEmptyExpression]
|
UMethod (name = getProp) [public final fun getProp() : error.NonExistentClass = UastEmptyExpression]
|
||||||
UMethod (name = bar) [public fun bar() : error.NonExistentClass {...}]
|
UMethod (name = bar) [public fun bar() : error.NonExistentClass {...}]
|
||||||
UBlockExpression [{...}] : PsiType:Unit
|
UBlockExpression [{...}] : PsiType:Unit
|
||||||
|
|||||||
@@ -306,10 +306,10 @@ internal object KotlinConverter : BaseKotlinConverter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun convertDeclaration(
|
override fun convertDeclaration(
|
||||||
element: PsiElement,
|
element: PsiElement,
|
||||||
givenParent: UElement?,
|
givenParent: UElement?,
|
||||||
expectedTypes: Array<out Class<out UElement>>
|
requiredTypes: Array<out Class<out UElement>>
|
||||||
): UElement? {
|
): UElement? {
|
||||||
val original = element.originalElement
|
val original = element.originalElement
|
||||||
|
|
||||||
@@ -328,18 +328,18 @@ internal object KotlinConverter : BaseKotlinConverter {
|
|||||||
ctor(original as P, ktElement, givenParent)
|
ctor(original as P, ktElement, givenParent)
|
||||||
}
|
}
|
||||||
|
|
||||||
return with(expectedTypes) {
|
return with(requiredTypes) {
|
||||||
when (original) {
|
when (original) {
|
||||||
is KtLightMethod -> el<UMethod>(build(KotlinUMethod.Companion::create)) // .Companion is needed because of KT-13934
|
is KtLightMethod -> el<UMethod>(build(KotlinUMethod.Companion::create)) // .Companion is needed because of KT-13934
|
||||||
is UastFakeLightMethod -> el<UMethod> {
|
is UastFakeLightMethod -> el<UMethod> {
|
||||||
val ktFunction = original.original
|
val ktFunction = original.original
|
||||||
if (ktFunction.isLocal)
|
if (ktFunction.isLocal)
|
||||||
convertDeclaration(ktFunction, givenParent, expectedTypes)
|
convertDeclaration(ktFunction, givenParent, requiredTypes)
|
||||||
else
|
else
|
||||||
KotlinUMethodWithFakeLightDelegate(ktFunction, original, givenParent)
|
KotlinUMethodWithFakeLightDelegate(ktFunction, original, givenParent)
|
||||||
}
|
}
|
||||||
is UastFakeLightPrimaryConstructor ->
|
is UastFakeLightPrimaryConstructor ->
|
||||||
convertFakeLightConstructorAlternatives(original, givenParent, expectedTypes).firstOrNull()
|
convertFakeLightConstructorAlternatives(original, givenParent, requiredTypes).firstOrNull()
|
||||||
is KtLightClass -> when (original.kotlinOrigin) {
|
is KtLightClass -> when (original.kotlinOrigin) {
|
||||||
is KtEnumEntry -> el<UEnumConstant> {
|
is KtEnumEntry -> el<UEnumConstant> {
|
||||||
convertEnumEntry(original.kotlinOrigin as KtEnumEntry, givenParent)
|
convertEnumEntry(original.kotlinOrigin as KtEnumEntry, givenParent)
|
||||||
@@ -380,7 +380,7 @@ internal object KotlinConverter : BaseKotlinConverter {
|
|||||||
el<UMethod> {
|
el<UMethod> {
|
||||||
val lightMethod = LightClassUtil.getLightClassMethod(original)
|
val lightMethod = LightClassUtil.getLightClassMethod(original)
|
||||||
if (lightMethod != null)
|
if (lightMethod != null)
|
||||||
convertDeclaration(lightMethod, givenParent, expectedTypes)
|
convertDeclaration(lightMethod, givenParent, requiredTypes)
|
||||||
else {
|
else {
|
||||||
val ktLightClass = getLightClassForFakeMethod(original) ?: return null
|
val ktLightClass = getLightClassForFakeMethod(original) ?: return null
|
||||||
KotlinUMethodWithFakeLightDelegate(original, ktLightClass, givenParent)
|
KotlinUMethodWithFakeLightDelegate(original, ktLightClass, givenParent)
|
||||||
@@ -390,14 +390,14 @@ internal object KotlinConverter : BaseKotlinConverter {
|
|||||||
|
|
||||||
is KtPropertyAccessor -> el<UMethod> {
|
is KtPropertyAccessor -> el<UMethod> {
|
||||||
val lightMethod = LightClassUtil.getLightClassAccessorMethod(original) ?: return null
|
val lightMethod = LightClassUtil.getLightClassAccessorMethod(original) ?: return null
|
||||||
convertDeclaration(lightMethod, givenParent, expectedTypes)
|
convertDeclaration(lightMethod, givenParent, requiredTypes)
|
||||||
}
|
}
|
||||||
|
|
||||||
is KtProperty ->
|
is KtProperty ->
|
||||||
if (original.isLocal) {
|
if (original.isLocal) {
|
||||||
convertPsiElement(original, givenParent, expectedTypes)
|
convertPsiElement(original, givenParent, requiredTypes)
|
||||||
} else {
|
} else {
|
||||||
convertNonLocalProperty(original, givenParent, expectedTypes).firstOrNull()
|
convertNonLocalProperty(original, givenParent, requiredTypes).firstOrNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
is KtParameter -> convertParameter(original, givenParent, this).firstOrNull()
|
is KtParameter -> convertParameter(original, givenParent, this).firstOrNull()
|
||||||
@@ -406,12 +406,12 @@ internal object KotlinConverter : BaseKotlinConverter {
|
|||||||
is FakeFileForLightClass -> el<UFile> { KotlinUFile(original.navigationElement, kotlinUastPlugin) }
|
is FakeFileForLightClass -> el<UFile> { KotlinUFile(original.navigationElement, kotlinUastPlugin) }
|
||||||
is KtAnnotationEntry -> el<UAnnotation>(build(::KotlinUAnnotation))
|
is KtAnnotationEntry -> el<UAnnotation>(build(::KotlinUAnnotation))
|
||||||
is KtCallExpression ->
|
is KtCallExpression ->
|
||||||
if (expectedTypes.isAssignableFrom(KotlinUNestedAnnotation::class.java) &&
|
if (requiredTypes.isAssignableFrom(KotlinUNestedAnnotation::class.java) &&
|
||||||
!expectedTypes.isAssignableFrom(UCallExpression::class.java)
|
!requiredTypes.isAssignableFrom(UCallExpression::class.java)
|
||||||
) {
|
) {
|
||||||
el<UAnnotation> { KotlinUNestedAnnotation.tryCreate(original, givenParent) }
|
el<UAnnotation> { KotlinUNestedAnnotation.tryCreate(original, givenParent) }
|
||||||
} else null
|
} else null
|
||||||
is KtLightAnnotationForSourceEntry -> convertDeclarationOrElement(original.kotlinOrigin, givenParent, expectedTypes)
|
is KtLightAnnotationForSourceEntry -> convertDeclarationOrElement(original.kotlinOrigin, givenParent, requiredTypes)
|
||||||
is KtDelegatedSuperTypeEntry -> el<KotlinSupertypeDelegationUExpression> {
|
is KtDelegatedSuperTypeEntry -> el<KotlinSupertypeDelegationUExpression> {
|
||||||
KotlinSupertypeDelegationUExpression(original, givenParent)
|
KotlinSupertypeDelegationUExpression(original, givenParent)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,14 +24,12 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClassForScript
|
|||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
|
|
||||||
import org.jetbrains.kotlin.utils.SmartList
|
import org.jetbrains.kotlin.utils.SmartList
|
||||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||||
import org.jetbrains.uast.*
|
import org.jetbrains.uast.*
|
||||||
import org.jetbrains.uast.internal.acceptList
|
import org.jetbrains.uast.internal.acceptList
|
||||||
import org.jetbrains.uast.kotlin.declarations.KotlinUMethod
|
import org.jetbrains.uast.kotlin.declarations.KotlinUMethod
|
||||||
import org.jetbrains.uast.kotlin.kinds.KotlinSpecialExpressionKinds
|
|
||||||
import org.jetbrains.uast.visitor.UastVisitor
|
import org.jetbrains.uast.visitor.UastVisitor
|
||||||
|
|
||||||
abstract class AbstractKotlinUClass(givenParent: UElement?) : KotlinAbstractUElement(givenParent), UClassTypeSpecific, UAnchorOwner {
|
abstract class AbstractKotlinUClass(givenParent: UElement?) : KotlinAbstractUElement(givenParent), UClassTypeSpecific, UAnchorOwner {
|
||||||
@@ -74,26 +72,6 @@ abstract class AbstractKotlinUClass(givenParent: UElement?) : KotlinAbstractUEle
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class KotlinSupertypeDelegationUExpression(override val sourcePsi: KtDelegatedSuperTypeEntry, givenParent: UElement?) :
|
|
||||||
KotlinAbstractUExpression(givenParent), UExpressionList {
|
|
||||||
|
|
||||||
override val psi: PsiElement? get() = sourcePsi
|
|
||||||
|
|
||||||
val typeReference: UTypeReferenceExpression? by lazy {
|
|
||||||
sourcePsi.typeReference?.let { KotlinUTypeReferenceExpression(it, this) { it.toPsiType(this) } }
|
|
||||||
}
|
|
||||||
|
|
||||||
val delegateExpression: UExpression? by lazy {
|
|
||||||
sourcePsi.delegateExpression?.let { kotlinUastPlugin.convertElement(it, this, UExpression::class.java) as? UExpression }
|
|
||||||
}
|
|
||||||
|
|
||||||
override val expressions: List<UExpression>
|
|
||||||
get() = listOfNotNull(typeReference, delegateExpression)
|
|
||||||
|
|
||||||
override val kind: UastSpecialExpressionKind get() = KotlinSpecialExpressionKinds.SUPER_DELEGATION
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
open class KotlinUClass private constructor(
|
open class KotlinUClass private constructor(
|
||||||
psi: KtLightClass,
|
psi: KtLightClass,
|
||||||
givenParent: UElement?
|
givenParent: UElement?
|
||||||
@@ -127,9 +105,9 @@ open class KotlinUClass private constructor(
|
|||||||
// filter DefaultImpls to avoid processing same methods from original interface multiple times
|
// filter DefaultImpls to avoid processing same methods from original interface multiple times
|
||||||
// filter Enum entry classes to avoid duplication with PsiEnumConstant initializer class
|
// filter Enum entry classes to avoid duplication with PsiEnumConstant initializer class
|
||||||
return psi.innerClasses.filter {
|
return psi.innerClasses.filter {
|
||||||
it.name != JvmAbi.DEFAULT_IMPLS_CLASS_NAME && !it.isEnumEntryLightClass()
|
it.name != JvmAbi.DEFAULT_IMPLS_CLASS_NAME && !it.isEnumEntryLightClass
|
||||||
}.mapNotNull {
|
}.mapNotNull {
|
||||||
getLanguagePlugin().convertOpt<UClass>(it, this)
|
languagePlugin?.convertOpt<UClass>(it, this)
|
||||||
}.toTypedArray()
|
}.toTypedArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,7 +127,7 @@ open class KotlinUClass private constructor(
|
|||||||
else
|
else
|
||||||
KotlinConstructorUMethod(ktClass, psiMethod, this)
|
KotlinConstructorUMethod(ktClass, psiMethod, this)
|
||||||
} else {
|
} else {
|
||||||
getLanguagePlugin().convertOpt(psiMethod, this) ?: reportConvertFailure(psiMethod)
|
languagePlugin?.convertOpt(psiMethod, this) ?: reportConvertFailure(psiMethod)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,13 +156,13 @@ open class KotlinUClass private constructor(
|
|||||||
|
|
||||||
ktDeclarations.asSequence()
|
ktDeclarations.asSequence()
|
||||||
.filterNot { handledKtDeclarations.contains(it) }
|
.filterNot { handledKtDeclarations.contains(it) }
|
||||||
.mapNotNullTo(result) { KotlinConverter.convertDeclaration(it, this, arrayOf(UElement::class.java)) as? UMethod }
|
.mapNotNullTo(result) {
|
||||||
|
baseResolveProviderService.baseKotlinConverter.convertDeclaration(it, this, arrayOf(UElement::class.java)) as? UMethod
|
||||||
|
}
|
||||||
|
|
||||||
return result.toTypedArray()
|
return result.toTypedArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun PsiClass.isEnumEntryLightClass() = (this as? KtLightClass)?.kotlinOrigin is KtEnumEntry
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun create(psi: KtLightClass, containingElement: UElement?): UClass = when (psi) {
|
fun create(psi: KtLightClass, containingElement: UElement?): UClass = when (psi) {
|
||||||
is PsiAnonymousClass -> KotlinUAnonymousClass(psi, containingElement)
|
is PsiAnonymousClass -> KotlinUAnonymousClass(psi, containingElement)
|
||||||
@@ -374,20 +352,3 @@ class KotlinInvalidUClass(
|
|||||||
|
|
||||||
override fun getOriginalElement(): PsiElement? = null
|
override fun getOriginalElement(): PsiElement? = null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun reportConvertFailure(psiMethod: PsiMethod): Nothing {
|
|
||||||
val isValid = psiMethod.isValid
|
|
||||||
val report = KotlinExceptionWithAttachments(
|
|
||||||
"cant convert $psiMethod of ${psiMethod.javaClass} to UMethod"
|
|
||||||
+ if (!isValid) " (method is not valid)" else ""
|
|
||||||
)
|
|
||||||
|
|
||||||
if (isValid) {
|
|
||||||
report.withAttachment("method", psiMethod.text)
|
|
||||||
psiMethod.containingFile?.let {
|
|
||||||
report.withAttachment("file", it.text)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
throw report
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user