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