[Symbol LC] add test for declaration parents
This commit is contained in:
+29
-3
@@ -14,10 +14,12 @@ import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassM
|
||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.services.AssertionsService
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
import org.jetbrains.kotlin.test.services.assertions
|
||||
import java.nio.file.Path
|
||||
|
||||
abstract class AbstractSymbolLightClassesAnnotationOwnerTest(
|
||||
abstract class AbstractSymbolLightClassesParentingTest(
|
||||
configurator: AnalysisApiTestConfigurator,
|
||||
override val currentExtension: String,
|
||||
override val stopIfCompilationErrorDirectivePresent: Boolean,
|
||||
@@ -28,18 +30,19 @@ abstract class AbstractSymbolLightClassesAnnotationOwnerTest(
|
||||
val ktFile = ktFiles.first()
|
||||
val lightClass = findLightClass(fqName, ktFile.project)
|
||||
|
||||
lightClass?.accept(lightAnnotationVisitor)
|
||||
lightClass?.accept(createLightAnnotationVisitor(testServices.assertions))
|
||||
}
|
||||
|
||||
override fun getRenderResult(ktFile: KtFile, testDataFile: Path, module: TestModule, project: Project): String {
|
||||
throw IllegalStateException("This test is not rendering light elements")
|
||||
}
|
||||
|
||||
private val lightAnnotationVisitor = object : JavaElementVisitor() {
|
||||
private fun createLightAnnotationVisitor(assertions: AssertionsService) = object : JavaElementVisitor() {
|
||||
private val declarationStack = ArrayDeque<PsiModifierListOwner>()
|
||||
|
||||
override fun visitClass(aClass: PsiClass?) {
|
||||
if (aClass == null) return
|
||||
checkDeclarationParent(aClass)
|
||||
declarationStack.addLast(aClass)
|
||||
|
||||
aClass.annotations.forEach { it.accept(this) }
|
||||
@@ -55,6 +58,7 @@ abstract class AbstractSymbolLightClassesAnnotationOwnerTest(
|
||||
|
||||
override fun visitField(field: PsiField?) {
|
||||
if (field == null) return
|
||||
checkDeclarationParent(field)
|
||||
declarationStack.addLast(field)
|
||||
|
||||
field.annotations.forEach { it.accept(this) }
|
||||
@@ -66,6 +70,7 @@ abstract class AbstractSymbolLightClassesAnnotationOwnerTest(
|
||||
|
||||
override fun visitMethod(method: PsiMethod?) {
|
||||
if (method == null) return
|
||||
checkDeclarationParent(method)
|
||||
declarationStack.addLast(method)
|
||||
|
||||
method.annotations.forEach { it.accept(this) }
|
||||
@@ -80,6 +85,7 @@ abstract class AbstractSymbolLightClassesAnnotationOwnerTest(
|
||||
|
||||
override fun visitParameter(parameter: PsiParameter?) {
|
||||
if (parameter == null) return
|
||||
checkDeclarationParent(parameter)
|
||||
declarationStack.addLast(parameter)
|
||||
|
||||
parameter.annotations.forEach { it.accept(this) }
|
||||
@@ -89,6 +95,7 @@ abstract class AbstractSymbolLightClassesAnnotationOwnerTest(
|
||||
|
||||
override fun visitTypeParameter(classParameter: PsiTypeParameter?) {
|
||||
if (classParameter == null) return
|
||||
checkDeclarationParent(classParameter)
|
||||
declarationStack.addLast(classParameter)
|
||||
|
||||
classParameter.annotations.forEach { it.accept(this) }
|
||||
@@ -96,6 +103,25 @@ abstract class AbstractSymbolLightClassesAnnotationOwnerTest(
|
||||
declarationStack.removeLast()
|
||||
}
|
||||
|
||||
private fun checkDeclarationParent(declaration: PsiElement) {
|
||||
val expectedParent = declarationStack.lastOrNull() ?: return
|
||||
val parent = when (declaration) {
|
||||
is PsiParameter -> {
|
||||
val parameterList = declaration.parent as PsiParameterList
|
||||
parameterList.parent
|
||||
}
|
||||
is PsiTypeParameter -> {
|
||||
val parameterList = declaration.parent as PsiTypeParameterList
|
||||
parameterList.parent
|
||||
}
|
||||
else -> declaration.parent
|
||||
}
|
||||
assertions.assertNotNull(parent) { "Parent should not be null for ${declaration::class} with text ${declaration.text} "}
|
||||
assertions.assertEquals(expectedParent, parent) {
|
||||
"Unexpected parent for ${declaration::class} with text ${declaration.text}"
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitAnnotation(annotation: PsiAnnotation?) {
|
||||
if (annotation == null) return
|
||||
|
||||
+3
-3
@@ -5,11 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.light.classes.symbol.decompiled
|
||||
|
||||
import org.jetbrains.kotlin.light.classes.symbol.base.AbstractSymbolLightClassesAnnotationOwnerTest
|
||||
import org.jetbrains.kotlin.light.classes.symbol.base.AbstractSymbolLightClassesParentingTest
|
||||
import org.jetbrains.kotlin.light.classes.symbol.decompiled.test.configurators.AnalysisApiSymbolLightClassesDecompiledTestConfigurator
|
||||
|
||||
abstract class AbstractSymbolLightClassesAnnotationOwnerForLibraryTest :
|
||||
AbstractSymbolLightClassesAnnotationOwnerTest(
|
||||
abstract class AbstractSymbolLightClassesParentingForLibraryTest :
|
||||
AbstractSymbolLightClassesParentingTest(
|
||||
AnalysisApiSymbolLightClassesDecompiledTestConfigurator,
|
||||
EXTENSIONS.LIB_JAVA,
|
||||
stopIfCompilationErrorDirectivePresent = true
|
||||
+1
-1
@@ -18,7 +18,7 @@ import java.util.regex.Pattern;
|
||||
@SuppressWarnings("all")
|
||||
@TestMetadata("compiler/testData/asJava/lightClasses")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class SymbolLightClassesAnnotationOwnerForLibraryTestGenerated extends AbstractSymbolLightClassesAnnotationOwnerForLibraryTest {
|
||||
public class SymbolLightClassesParentingForLibraryTestGenerated extends AbstractSymbolLightClassesParentingForLibraryTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInLightClasses() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/lightClasses"), Pattern.compile("^([^.]+)\\.kt$"), null, true, "compilationErrors");
|
||||
+3
-3
@@ -6,10 +6,10 @@
|
||||
package org.jetbrains.kotlin.light.classes.symbol.source
|
||||
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator
|
||||
import org.jetbrains.kotlin.light.classes.symbol.base.AbstractSymbolLightClassesAnnotationOwnerTest
|
||||
import org.jetbrains.kotlin.light.classes.symbol.base.AbstractSymbolLightClassesParentingTest
|
||||
|
||||
abstract class AbstractSymbolLightClassesAnnotationOwnerForSourceTest :
|
||||
AbstractSymbolLightClassesAnnotationOwnerTest(
|
||||
abstract class AbstractSymbolLightClassesParentingForSourceTest :
|
||||
AbstractSymbolLightClassesParentingTest(
|
||||
AnalysisApiFirSourceTestConfigurator(analyseInDependentSession = false),
|
||||
EXTENSIONS.FIR_JAVA,
|
||||
stopIfCompilationErrorDirectivePresent = false
|
||||
+1
-1
@@ -18,7 +18,7 @@ import java.util.regex.Pattern;
|
||||
@SuppressWarnings("all")
|
||||
@TestMetadata("compiler/testData/asJava/lightClasses")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class SymbolLightClassesAnnotationOwnerForSourceTestGenerated extends AbstractSymbolLightClassesAnnotationOwnerForSourceTest {
|
||||
public class SymbolLightClassesParentingForSourceTestGenerated extends AbstractSymbolLightClassesParentingForSourceTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInLightClasses() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/lightClasses"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
|
||||
+4
-4
@@ -7,11 +7,11 @@ package org.jetbrains.kotlin.generators.tests.analysis.api
|
||||
|
||||
import org.jetbrains.kotlin.generators.TestGroupSuite
|
||||
import org.jetbrains.kotlin.generators.util.TestGeneratorUtil
|
||||
import org.jetbrains.kotlin.light.classes.symbol.decompiled.AbstractSymbolLightClassesAnnotationOwnerForLibraryTest
|
||||
import org.jetbrains.kotlin.light.classes.symbol.decompiled.AbstractSymbolLightClassesParentingForLibraryTest
|
||||
import org.jetbrains.kotlin.light.classes.symbol.decompiled.AbstractSymbolLightClassesFacadeForLibraryTest
|
||||
import org.jetbrains.kotlin.light.classes.symbol.decompiled.AbstractSymbolLightClassesForLibraryTest
|
||||
import org.jetbrains.kotlin.light.classes.symbol.decompiled.AbstractSymbolLightClassesLoadingForLibraryTest
|
||||
import org.jetbrains.kotlin.light.classes.symbol.source.AbstractSymbolLightClassesAnnotationOwnerForSourceTest
|
||||
import org.jetbrains.kotlin.light.classes.symbol.source.AbstractSymbolLightClassesParentingForSourceTest
|
||||
import org.jetbrains.kotlin.light.classes.symbol.source.AbstractSymbolLightClassesFacadeForSourceTest
|
||||
import org.jetbrains.kotlin.light.classes.symbol.source.AbstractSymbolLightClassesForSourceTest
|
||||
import org.jetbrains.kotlin.light.classes.symbol.source.AbstractSymbolLightClassesLoadingForSourceTest
|
||||
@@ -37,14 +37,14 @@ internal fun TestGroupSuite.generateSymbolLightClassesTests() {
|
||||
)
|
||||
}
|
||||
|
||||
testClass<AbstractSymbolLightClassesAnnotationOwnerForSourceTest> {
|
||||
testClass<AbstractSymbolLightClassesParentingForSourceTest> {
|
||||
model(
|
||||
"asJava/lightClasses",
|
||||
pattern = TestGeneratorUtil.KT_WITHOUT_DOTS_IN_NAME
|
||||
)
|
||||
}
|
||||
|
||||
testClass<AbstractSymbolLightClassesAnnotationOwnerForLibraryTest> {
|
||||
testClass<AbstractSymbolLightClassesParentingForLibraryTest> {
|
||||
model(
|
||||
"asJava/lightClasses",
|
||||
excludeDirs = listOf("compilationErrors"),
|
||||
|
||||
Reference in New Issue
Block a user