New J2K: Fixed few bugs in conversions and symbols improvements.
This commit is contained in:
@@ -19,7 +19,7 @@ class JKSymbolProvider {
|
||||
files.forEach { it.accept(elementVisitor) }
|
||||
}
|
||||
|
||||
fun provideSymbol(psi: PsiElement): JKSymbol {
|
||||
fun provideDirectSymbol(psi: PsiElement): JKSymbol {
|
||||
return symbols.getOrPut(psi) {
|
||||
when (psi) {
|
||||
is PsiClass -> JKMultiverseClassSymbol(psi)
|
||||
@@ -31,6 +31,12 @@ class JKSymbolProvider {
|
||||
}
|
||||
}
|
||||
|
||||
fun provideSymbol(reference: PsiReference): JKSymbol {
|
||||
val target = reference.resolve()
|
||||
if (target != null) return provideDirectSymbol(target)
|
||||
TODO()
|
||||
}
|
||||
|
||||
fun provideLocalVarSymbol(psi: PsiLocalVariable, variable: JKLocalVariable): JKSymbol {
|
||||
return symbols.getOrPut(psi) { JKUniverseFieldSymbol(variable) }
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
val method = methodExpression as PsiReferenceExpressionImpl
|
||||
|
||||
val call = JKJavaMethodCallExpressionImpl(
|
||||
symbolProvider.provideSymbol(method.reference?.resolve() ?: TODO()) as JKMethodSymbol, argumentList.toJK()
|
||||
symbolProvider.provideSymbol(method) as JKMethodSymbol, argumentList.toJK()
|
||||
)
|
||||
return if (method.findChildByRole(ChildRole.DOT) != null) {
|
||||
JKQualifiedExpressionImpl((method.qualifier as PsiExpression).toJK(), JKJavaQualifierImpl.DOT, call)
|
||||
@@ -127,7 +127,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
return JKNullLiteral() // TODO !!!
|
||||
}
|
||||
|
||||
val access = JKJavaFieldAccessExpressionImpl(symbolProvider.provideSymbol(impl.resolve() ?: TODO()) as JKFieldSymbol)
|
||||
val access = JKJavaFieldAccessExpressionImpl(symbolProvider.provideSymbol(impl) as JKFieldSymbol)
|
||||
return when {
|
||||
impl.findChildByRole(ChildRole.DOT) != null &&
|
||||
(impl.qualifierExpression as? PsiReferenceExpression)?.resolve() !is PsiClass ->
|
||||
@@ -164,13 +164,13 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
val constructor = constructorFakeReference.resolve()
|
||||
if (constructor == null && constructedClass != null) {
|
||||
return JKJavaDefaultNewExpressionImpl(
|
||||
symbolProvider.provideSymbol(constructedClass) as JKClassSymbol
|
||||
symbolProvider.provideDirectSymbol(constructedClass) as JKClassSymbol
|
||||
|
||||
)
|
||||
}
|
||||
|
||||
return JKJavaNewExpressionImpl(
|
||||
symbolProvider.provideSymbol(constructor!!) as JKMethodSymbol,
|
||||
symbolProvider.provideDirectSymbol(constructor!!) as JKMethodSymbol,
|
||||
argumentList.toJK()
|
||||
)
|
||||
}
|
||||
@@ -204,7 +204,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
val parameters = parameters.map { it.toJK() }
|
||||
if (target != null) {
|
||||
JKClassTypeImpl(
|
||||
target.let { symbolProvider.provideSymbol(it) as JKClassSymbol },
|
||||
target.let { symbolProvider.provideDirectSymbol(it) as JKClassSymbol },
|
||||
parameters
|
||||
)
|
||||
} else {
|
||||
@@ -233,7 +233,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
it.declarationList = psi.children.mapNotNull {
|
||||
ElementVisitor(this@DeclarationMapper).apply { it.accept(this) }.resultElement as? JKDeclaration
|
||||
}
|
||||
(symbolProvider.provideSymbol(psi) as? JKUniverseClassSymbol)?.run { target = it }
|
||||
(symbolProvider.provideDirectSymbol(psi) as? JKUniverseClassSymbol)?.run { target = it }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -244,7 +244,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
JKNameIdentifierImpl(name),
|
||||
with(expressionTreeMapper) { initializer.toJK() }
|
||||
).also {
|
||||
(symbolProvider.provideSymbol(this) as? JKUniverseFieldSymbol)?.run { target = it }
|
||||
(symbolProvider.provideDirectSymbol(this) as? JKUniverseFieldSymbol)?.run { target = it }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,7 +260,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
parameterList.parameters.map { it -> it.toJK() },
|
||||
body?.toJK() ?: JKBodyStub
|
||||
).also {
|
||||
(symbolProvider.provideSymbol(this) as? JKUniverseMethodSymbol)?.run { target = it }
|
||||
(symbolProvider.provideDirectSymbol(this) as? JKUniverseMethodSymbol)?.run { target = it }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ class AssignmentAsExpressionToAlsoConversion(val context: ConversionContext) : R
|
||||
//if (element.parent)
|
||||
|
||||
val alsoElement = resolveFqName(ClassId.fromString("kotlin/also"), element, context) ?: return recurse(element)
|
||||
val alsoSymbol = context.symbolProvider.provideSymbol(alsoElement) as? JKMethodSymbol ?: return recurse(element)
|
||||
val alsoSymbol = context.symbolProvider.provideDirectSymbol(alsoElement) as? JKMethodSymbol ?: return recurse(element)
|
||||
element.invalidate()
|
||||
|
||||
return JKQualifiedExpressionImpl(
|
||||
|
||||
@@ -17,7 +17,7 @@ abstract class MatchBasedConversion : BaseConversion() {
|
||||
val child = iter.next()
|
||||
|
||||
if (child is List<*>) {
|
||||
applyRecursiveToList(element, child as List<JKTreeElement>, iter, func)
|
||||
iter.set(applyRecursiveToList(element, child as List<JKTreeElement>, iter, func))
|
||||
} else if (child is JKTreeElement) {
|
||||
val newChild = func(child)
|
||||
if (child !== newChild) {
|
||||
@@ -39,7 +39,7 @@ abstract class MatchBasedConversion : BaseConversion() {
|
||||
child: List<JKTreeElement>,
|
||||
iter: MutableListIterator<Any>,
|
||||
func: (JKTreeElement) -> JKTreeElement
|
||||
) {
|
||||
): List<JKTreeElement> {
|
||||
|
||||
val newChild = child.map {
|
||||
func(it)
|
||||
@@ -53,6 +53,7 @@ abstract class MatchBasedConversion : BaseConversion() {
|
||||
onElementChanged(new, old)
|
||||
}
|
||||
}
|
||||
return newChild
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -12,11 +12,10 @@ class ModifiersConversion : RecursiveApplicableConversionBase() {
|
||||
|
||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||
return if (element is JKModifierList) element.also {
|
||||
var modifiers = it.modifiers
|
||||
if (element.parent !is JKLocalVariable && !modifiers.filter { it is JKJavaAccessModifier }.any()) {
|
||||
modifiers += JKKtModifierImpl(JKKtModifier.KtModifierType.INTERNAL)
|
||||
if (element.parent !is JKLocalVariable && !it.modifiers.filter { it is JKJavaAccessModifier }.any()) {
|
||||
it.modifiers += JKKtModifierImpl(JKKtModifier.KtModifierType.INTERNAL)
|
||||
}
|
||||
it.modifiers = mapModifiers(modifiers)
|
||||
it.modifiers = mapModifiers(it.modifiers)
|
||||
} else recurse(element)
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl
|
||||
contextElement ?: return null
|
||||
val newTarget = resolveFqName(fqName, contextElement) as? KtClassOrObject ?: return null
|
||||
|
||||
return JKClassTypeImpl(context.symbolProvider.provideSymbol(newTarget) as JKClassSymbol, parameters, nullability)
|
||||
return JKClassTypeImpl(context.symbolProvider.provideDirectSymbol(newTarget) as JKClassSymbol, parameters, nullability)
|
||||
}
|
||||
|
||||
private fun mapClassType(type: JKClassType, typeElement: JKTypeElement): JKTypeElement {
|
||||
|
||||
Reference in New Issue
Block a user