mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Java-Uast: lazy fix for some forgotten classes
This commit is contained in:
@@ -223,7 +223,7 @@ internal object JavaConverter {
|
||||
requiredType.isAssignableFrom(UQualifiedReferenceExpression::class.java) ||
|
||||
requiredType.isAssignableFrom(UCallExpression::class.java)) {
|
||||
val expr = JavaUCompositeQualifiedExpression(el, givenParent).apply {
|
||||
receiver = convertOrEmpty(el.methodExpression.qualifierExpression!!, this)
|
||||
receiverInitializer = { convertOrEmpty(el.methodExpression.qualifierExpression!!, this) }
|
||||
selector = JavaUCallExpression(el, this)
|
||||
}
|
||||
if (requiredType?.isAssignableFrom(UCallExpression::class.java) == true)
|
||||
|
||||
@@ -23,7 +23,12 @@ import com.intellij.psi.PsiJavaCodeReferenceElement
|
||||
import org.jetbrains.uast.*
|
||||
import org.jetbrains.uast.java.internal.JavaUElementWithComments
|
||||
|
||||
abstract class AbstractJavaUClass : UClass, JavaUElementWithComments {
|
||||
abstract class AbstractJavaUClass(givenParent: UElement?) : JavaAbstractUElement(givenParent), UClass, JavaUElementWithComments {
|
||||
|
||||
@Suppress("unused") // Used in Kotlin, to be removed in 2018.1
|
||||
@Deprecated("use AbstractJavaUClass(givenParent)", ReplaceWith("AbstractJavaUClass(givenParent)"))
|
||||
constructor() : this(null)
|
||||
|
||||
override val uastDeclarations by lz {
|
||||
mutableListOf<UDeclaration>().apply {
|
||||
addAll(fields)
|
||||
@@ -55,7 +60,7 @@ abstract class AbstractJavaUClass : UClass, JavaUElementWithComments {
|
||||
}
|
||||
|
||||
class JavaUClass private constructor(psi: PsiClass, override val uastParent: UElement?) :
|
||||
AbstractJavaUClass(), PsiClass by psi {
|
||||
AbstractJavaUClass(uastParent), PsiClass by psi {
|
||||
override val psi = unwrap<UClass, PsiClass>(psi)
|
||||
|
||||
override fun getSuperClass(): UClass? = super.getSuperClass()
|
||||
@@ -76,8 +81,8 @@ class JavaUClass private constructor(psi: PsiClass, override val uastParent: UEl
|
||||
|
||||
class JavaUAnonymousClass(
|
||||
psi: PsiAnonymousClass,
|
||||
override val uastParent: UElement?
|
||||
) : AbstractJavaUClass(), UAnonymousClass, PsiAnonymousClass by psi {
|
||||
uastParent: UElement?
|
||||
) : AbstractJavaUClass(uastParent), UAnonymousClass, PsiAnonymousClass by psi {
|
||||
override val psi: PsiAnonymousClass = unwrap<UAnonymousClass, PsiAnonymousClass>(psi)
|
||||
|
||||
override fun getSuperClass(): UClass? = super<AbstractJavaUClass>.getSuperClass()
|
||||
|
||||
@@ -22,8 +22,8 @@ import org.jetbrains.uast.java.internal.JavaUElementWithComments
|
||||
|
||||
class JavaUClassInitializer(
|
||||
psi: PsiClassInitializer,
|
||||
override val uastParent: UElement?
|
||||
) : UClassInitializer, JavaUElementWithComments, PsiClassInitializer by psi {
|
||||
uastParent: UElement?
|
||||
) : JavaAbstractUElement(uastParent), UClassInitializer, JavaUElementWithComments, PsiClassInitializer by psi {
|
||||
override val psi = unwrap<UClassInitializer, PsiClassInitializer>(psi)
|
||||
|
||||
override val uastAnchor: UElement?
|
||||
|
||||
@@ -21,8 +21,8 @@ import org.jetbrains.uast.UImportStatement
|
||||
|
||||
class JavaUImportStatement(
|
||||
override val psi: PsiImportStatementBase,
|
||||
override val uastParent: UElement?
|
||||
) : UImportStatement {
|
||||
uastParent: UElement?
|
||||
) : JavaAbstractUElement(uastParent), UImportStatement {
|
||||
override val isOnDemand: Boolean
|
||||
get() = psi.isOnDemand
|
||||
override val importReference by lz { psi.importReference?.let { JavaDumbUElement(it, this, it.qualifiedName) } }
|
||||
|
||||
@@ -24,8 +24,8 @@ import org.jetbrains.uast.java.internal.JavaUElementWithComments
|
||||
|
||||
open class JavaUMethod(
|
||||
psi: PsiMethod,
|
||||
override val uastParent: UElement?
|
||||
) : UMethod, JavaUElementWithComments, PsiMethod by psi {
|
||||
uastParent: UElement?
|
||||
) : JavaAbstractUElement(uastParent), UMethod, JavaUElementWithComments, PsiMethod by psi {
|
||||
override val psi = unwrap<UMethod, PsiMethod>(psi)
|
||||
|
||||
override val uastBody by lz {
|
||||
|
||||
+4
-2
@@ -23,8 +23,10 @@ class JavaUCompositeQualifiedExpression(
|
||||
override val psi: PsiElement,
|
||||
givenParent: UElement?
|
||||
) : JavaAbstractUExpression(givenParent), UQualifiedReferenceExpression {
|
||||
override lateinit var receiver: UExpression
|
||||
internal set
|
||||
|
||||
lateinit internal var receiverInitializer: () -> UExpression
|
||||
|
||||
override val receiver: UExpression by lazy { receiverInitializer() }
|
||||
|
||||
override lateinit var selector: UExpression
|
||||
internal set
|
||||
|
||||
+2
-2
@@ -22,8 +22,8 @@ import org.jetbrains.uast.UDeclarationsExpression
|
||||
import org.jetbrains.uast.UElement
|
||||
|
||||
class JavaUDeclarationsExpression(
|
||||
override val uastParent: UElement?
|
||||
) : UDeclarationsExpression {
|
||||
uastParent: UElement?
|
||||
) : JavaAbstractUElement(uastParent), UDeclarationsExpression {
|
||||
override lateinit var declarations: List<UDeclaration>
|
||||
internal set
|
||||
|
||||
|
||||
@@ -22,8 +22,8 @@ import org.jetbrains.uast.UExpression
|
||||
|
||||
class UnknownJavaExpression(
|
||||
override val psi: PsiElement,
|
||||
override val uastParent: UElement?
|
||||
) : UExpression {
|
||||
uastParent: UElement?
|
||||
) : JavaAbstractUElement(uastParent), UExpression {
|
||||
override fun asLogString() = "[!] " + UnknownJavaExpression::class.java.simpleName + " ($psi)"
|
||||
|
||||
override val annotations: List<UAnnotation>
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.intellij.psi.PsiElementVisitor
|
||||
import com.intellij.testFramework.PlatformTestUtil
|
||||
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
|
||||
import junit.framework.TestCase
|
||||
import org.jetbrains.uast.UQualifiedReferenceExpression
|
||||
import org.jetbrains.uast.toUElement
|
||||
import org.junit.Test
|
||||
|
||||
@@ -21,6 +22,10 @@ class JavaUastPerformanceTest : LightCodeInsightFixtureTestCase() {
|
||||
identityChecksum = 31 * identityChecksum + System.identityHashCode(uElement)
|
||||
}
|
||||
|
||||
when (uElement) {
|
||||
is UQualifiedReferenceExpression -> uElement.receiver // force lazy evaluation
|
||||
}
|
||||
|
||||
element.acceptChildren(this)
|
||||
}
|
||||
}
|
||||
@@ -38,7 +43,7 @@ class JavaUastPerformanceTest : LightCodeInsightFixtureTestCase() {
|
||||
}
|
||||
""".trimIndent())
|
||||
val nonCachedWalk = EachPsiToUastWalker().apply {
|
||||
PlatformTestUtil.startPerformanceTest("convert each element to uast first time", 4000) {
|
||||
PlatformTestUtil.startPerformanceTest("convert each element to uast first time", 2000) {
|
||||
clazz.accept(this)
|
||||
TestCase.assertEquals(expectedUElementsCount, totalCount)
|
||||
}.attempts(1).assertTiming()
|
||||
|
||||
Reference in New Issue
Block a user