From d7960caf89fb4fe8811d7ac4aa5246219f3258bd Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 17 Jul 2019 19:09:44 +0300 Subject: [PATCH] New J2K: move all symbols definitions to `symbols` package --- .../jetbrains/kotlin/nj2k/JKSymbolProvider.kt | 6 +- .../kotlin/nj2k/JavaToJKTreeBuilder.kt | 9 +- .../jetbrains/kotlin/nj2k/NewCodeBuilder.kt | 7 +- .../conversions/AddElementsInfoConversion.kt | 2 +- .../conversions/ArrayOperationsConversion.kt | 2 +- .../conversions/BuiltinMembersConversion.kt | 3 + .../conversions/CollectImportsConversion.kt | 4 +- .../conversions/DefaultArgumentsConversion.kt | 2 +- .../conversions/EnumFieldAccessConversion.kt | 6 +- .../conversions/EqualsOperatorConversion.kt | 2 +- .../kotlin/nj2k/conversions/ForConversion.kt | 1 + ...tionAsAnonymousObjectToLambdaConversion.kt | 2 +- .../conversions/ImplicitCastsConversion.kt | 4 +- .../ImplicitInitializerConversion.kt | 6 +- ...sertDefaultPrimaryConstructorConversion.kt | 2 + .../JavaStandardMethodsConversion.kt | 1 + .../MethodReferenceToLambdaConversion.kt | 1 + .../StaticMemberAccessConversion.kt | 6 +- .../nj2k/conversions/TypeMappingConversion.kt | 2 + .../org/jetbrains/kotlin/nj2k/expressions.kt | 1 + .../kotlin/nj2k/symbols/JKClassSymbol.kt | 32 ++ .../kotlin/nj2k/symbols/JKFieldSymbol.kt | 68 ++++ .../kotlin/nj2k/symbols/JKMethodSymbol.kt | 97 +++++ .../kotlin/nj2k/symbols/JKPackageSymbol.kt | 19 + .../jetbrains/kotlin/nj2k/symbols/JKSymbol.kt | 82 ++++ .../nj2k/symbols/JKTypeParameterSymbol.kt | 43 +++ .../jetbrains/kotlin/nj2k/symbols/utils.kt | 74 ++++ .../org/jetbrains/kotlin/nj2k/tree/impl/j.kt | 3 + .../org/jetbrains/kotlin/nj2k/tree/impl/jk.kt | 9 +- .../org/jetbrains/kotlin/nj2k/tree/impl/k.kt | 2 + .../kotlin/nj2k/tree/impl/symbols.kt | 365 ------------------ nj2k/src/org/jetbrains/kotlin/nj2k/tree/j.kt | 6 +- nj2k/src/org/jetbrains/kotlin/nj2k/tree/jk.kt | 18 +- .../org/jetbrains/kotlin/nj2k/tree/markers.kt | 4 +- .../org/jetbrains/kotlin/nj2k/tree/types.kt | 3 +- 35 files changed, 487 insertions(+), 407 deletions(-) create mode 100644 nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKClassSymbol.kt create mode 100644 nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKFieldSymbol.kt create mode 100644 nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKMethodSymbol.kt create mode 100644 nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKPackageSymbol.kt create mode 100644 nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKSymbol.kt create mode 100644 nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKTypeParameterSymbol.kt create mode 100644 nj2k/src/org/jetbrains/kotlin/nj2k/symbols/utils.kt delete mode 100644 nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/symbols.kt diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/JKSymbolProvider.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/JKSymbolProvider.kt index 1ae45817395..7ca93c4d6ba 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/JKSymbolProvider.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/JKSymbolProvider.kt @@ -12,8 +12,8 @@ import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.nj2k.conversions.JKResolver +import org.jetbrains.kotlin.nj2k.symbols.* import org.jetbrains.kotlin.nj2k.tree.* -import org.jetbrains.kotlin.nj2k.tree.impl.* import org.jetbrains.kotlin.psi.* @@ -43,7 +43,7 @@ class JKSymbolProvider(project: Project, module: Module, contextElement: PsiElem is KtParameter -> JKMultiversePropertySymbol(psi, this) is PsiParameter -> JKMultiverseFieldSymbol(psi, this) is PsiLocalVariable -> JKMultiverseFieldSymbol(psi, this) - is PsiPackage -> JKMultiversePackageSymbol(psi) + is PsiPackage -> JKMultiversePackageSymbol(psi, this) else -> TODO(psi::class.toString()) } @@ -89,7 +89,7 @@ class JKSymbolProvider(project: Project, module: Module, contextElement: PsiElem fun transferSymbol(to: JKDeclaration, from: JKDeclaration) = symbolsByJK[from]?.also { @Suppress("UNCHECKED_CAST") - it as JKUniverseSymbol + it as JKUniverseSymbol it.target = to symbolsByJK[to] = it } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt index 8d4f6976ecf..dacecffb911 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt @@ -41,7 +41,7 @@ import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName import org.jetbrains.kotlin.j2k.ReferenceSearcher import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.name.FqNameUnsafe +import org.jetbrains.kotlin.nj2k.symbols.* import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.JKLiteralExpression.LiteralType.* import org.jetbrains.kotlin.nj2k.tree.impl.* @@ -356,16 +356,17 @@ class JavaToJKTreeBuilder constructor( it.assignNonCodeElements(this) } } + fun PsiFunctionalExpression.functionalType(): JKTypeElement = functionalInterfaceType?.toJK(symbolProvider)?.takeUnless { type -> type.isKotlinFunctionType }?.asTypeElement() ?: JKTypeElementImpl(JKNoTypeImpl) fun PsiMethodReferenceExpression.toJK(): JKMethodReferenceExpression { - val symbol = symbolProvider.provideSymbolForReference(this).let { symbol -> + val symbol = symbolProvider.provideSymbolForReference(this).let { symbol -> when { - symbol.isUnresolved() && isConstructor -> JKUnresolvedClassSymbol(qualifier?.text ?: text) - symbol.isUnresolved() && !isConstructor -> JKUnresolvedMethod(referenceName ?: text) + symbol.isUnresolved && isConstructor -> JKUnresolvedClassSymbol(qualifier?.text ?: text) + symbol.isUnresolved && !isConstructor -> JKUnresolvedMethod(referenceName ?: text) else -> symbol } } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/NewCodeBuilder.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/NewCodeBuilder.kt index f6e876f30b7..c55ca251ecc 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/NewCodeBuilder.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/NewCodeBuilder.kt @@ -19,6 +19,8 @@ package org.jetbrains.kotlin.nj2k import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.nj2k.conversions.parentOfType +import org.jetbrains.kotlin.nj2k.symbols.JKClassSymbol +import org.jetbrains.kotlin.nj2k.symbols.getDisplayName import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitorWithCommentsPrinting @@ -173,7 +175,7 @@ class NewCodeBuilder(context: NewJ2kConverterContext) { } override fun visitFileRaw(file: JKFile) { - if (file.packageDeclaration.packageName.value.isNotEmpty()) { + if (file.packageDeclaration.name.value.isNotEmpty()) { file.packageDeclaration.accept(this) } file.importList.accept(this) @@ -183,8 +185,7 @@ class NewCodeBuilder(context: NewJ2kConverterContext) { override fun visitPackageDeclarationRaw(packageDeclaration: JKPackageDeclaration) { printer.printWithNoIndent("package ") - val packageNameEscaped = - packageDeclaration.packageName.value.escapedAsQualifiedName() + val packageNameEscaped = packageDeclaration.name.value.escapedAsQualifiedName() printer.printlnWithNoIndent(packageNameEscaped) } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/AddElementsInfoConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/AddElementsInfoConversion.kt index 6c33c3c12af..704ef496954 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/AddElementsInfoConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/AddElementsInfoConversion.kt @@ -10,8 +10,8 @@ import org.jetbrains.kotlin.idea.caches.resolve.util.getJavaMethodDescriptor import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi import org.jetbrains.kotlin.nj2k.* +import org.jetbrains.kotlin.nj2k.symbols.JKUniverseMethodSymbol import org.jetbrains.kotlin.nj2k.tree.* -import org.jetbrains.kotlin.nj2k.tree.impl.JKUniverseMethodSymbol import org.jetbrains.kotlin.nj2k.tree.impl.psi class AddElementsInfoConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() { diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ArrayOperationsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ArrayOperationsConversion.kt index 70bf89c95ba..4608fd52785 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ArrayOperationsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ArrayOperationsConversion.kt @@ -11,9 +11,9 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext +import org.jetbrains.kotlin.nj2k.symbols.JKUniverseFieldSymbol import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.JKFieldAccessExpressionImpl -import org.jetbrains.kotlin.nj2k.tree.impl.JKUniverseFieldSymbol import org.jetbrains.kotlin.utils.addToStdlib.safeAs diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt index 7cda151c978..d43cb38699d 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt @@ -8,6 +8,9 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.nj2k.* +import org.jetbrains.kotlin.nj2k.symbols.JKMethodSymbol +import org.jetbrains.kotlin.nj2k.symbols.JKUnresolvedField +import org.jetbrains.kotlin.nj2k.symbols.deepestFqName import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* import org.jetbrains.kotlin.utils.addToStdlib.cast diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/CollectImportsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/CollectImportsConversion.kt index b3d80c61ca2..350cef00ccf 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/CollectImportsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/CollectImportsConversion.kt @@ -12,9 +12,9 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext +import org.jetbrains.kotlin.nj2k.symbols.JKSymbol +import org.jetbrains.kotlin.nj2k.symbols.fqNameToImport import org.jetbrains.kotlin.nj2k.tree.* -import org.jetbrains.kotlin.nj2k.tree.impl.JKSymbol -import org.jetbrains.kotlin.nj2k.tree.impl.fqNameToImport import org.jetbrains.kotlin.utils.addToStdlib.safeAs diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/DefaultArgumentsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/DefaultArgumentsConversion.kt index dbc5644b853..4aa5e2d50ad 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/DefaultArgumentsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/DefaultArgumentsConversion.kt @@ -6,9 +6,9 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.nj2k.* +import org.jetbrains.kotlin.nj2k.symbols.JKUniverseMethodSymbol import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.JKFieldAccessExpressionImpl -import org.jetbrains.kotlin.nj2k.tree.impl.JKUniverseMethodSymbol import org.jetbrains.kotlin.nj2k.tree.impl.psi import org.jetbrains.kotlin.utils.addToStdlib.safeAs diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EnumFieldAccessConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EnumFieldAccessConversion.kt index 7f276fe26ca..263c0e7783b 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EnumFieldAccessConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EnumFieldAccessConversion.kt @@ -7,8 +7,12 @@ package org.jetbrains.kotlin.nj2k.conversions import com.intellij.psi.PsiEnumConstant import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext +import org.jetbrains.kotlin.nj2k.symbols.* import org.jetbrains.kotlin.nj2k.tree.* -import org.jetbrains.kotlin.nj2k.tree.impl.* +import org.jetbrains.kotlin.nj2k.tree.impl.JKClassAccessExpressionImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKFieldAccessExpressionImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKKtQualifierImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKQualifiedExpressionImpl import org.jetbrains.kotlin.psi.psiUtil.containingClass diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EqualsOperatorConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EqualsOperatorConversion.kt index 1cf00b51aac..88e9adb09ac 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EqualsOperatorConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EqualsOperatorConversion.kt @@ -7,9 +7,9 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.equalsExpression +import org.jetbrains.kotlin.nj2k.symbols.deepestFqName import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.JKParenthesizedExpressionImpl -import org.jetbrains.kotlin.nj2k.tree.impl.deepestFqName class EqualsOperatorConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ForConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ForConversion.kt index 0c33cce9098..4dca3a74372 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ForConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ForConversion.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.j2k.ReferenceSearcher import org.jetbrains.kotlin.j2k.hasWriteAccesses import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.nj2k.* +import org.jetbrains.kotlin.nj2k.symbols.deepestFqName import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* import kotlin.math.abs diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/FunctionAsAnonymousObjectToLambdaConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/FunctionAsAnonymousObjectToLambdaConversion.kt index 85cc546675b..299dc57c5c6 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/FunctionAsAnonymousObjectToLambdaConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/FunctionAsAnonymousObjectToLambdaConversion.kt @@ -5,9 +5,9 @@ package org.jetbrains.kotlin.nj2k.conversions +import org.jetbrains.kotlin.nj2k.symbols.JKClassSymbol import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.JKBlockStatementImpl -import org.jetbrains.kotlin.nj2k.tree.impl.JKClassSymbol import org.jetbrains.kotlin.nj2k.tree.impl.JKLambdaExpressionImpl import org.jetbrains.kotlin.utils.addToStdlib.safeAs diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt index 6469752b845..ecf09db135f 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt @@ -9,6 +9,8 @@ import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.copyTreeAndDetach import org.jetbrains.kotlin.nj2k.isEquals import org.jetbrains.kotlin.nj2k.parenthesizeIfBinaryExpression +import org.jetbrains.kotlin.nj2k.symbols.isUnresolved +import org.jetbrains.kotlin.nj2k.symbols.parameterTypesWithUnfoldedVarargs import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType @@ -78,7 +80,7 @@ class ImplicitCastsConversion(private val context: NewJ2kConverterContext) : Rec private fun convertMethodCallExpression(expression: JKMethodCallExpression) { - if (expression.identifier.isUnresolved()) return + if (expression.identifier.isUnresolved) return val parameterTypes = expression.identifier.parameterTypesWithUnfoldedVarargs() ?: return val newArguments = (expression.arguments.arguments.asSequence() zip parameterTypes) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitInitializerConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitInitializerConversion.kt index 1171132428e..5344615e7cb 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitInitializerConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitInitializerConversion.kt @@ -7,8 +7,12 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.findUsages +import org.jetbrains.kotlin.nj2k.symbols.JKMethodSymbol import org.jetbrains.kotlin.nj2k.tree.* -import org.jetbrains.kotlin.nj2k.tree.impl.* +import org.jetbrains.kotlin.nj2k.tree.impl.JKBooleanLiteral +import org.jetbrains.kotlin.nj2k.tree.impl.JKJavaLiteralExpressionImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKJavaPrimitiveTypeImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKNullLiteral class ImplicitInitializerConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() { diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/InsertDefaultPrimaryConstructorConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/InsertDefaultPrimaryConstructorConversion.kt index 7a44b028a40..77b6114823d 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/InsertDefaultPrimaryConstructorConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/InsertDefaultPrimaryConstructorConversion.kt @@ -6,6 +6,8 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext +import org.jetbrains.kotlin.nj2k.symbols.JKClassSymbol +import org.jetbrains.kotlin.nj2k.symbols.JKUniverseClassSymbol import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/JavaStandardMethodsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/JavaStandardMethodsConversion.kt index 7a39b0aeb79..08d37c10e30 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/JavaStandardMethodsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/JavaStandardMethodsConversion.kt @@ -9,6 +9,7 @@ import com.intellij.psi.PsiMethod import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext +import org.jetbrains.kotlin.nj2k.symbols.JKUnresolvedClassSymbol import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/MethodReferenceToLambdaConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/MethodReferenceToLambdaConversion.kt index c3a188db23e..ecd18ce2f91 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/MethodReferenceToLambdaConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/MethodReferenceToLambdaConversion.kt @@ -9,6 +9,7 @@ import com.intellij.lang.jvm.JvmModifier import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.nullIfStubExpression import org.jetbrains.kotlin.nj2k.qualified +import org.jetbrains.kotlin.nj2k.symbols.* import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/StaticMemberAccessConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/StaticMemberAccessConversion.kt index 5fee582809a..6c645a9baae 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/StaticMemberAccessConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/StaticMemberAccessConversion.kt @@ -13,8 +13,12 @@ import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.asQualifierWithThisAsSelector import org.jetbrains.kotlin.nj2k.copyTreeAndDetach import org.jetbrains.kotlin.nj2k.parentOfType +import org.jetbrains.kotlin.nj2k.symbols.JKClassSymbol +import org.jetbrains.kotlin.nj2k.symbols.JKSymbol import org.jetbrains.kotlin.nj2k.tree.* -import org.jetbrains.kotlin.nj2k.tree.impl.* +import org.jetbrains.kotlin.nj2k.tree.impl.JKClassAccessExpressionImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKKtQualifierImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKQualifiedExpressionImpl import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtObjectDeclaration diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/TypeMappingConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/TypeMappingConversion.kt index 1350d55fd5a..e28ee5e3af4 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/TypeMappingConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/TypeMappingConversion.kt @@ -16,6 +16,8 @@ import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.kotlinTypeByName +import org.jetbrains.kotlin.nj2k.symbols.JKClassSymbol +import org.jetbrains.kotlin.nj2k.symbols.JKUniverseClassSymbol import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/expressions.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/expressions.kt index 5fa8aa82825..d4cc522e313 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/expressions.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/expressions.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.nj2k.conversions.RecursiveApplicableConversionBase +import org.jetbrains.kotlin.nj2k.symbols.* import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* import org.jetbrains.kotlin.psi.KtNamedFunction diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKClassSymbol.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKClassSymbol.kt new file mode 100644 index 00000000000..62c734b26cd --- /dev/null +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKClassSymbol.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2019 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.kotlin.nj2k.symbols + +import com.intellij.psi.PsiClass +import org.jetbrains.kotlin.nj2k.JKSymbolProvider +import org.jetbrains.kotlin.nj2k.tree.JKClass +import org.jetbrains.kotlin.psi.KtClassOrObject + + +sealed class JKClassSymbol : JKSymbol + +class JKUniverseClassSymbol(override val symbolProvider: JKSymbolProvider) : JKClassSymbol(), JKUniverseSymbol { + override lateinit var target: JKClass + override val name: String + get() = target.name.value +} + +class JKMultiverseClassSymbol( + override val target: PsiClass, + override val symbolProvider: JKSymbolProvider +) : JKClassSymbol(), JKMultiverseSymbol + +class JKMultiverseKtClassSymbol( + override val target: KtClassOrObject, + override val symbolProvider: JKSymbolProvider +) : JKClassSymbol(), JKMultiverseKtSymbol + +class JKUnresolvedClassSymbol(override val target: String) : JKClassSymbol(), JKUnresolvedSymbol \ No newline at end of file diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKFieldSymbol.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKFieldSymbol.kt new file mode 100644 index 00000000000..84b67c13c48 --- /dev/null +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKFieldSymbol.kt @@ -0,0 +1,68 @@ +/* + * Copyright 2010-2019 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.kotlin.nj2k.symbols + + +import com.intellij.psi.PsiVariable +import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.j2k.ast.Nullability +import org.jetbrains.kotlin.nj2k.JKSymbolProvider +import org.jetbrains.kotlin.nj2k.tree.JKType +import org.jetbrains.kotlin.nj2k.tree.JKVariable +import org.jetbrains.kotlin.nj2k.tree.impl.JKClassTypeImpl +import org.jetbrains.kotlin.nj2k.tree.toJK +import org.jetbrains.kotlin.psi.KtCallableDeclaration +import org.jetbrains.kotlin.psi.KtEnumEntry +import org.jetbrains.kotlin.psi.psiUtil.containingClass + +sealed class JKFieldSymbol : JKSymbol { + abstract val fieldType: JKType? +} + +class JKUniverseFieldSymbol(override val symbolProvider: JKSymbolProvider) : JKFieldSymbol(), JKUniverseSymbol { + override val fieldType: JKType + get() = target.type.type + + override lateinit var target: JKVariable +} + +class JKMultiverseFieldSymbol( + override val target: PsiVariable, + override val symbolProvider: JKSymbolProvider +) : JKFieldSymbol(), JKMultiverseSymbol { + override val fieldType: JKType + get() = target.type.toJK(symbolProvider) +} + +class JKMultiversePropertySymbol( + override val target: KtCallableDeclaration, + override val symbolProvider: JKSymbolProvider +) : JKFieldSymbol(), JKMultiverseKtSymbol { + override val fieldType: JKType? + get() = target.typeReference?.toJK(symbolProvider) +} + +class JKMultiverseKtEnumEntrySymbol( + override val target: KtEnumEntry, + override val symbolProvider: JKSymbolProvider +) : JKFieldSymbol(), JKMultiverseKtSymbol { + override val fieldType: JKType? + get() = JKClassTypeImpl( + symbolProvider.provideDirectSymbol(target.containingClass()!!) as JKClassSymbol, + emptyList(), + Nullability.NotNull + ) +} + +class JKUnresolvedField( + override val target: String, + private val symbolProvider: JKSymbolProvider +) : JKFieldSymbol(), JKUnresolvedSymbol { + override val fieldType: JKType + get() = + JKClassTypeImpl(symbolProvider.provideClassSymbol(KotlinBuiltIns.FQ_NAMES.nothing.toSafe()), emptyList()) +} + diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKMethodSymbol.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKMethodSymbol.kt new file mode 100644 index 00000000000..068e15c1bd7 --- /dev/null +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKMethodSymbol.kt @@ -0,0 +1,97 @@ +/* + * Copyright 2010-2019 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.kotlin.nj2k.symbols + +import com.intellij.psi.PsiMethod +import com.intellij.psi.PsiReference +import org.jetbrains.kotlin.asJava.elements.KtLightMethod +import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.nj2k.JKSymbolProvider +import org.jetbrains.kotlin.nj2k.tree.JKClass +import org.jetbrains.kotlin.nj2k.tree.JKMethod +import org.jetbrains.kotlin.nj2k.tree.JKType +import org.jetbrains.kotlin.nj2k.tree.impl.JKClassTypeImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKNoTypeImpl +import org.jetbrains.kotlin.nj2k.tree.toJK +import org.jetbrains.kotlin.psi.KtFunction +import org.jetbrains.kotlin.utils.addToStdlib.safeAs + +sealed class JKMethodSymbol : JKSymbol { + abstract val receiverType: JKType? + abstract val parameterTypes: List? + abstract val returnType: JKType? +} + +class JKUniverseMethodSymbol(override val symbolProvider: JKSymbolProvider) : JKMethodSymbol(), JKUniverseSymbol { + override val receiverType: JKType? + get() = target.parent.safeAs()?.let { + JKClassTypeImpl(symbolProvider.provideUniverseSymbol(it), emptyList()/*TODO*/) + } + override val parameterTypes: List + get() = target.parameters.map { it.type.type } + override val returnType: JKType + get() = target.returnType.type + + override lateinit var target: JKMethod +} + +class JKMultiverseMethodSymbol( + override val target: PsiMethod, + override val symbolProvider: JKSymbolProvider +) : JKMethodSymbol(), JKMultiverseSymbol { + override val receiverType: JKType? + get() = target.containingClass?.let { + JKClassTypeImpl(symbolProvider.provideDirectSymbol(it) as JKClassSymbol, emptyList()/*TODO*/) + } + override val parameterTypes: List + get() = target.parameterList.parameters.map { it.type.toJK(symbolProvider) } + override val returnType: JKType + get() = target.returnType!!.toJK(symbolProvider) + + override val fqName: String + get() { + val kotlinFqName = super.fqName + return if (target is KtLightMethod) "$kotlinFqName.$name" else kotlinFqName + } +} + +class JKMultiverseFunctionSymbol( + override val target: KtFunction, + override val symbolProvider: JKSymbolProvider +) : JKMethodSymbol(), JKMultiverseKtSymbol { + override val receiverType: JKType? + get() = target.receiverTypeReference?.toJK(symbolProvider) + + @Suppress("UNCHECKED_CAST") + override val parameterTypes: List? + get() = target.valueParameters.map { parameter -> + val type = parameter.typeReference?.toJK(symbolProvider) + type?.let { + if (parameter.isVarArg) { + JKClassTypeImpl( + symbolProvider.provideClassSymbol(KotlinBuiltIns.FQ_NAMES.array.toSafe()), + listOf(it) + ) + } else it + } + }.takeIf { parameters -> parameters.all { it != null } } as? List + + override val returnType: JKType? + get() = target.typeReference?.toJK(symbolProvider) +} + +class JKUnresolvedMethod( + override val target: String, + override val returnType: JKType = JKNoTypeImpl +) : JKMethodSymbol(), JKUnresolvedSymbol { + constructor(target: PsiReference) : this(target.canonicalText) + + override val receiverType: JKType? + get() = null + override val parameterTypes: List + get() = emptyList() +} + diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKPackageSymbol.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKPackageSymbol.kt new file mode 100644 index 00000000000..e9942f14919 --- /dev/null +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKPackageSymbol.kt @@ -0,0 +1,19 @@ +/* + * Copyright 2010-2019 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.kotlin.nj2k.symbols + +import com.intellij.psi.PsiPackage +import org.jetbrains.kotlin.nj2k.JKSymbolProvider + + +sealed class JKPackageSymbol : JKSymbol { + abstract override val target: PsiPackage +} + +class JKMultiversePackageSymbol( + override val target: PsiPackage, + override val symbolProvider: JKSymbolProvider +) : JKPackageSymbol(), JKMultiverseSymbol \ No newline at end of file diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKSymbol.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKSymbol.kt new file mode 100644 index 00000000000..87b33ead678 --- /dev/null +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKSymbol.kt @@ -0,0 +1,82 @@ +/* + * Copyright 2010-2019 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.kotlin.nj2k.symbols + +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiMember +import com.intellij.psi.PsiNamedElement +import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName +import org.jetbrains.kotlin.nj2k.JKSymbolProvider +import org.jetbrains.kotlin.nj2k.conversions.parentOfType +import org.jetbrains.kotlin.nj2k.parentOfType +import org.jetbrains.kotlin.nj2k.tree.JKDeclaration +import org.jetbrains.kotlin.nj2k.tree.JKFile +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtNamedDeclaration + +interface JKSymbol { + val target: Any + val declaredIn: JKSymbol? + val fqName: String + val name: String +} + +interface JKUniverseSymbol : JKSymbol { + val symbolProvider: JKSymbolProvider + override var target: T + override val fqName: String + get() { + val qualifier = + declaredIn?.fqName + ?: target + .parentOfType() + ?.packageDeclaration + ?.name + ?.value + return qualifier?.takeIf { it.isNotBlank() }?.let { "$it." }.orEmpty() + name + } + + override val name: String + get() = target.name.value + + override val declaredIn: JKSymbol? + get() = target.parentOfType()?.let { symbolProvider.symbolsByJK[it] } +} + +interface JKMultiverseSymbol : JKSymbol where T : PsiNamedElement, T : PsiElement { + val symbolProvider: JKSymbolProvider + + override val target: T + override val declaredIn: JKSymbol? + get() = target.parentOfType()?.let { symbolProvider.provideDirectSymbol(it) } + override val fqName: String + get() = target.getKotlinFqName()?.asString() ?: name + override val name: String + get() = target.name!! +} + +interface JKMultiverseKtSymbol : JKSymbol { + val symbolProvider: JKSymbolProvider + + override val target: T + override val name: String + get() = target.name!! + override val declaredIn: JKSymbol? + get() = target.parentOfType()?.let { symbolProvider.provideDirectSymbol(it) } + override val fqName: String + get() = target.fqName?.asString() ?: name +} + +interface JKUnresolvedSymbol : JKSymbol { + override val target: String + override val declaredIn: JKSymbol? + get() = null + override val fqName: String + get() = target + override val name: String + get() = target.substringAfterLast(".") +} + diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKTypeParameterSymbol.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKTypeParameterSymbol.kt new file mode 100644 index 00000000000..29c21907a35 --- /dev/null +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/JKTypeParameterSymbol.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2010-2019 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.kotlin.nj2k.symbols + +import com.intellij.psi.PsiTypeParameter +import org.jetbrains.kotlin.nj2k.JKSymbolProvider +import org.jetbrains.kotlin.nj2k.tree.JKTypeParameter +import org.jetbrains.kotlin.nj2k.tree.JKTypeParameterListOwner +import org.jetbrains.kotlin.psi.KtTypeParameter +import org.jetbrains.kotlin.psi.KtTypeParameterListOwner +import org.jetbrains.kotlin.psi.psiUtil.getParentOfType +import org.jetbrains.kotlin.utils.addToStdlib.safeAs + +sealed class JKTypeParameterSymbol : JKSymbol { + abstract val index: Int +} + +class JKMultiverseTypeParameterSymbol( + override val target: PsiTypeParameter, + override val symbolProvider: JKSymbolProvider +) : JKTypeParameterSymbol(), JKMultiverseSymbol { + override val index: Int + get() = target.index +} + +class JKUniverseTypeParameterSymbol( + override val symbolProvider: JKSymbolProvider +) : JKTypeParameterSymbol(), JKUniverseSymbol { + override val index: Int + get() = declaredIn?.safeAs()?.typeParameterList?.typeParameters?.indexOf(target) ?: -1 + override lateinit var target: JKTypeParameter +} + +class JKMultiverseKtTypeParameterSymbol( + override val target: KtTypeParameter, + override val symbolProvider: JKSymbolProvider +) : JKTypeParameterSymbol(), JKMultiverseKtSymbol { + override val index: Int + get() = target.getParentOfType(strict = false)?.typeParameters?.indexOf(target) ?: -1 +} \ No newline at end of file diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/utils.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/utils.kt new file mode 100644 index 00000000000..3d90a170c43 --- /dev/null +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/symbols/utils.kt @@ -0,0 +1,74 @@ +/* + * Copyright 2010-2019 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.kotlin.nj2k.symbols + +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiMethod +import com.intellij.psi.PsiModifier +import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName +import org.jetbrains.kotlin.idea.search.declarationsSearch.findDeepestSuperMethodsNoWrapping +import org.jetbrains.kotlin.nj2k.tree.* +import org.jetbrains.kotlin.nj2k.tree.impl.psi +import org.jetbrains.kotlin.psi.KtNamedFunction +import org.jetbrains.kotlin.psi.KtObjectDeclaration +import org.jetbrains.kotlin.utils.addToStdlib.safeAs + + +val JKSymbol.isUnresolved + get() = this is JKUnresolvedSymbol + +fun JKSymbol.getDisplayName(): String { + if (this !is JKUniverseSymbol<*>) return fqName + return generateSequence(declaredIn as? JKUniverseClassSymbol) { symbol -> + symbol.declaredIn.safeAs()?.takeIf { !it.target.hasOtherModifier(OtherModifier.INNER) } + }.fold(name) { acc, symbol -> "${symbol.name}.$acc" } +} + +fun JKSymbol.fqNameToImport(): String? = + when { + this is JKClassSymbol && this !is JKUniverseClassSymbol -> fqName + else -> null + } + +fun JKSymbol.deepestFqName(): String? { + fun Any.deepestFqNameForTarget(): String? = + when (this) { + is PsiMethod -> (findDeepestSuperMethods().firstOrNull() ?: this).getKotlinFqName()?.asString() + is KtNamedFunction -> findDeepestSuperMethodsNoWrapping(this).firstOrNull()?.getKotlinFqName()?.asString() + is JKMethod -> psi()?.deepestFqNameForTarget() + else -> null + } + return target.deepestFqNameForTarget() ?: fqName +} + + +val JKMethodSymbol.parameterNames: List? + get() { + return when (this) { + is JKMultiverseFunctionSymbol -> target.valueParameters.map { it.name ?: return null } + is JKMultiverseMethodSymbol -> target.parameters.map { it.name ?: return null } + is JKUniverseMethodSymbol -> target.parameters.map { it.name.value } + is JKUnresolvedMethod -> null + } + } + + +val JKMethodSymbol.isStatic: Boolean + get() = when (this) { + is JKMultiverseFunctionSymbol -> target.parent is KtObjectDeclaration + is JKMultiverseMethodSymbol -> target.hasModifierProperty(PsiModifier.STATIC) + is JKUniverseMethodSymbol -> target.parent?.parent?.safeAs()?.classKind == JKClass.ClassKind.COMPANION + is JKUnresolvedMethod -> false + } + + +fun JKMethodSymbol.parameterTypesWithUnfoldedVarargs(): Sequence? { + val realParameterTypes = parameterTypes ?: return null + if (realParameterTypes.isEmpty()) return emptySequence() + val lastArrayType = realParameterTypes.last().arrayInnerType() ?: return realParameterTypes.asSequence() + return realParameterTypes.dropLast(1).asSequence() + generateSequence { lastArrayType } +} + diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/j.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/j.kt index fac98d18998..f1320fd67b5 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/j.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/j.kt @@ -21,6 +21,8 @@ import com.intellij.psi.impl.source.tree.ElementType.OPERATION_BIT_SET import com.intellij.psi.tree.IElementType import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.nj2k.symbols.JKClassSymbol +import org.jetbrains.kotlin.nj2k.symbols.JKMethodSymbol import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.JKLiteralExpression.LiteralType.* import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitor @@ -432,5 +434,6 @@ class JKKtAnnotationArrayInitializerExpressionImpl(initializers: List")) override fun accept(visitor: JKVisitor) = visitor.visitJavaStaticInitDeclaration(this) } \ No newline at end of file diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/jk.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/jk.kt index 4ab0977503b..33c53f8d3aa 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/jk.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/jk.kt @@ -16,18 +16,17 @@ package org.jetbrains.kotlin.nj2k.tree.impl -import com.intellij.psi.PsiClass import com.intellij.psi.PsiElement import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.nj2k.JKSymbolProvider +import org.jetbrains.kotlin.nj2k.symbols.* import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.JKLiteralExpression.LiteralType import org.jetbrains.kotlin.nj2k.tree.JKLiteralExpression.LiteralType.BOOLEAN import org.jetbrains.kotlin.nj2k.tree.JKLiteralExpression.LiteralType.NULL import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitor -import org.jetbrains.kotlin.psi.KtClass class JKTreeRootImpl(element: JKTreeElement) : JKTreeRoot, JKBranchElementBase() { override var element by child(element) @@ -527,8 +526,8 @@ fun JKStatement.isEmpty(): Boolean = else -> false } -class JKPackageDeclarationImpl(packageName: JKNameIdentifier) : JKPackageDeclaration() { - override var packageName: JKNameIdentifier by child(packageName) +class JKPackageDeclarationImpl(name: JKNameIdentifier) : JKPackageDeclaration() { + override var name: JKNameIdentifier by child(name) override fun accept(visitor: JKVisitor) = visitor.visitPackageDeclaration(this) } @@ -636,7 +635,7 @@ class JKOtherModifierElementImpl(override var otherModifier: OtherModifier) : JK class JKMethodReferenceExpressionImpl( qualifier: JKExpression, - override val identifier: JKNamedSymbol, + override val identifier: JKSymbol, functionalType: JKTypeElement, override val isConstructorCall: Boolean ) : JKMethodReferenceExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/k.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/k.kt index fb97d4cf580..7f205521b9c 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/k.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/k.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.nj2k.tree.impl import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.lexer.KtSingleValueToken +import org.jetbrains.kotlin.nj2k.symbols.JKMethodSymbol import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitor import org.jetbrains.kotlin.types.expressions.OperatorConventions @@ -259,6 +260,7 @@ class JKKtIsExpressionImpl(expression: JKExpression, type: JKTypeElement) : JKKt class JKKtInitDeclarationImpl(block: JKBlock) : JKKtInitDeclaration() { override var block: JKBlock by child(block) + override val name: JKNameIdentifier by child(JKNameIdentifierImpl("")) override fun accept(visitor: JKVisitor) = visitor.visitKtInitDeclaration(this) } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/symbols.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/symbols.kt deleted file mode 100644 index e14b1331765..00000000000 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/symbols.kt +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Copyright 2010-2018 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.kotlin.nj2k.tree.impl - -import com.intellij.psi.* -import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl -import org.jetbrains.kotlin.asJava.elements.KtLightMethod -import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName -import org.jetbrains.kotlin.idea.search.declarationsSearch.findDeepestSuperMethodsNoWrapping -import org.jetbrains.kotlin.j2k.ast.Nullability -import org.jetbrains.kotlin.nj2k.JKSymbolProvider -import org.jetbrains.kotlin.nj2k.conversions.parentOfType -import org.jetbrains.kotlin.nj2k.parentOfType -import org.jetbrains.kotlin.nj2k.tree.* -import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.containingClass -import org.jetbrains.kotlin.psi.psiUtil.getParentOfType -import org.jetbrains.kotlin.utils.addToStdlib.safeAs - -interface JKSymbol { - val target: Any - val declaredIn: JKSymbol? - val fqName: String -} - -interface JKUnresolvedSymbol : JKSymbol - -fun JKSymbol.isUnresolved() = - this is JKUnresolvedSymbol - -interface JKNamedSymbol : JKSymbol { - val name: String -} - -abstract class JKUniverseSymbol : JKNamedSymbol { - abstract override var target: T - protected abstract val symbolProvider: JKSymbolProvider - - override val declaredIn: JKSymbol? - get() = target.parentOfType()?.let { symbolProvider.symbolsByJK[it] } - override val fqName: String - get() { - val qualifier = - declaredIn?.fqName - ?: target - .parentOfType() - ?.packageDeclaration - ?.packageName - ?.value - return qualifier?.takeIf { it.isNotBlank() }?.let { "$it." }.orEmpty() + name - } -} - -fun JKSymbol.getDisplayName(): String { - if (this !is JKUniverseSymbol<*>) return fqName - return generateSequence(declaredIn as? JKUniverseClassSymbol) { symbol -> - symbol.declaredIn.safeAs()?.takeIf { !it.target.hasOtherModifier(OtherModifier.INNER) } - }.fold(name) { acc, symbol -> "${symbol.name}.$acc" } -} - -fun JKSymbol.fqNameToImport(): String? = - when { - this is JKClassSymbol && this !is JKUniverseClassSymbol -> fqName - else -> null - } - -interface JKClassSymbol : JKNamedSymbol - - -interface JKMethodSymbol : JKNamedSymbol { - override val fqName: String - val receiverType: JKType? - val parameterTypes: List? - val returnType: JKType? -} - -val JKMethodSymbol.parameterNames: List? - get() { - return when (this) { - is JKMultiverseFunctionSymbol -> target.valueParameters.map { it.name ?: return null } - is JKMultiverseMethodSymbol -> target.parameters.map { it.name ?: return null } - is JKUniverseMethodSymbol -> target.parameters.map { it.name.value } - is JKUnresolvedSymbol -> null - else -> null - } - } - - -val JKMethodSymbol.isStatic: Boolean - get() = when (this) { - is JKMultiverseFunctionSymbol -> target.parent is KtObjectDeclaration - is JKMultiverseMethodSymbol -> target.hasModifierProperty(PsiModifier.STATIC) - is JKUniverseMethodSymbol -> target.parent?.parent?.safeAs()?.classKind == JKClass.ClassKind.COMPANION - is JKUnresolvedSymbol -> false - else -> false - } - - -fun JKMethodSymbol.parameterTypesWithUnfoldedVarargs(): Sequence? { - val realParameterTypes = parameterTypes ?: return null - if (realParameterTypes.isEmpty()) return emptySequence() - val lastArrayType = realParameterTypes.last().arrayInnerType() ?: return realParameterTypes.asSequence() - return realParameterTypes.dropLast(1).asSequence() + generateSequence { lastArrayType } -} - - -interface JKFieldSymbol : JKNamedSymbol { - override val fqName: String - val fieldType: JKType? -} - -class JKUniverseClassSymbol(override val symbolProvider: JKSymbolProvider) : JKClassSymbol, JKUniverseSymbol() { - override lateinit var target: JKClass - override val name: String - get() = target.name.value -} - -class JKMultiverseClassSymbol( - override val target: PsiClass, - private val symbolProvider: JKSymbolProvider -) : JKClassSymbol { - override val declaredIn: JKSymbol? - get() = target.parentOfType()?.let { symbolProvider.provideDirectSymbol(it) } - - override val fqName: String - get() = target.getKotlinFqName()?.asString() ?: target.qualifiedName ?: name - - override val name: String - get() = target.name!! -} - -class JKMultiverseKtClassSymbol( - override val target: KtClassOrObject, - private val symbolProvider: JKSymbolProvider -) : JKClassSymbol { - override val name: String - get() = target.name!! - override val declaredIn: JKSymbol? - get() = target.parentOfType()?.let { symbolProvider.provideDirectSymbol(it) } - override val fqName: String - get() = target.fqName?.asString() ?: name -} - -class JKUniverseMethodSymbol(override val symbolProvider: JKSymbolProvider) : JKMethodSymbol, JKUniverseSymbol() { - override val receiverType: JKType? - get() = (target.parent as? JKClass)?.let { - JKClassTypeImpl(symbolProvider.provideUniverseSymbol(it), emptyList()/*TODO*/) - } - override val parameterTypes: List - get() = target.parameters.map { it.type.type } - override val returnType: JKType - get() = target.returnType.type - override val name: String - get() = target.name.value - - override lateinit var target: JKMethod -} - -class JKMultiverseMethodSymbol(override val target: PsiMethod, private val symbolProvider: JKSymbolProvider) : JKMethodSymbol { - override val receiverType: JKType? - get() = target.containingClass?.let { - JKClassTypeImpl(symbolProvider.provideDirectSymbol(it) as JKClassSymbol, emptyList()/*TODO*/) - } - override val parameterTypes: List - get() = target.parameterList.parameters.map { it.type.toJK(symbolProvider) } - override val returnType: JKType - get() = target.returnType!!.toJK(symbolProvider) - override val name: String - get() = target.name - override val declaredIn: JKSymbol? - get() = target.containingClass?.let { symbolProvider.provideDirectSymbol(it) } - override val fqName: String - get() { - val kotlinFqName = target.getKotlinFqName()?.asString() ?: return name - return if (target is KtLightMethod) "$kotlinFqName.$name" else kotlinFqName - } -} - -class JKMultiverseFunctionSymbol(override val target: KtFunction, private val symbolProvider: JKSymbolProvider) : JKMethodSymbol { - override val receiverType: JKType? - get() = target.receiverTypeReference?.toJK(symbolProvider) - @Suppress("UNCHECKED_CAST") - override val parameterTypes: List? - get() = target.valueParameters.map { parameter -> - val type = parameter.typeReference?.toJK(symbolProvider) - type?.let { - if (parameter.isVarArg) { - JKClassTypeImpl( - symbolProvider.provideClassSymbol(KotlinBuiltIns.FQ_NAMES.array.toSafe()), - listOf(it) - ) - } else it - } - }.takeIf { parameters -> parameters.all { it != null } } as? List - - override val returnType: JKType? - get() = target.typeReference?.toJK(symbolProvider) - override val name: String - get() = target.name!! - override val declaredIn: JKSymbol - get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. - override val fqName: String - get() = target.fqName?.asString() ?: target.name!! -} - -class JKUniverseFieldSymbol(override val symbolProvider: JKSymbolProvider) : JKFieldSymbol, JKUniverseSymbol() { - override val fieldType: JKType - get() = target.type.type - override val name: String - get() = target.name.value - override lateinit var target: JKVariable -} - -class JKMultiverseFieldSymbol(override val target: PsiVariable, private val symbolProvider: JKSymbolProvider) : JKFieldSymbol { - override val fieldType: JKType - get() = target.type.toJK(symbolProvider) - override val name: String - get() = target.name!! - override val declaredIn: JKSymbol - get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. - override val fqName: String - get() = target.getKotlinFqName()?.asString() ?: target.name!! -} - -class JKMultiversePropertySymbol(override val target: KtCallableDeclaration, private val symbolProvider: JKSymbolProvider) : JKFieldSymbol { - override val fieldType: JKType? - get() = target.typeReference?.toJK(symbolProvider) - override val name: String - get() = target.name!! - override val declaredIn: JKSymbol - get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. - override val fqName: String - get() = target.fqName!!.asString() -} - -class JKMultiverseKtEnumEntrySymbol(override val target: KtEnumEntry, private val symbolProvider: JKSymbolProvider) : JKFieldSymbol { - override val fieldType: JKType? - get() = JKClassTypeImpl( - symbolProvider.provideDirectSymbol(target.containingClass()!!) as JKClassSymbol, - emptyList(), - Nullability.NotNull - ) - override val name: String - get() = target.name!! - override val declaredIn: JKSymbol - get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. - override val fqName: String - get() = target.fqName!!.asString() -} - -class JKUnresolvedField(override val target: String, private val symbolProvider: JKSymbolProvider) : JKFieldSymbol, JKUnresolvedSymbol { - override val fieldType: JKType - get() { - val resolvedType = (target as? PsiReferenceExpressionImpl)?.type - if (resolvedType != null) return resolvedType.toJK(symbolProvider) - return JKClassTypeImpl(symbolProvider.provideClassSymbol(KotlinBuiltIns.FQ_NAMES.nothing.toSafe()), emptyList()) - } - override val declaredIn: JKSymbol - get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. - override val fqName: String = target - override val name: String - get() = target.substringAfterLast('.') -} - -class JKUnresolvedMethod( - override val target: String, - override val returnType: JKType = JKNoTypeImpl -) : JKMethodSymbol, JKUnresolvedSymbol { - constructor(target: PsiReference) : this(target.canonicalText) - - override val declaredIn: JKSymbol - get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. - override val fqName: String = target - override val receiverType: JKType? - get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. - override val parameterTypes: List - get() = TODO(target) //To change initializer of created properties use File | Settings | File Templates. - override val name: String - get() = target.substringAfterLast('.') -} - -class JKUnresolvedClassSymbol(override val target: String) : JKClassSymbol, JKUnresolvedSymbol { - override val declaredIn: JKSymbol - get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. - override val fqName: String - get() = target - - override val name: String - get() = target.substringAfterLast('.') -} - -interface JKPackageSymbol : JKNamedSymbol { - override val target: PsiPackage -} - -class JKMultiversePackageSymbol(override val target: PsiPackage) : JKPackageSymbol { - override val declaredIn - get() = TODO("not implemented") - - override val name: String - get() = target.name.orEmpty() - - override val fqName: String - get() = target.qualifiedName -} - - -fun JKSymbol.deepestFqName(): String? { - fun Any.deepestFqNameForTarget(): String? = - when (this) { - is PsiMethod -> (findDeepestSuperMethods().firstOrNull() ?: this).getKotlinFqName()?.asString() - is KtNamedFunction -> findDeepestSuperMethodsNoWrapping(this).firstOrNull()?.getKotlinFqName()?.asString() - is JKMethod -> psi()?.deepestFqNameForTarget() - else -> null - } - return target.deepestFqNameForTarget() ?: fqName -} - -interface JKTypeParameterSymbol : JKSymbol { - val index: Int - val name: String -} - -class JKMultiverseTypeParameterSymbol( - override val target: PsiTypeParameter, - private val symbolProvider: JKSymbolProvider -) : JKTypeParameterSymbol { - override val declaredIn: JKSymbol? - get() = target.owner?.let { symbolProvider.provideDirectSymbol(it) } - override val fqName: String - get() = target.getKotlinFqName()?.asString()!! - override val index: Int - get() = target.index - override val name: String - get() = target.name!! -} - -class JKUniverseTypeParameterSymbol( - override val symbolProvider: JKSymbolProvider -) : JKTypeParameterSymbol, JKUniverseSymbol() { - override val index: Int - get() = declaredIn?.safeAs()?.typeParameterList?.typeParameters?.indexOf(target) ?: -1 - override val name: String - get() = target.name.value - override lateinit var target: JKTypeParameter -} - -class JKMultiverseKtTypeParameterSymbol( - override val target: KtTypeParameter, - private val symbolProvider: JKSymbolProvider -) : JKTypeParameterSymbol { - override val declaredIn: JKSymbol? - get() = target.getParentOfType(strict = false) - ?.let { symbolProvider.provideDirectSymbol(it) } - override val fqName: String - get() = target.getKotlinFqName()?.asString()!! - override val index: Int - get() = target.getParentOfType(strict = false)?.typeParameters?.indexOf(target) ?: -1 - override val name: String - get() = target.name!! -} \ No newline at end of file diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/j.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/j.kt index d1802d31df5..1779f351bfa 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/j.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/j.kt @@ -16,7 +16,11 @@ package org.jetbrains.kotlin.nj2k.tree -import org.jetbrains.kotlin.nj2k.tree.impl.* +import org.jetbrains.kotlin.nj2k.symbols.JKClassSymbol +import org.jetbrains.kotlin.nj2k.tree.impl.JKBranchElementBase +import org.jetbrains.kotlin.nj2k.tree.impl.JKModalityModifierElementImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKTokenElementImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKVisibilityModifierElementImpl abstract class JKField : JKVariable(), JKVisibilityOwner, JKMutabilityOwner, JKModalityOwner, JKOtherModifiersOwner, JKAnnotationListOwner diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/jk.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/jk.kt index 932365c5bf6..f68e930433a 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/jk.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/jk.kt @@ -17,7 +17,10 @@ package org.jetbrains.kotlin.nj2k.tree import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.nj2k.tree.impl.* +import org.jetbrains.kotlin.nj2k.symbols.* +import org.jetbrains.kotlin.nj2k.tree.impl.JKBranchElementBase +import org.jetbrains.kotlin.nj2k.tree.impl.JKSpaceElementImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKTokenElementImpl import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitor interface JKTreeElement : JKElement, JKNonCodeElementsListOwner { @@ -36,6 +39,7 @@ interface PsiOwner { abstract class JKDeclaration : JKTreeElement, JKBranchElementBase() { override var rightNonCodeElements: List = listOf(JKSpaceElementImpl("\n")) + abstract val name: JKNameIdentifier } interface JKImportStatement : JKTreeElement { @@ -55,10 +59,7 @@ interface JKFile : JKTreeElement, JKBranchElement { abstract class JKClass : JKDeclaration(), JKVisibilityOwner, JKOtherModifiersOwner, JKModalityOwner, JKTypeParameterListOwner, JKAnnotationListOwner, JKBranchElement { - abstract val name: JKNameIdentifier - abstract val inheritance: JKInheritanceInfo - abstract var classBody: JKClassBody abstract var classKind: ClassKind @@ -105,7 +106,6 @@ interface JKAnnotationListOwner : JKTreeElement { abstract class JKMethod : JKDeclaration(), JKVisibilityOwner, JKModalityOwner, JKOtherModifiersOwner, JKTypeParameterListOwner, JKAnnotationListOwner { - abstract val name: JKNameIdentifier abstract var parameters: List abstract var returnType: JKTypeElement abstract var block: JKBlock @@ -116,7 +116,6 @@ abstract class JKMethod : JKDeclaration(), JKVisibilityOwner, JKModalityOwner, J abstract class JKVariable : JKDeclaration(), JKAnnotationListOwner { abstract var type: JKTypeElement - abstract var name: JKNameIdentifier abstract var initializer: JKExpression } @@ -285,7 +284,7 @@ interface JKExpression : JKTreeElement, JKAnnotationMemberValue interface JKMethodReferenceExpression : JKExpression, PsiOwner { val qualifier: JKExpression - val identifier: JKNamedSymbol + val identifier: JKSymbol val functionalType: JKTypeElement val isConstructorCall: Boolean } @@ -487,7 +486,6 @@ interface JKTypeParameterList : JKTreeElement { } abstract class JKTypeParameter : JKDeclaration() { - abstract var name: JKNameIdentifier abstract var upperBounds: List } @@ -506,9 +504,7 @@ abstract class JKForInStatement : JKStatement() { abstract var body: JKStatement } -abstract class JKPackageDeclaration : JKDeclaration() { - abstract var packageName: JKNameIdentifier -} +abstract class JKPackageDeclaration : JKDeclaration() interface JKClassLiteralExpression : JKExpression { val classType: JKTypeElement diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/markers.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/markers.kt index b345700607a..d6b36f2778c 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/markers.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/markers.kt @@ -17,9 +17,9 @@ package org.jetbrains.kotlin.nj2k.tree import org.jetbrains.kotlin.j2k.ast.Nullability +import org.jetbrains.kotlin.nj2k.symbols.JKClassSymbol +import org.jetbrains.kotlin.nj2k.symbols.JKTypeParameterSymbol import org.jetbrains.kotlin.nj2k.tree.impl.JKBranchElementBase -import org.jetbrains.kotlin.nj2k.tree.impl.JKClassSymbol -import org.jetbrains.kotlin.nj2k.tree.impl.JKTypeParameterSymbol import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType import kotlin.jvm.internal.CallableReference import kotlin.reflect.KProperty0 diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/types.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/types.kt index 23b17135c9a..a95291a0532 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/types.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/types.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.nj2k.tree import com.intellij.psi.* import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.PrimitiveType -import org.jetbrains.kotlin.builtins.getFunctionalClassKind import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze @@ -17,9 +16,9 @@ import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.js.descriptorUtils.getJetTypeFqName import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.nj2k.JKSymbolProvider import org.jetbrains.kotlin.nj2k.kotlinTypeByName +import org.jetbrains.kotlin.nj2k.symbols.* import org.jetbrains.kotlin.nj2k.tree.impl.* import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtTypeParameter