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