From d7179d929fc5f8806256817f869f74032a9f2eb0 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 22 Dec 2022 18:39:48 +0100 Subject: [PATCH] [LC] add isEquivalentTo implementation so LC can be referenced from java otherwise references from java to ktElements won't be treated as references, cause java references resolve to light elements and search can/should be called on ktElements --- .../classes/SymbolLightClassForClassLike.kt | 7 +- .../classes/SymbolLightClassForEnumEntry.kt | 5 ++ ...ymbolLightClassForInterfaceDefaultImpls.kt | 4 + ...htClassForRepeatableAnnotationContainer.kt | 4 + .../fields/SymbolLightFieldForEnumEntry.kt | 5 ++ .../fields/SymbolLightFieldForProperty.kt | 9 ++- .../symbol/methods/SymbolLightMethod.kt | 8 ++ .../parameters/SymbolLightTypeParameter.kt | 4 +- .../light/classes/symbol/symbolLightUtils.kt | 5 ++ .../testData/equivalentTo/AnnotationClass.kt | 2 + .../testData/equivalentTo/AnonymousClass.kt | 4 + .../equivalentTo/CompanionProperty.kt | 6 ++ .../testData/equivalentTo/Constructor.kt | 6 ++ .../testData/equivalentTo/EnumClassEntry.kt | 8 ++ .../testData/equivalentTo/Function.kt | 2 + .../testData/equivalentTo/Interface.kt | 2 + .../testData/equivalentTo/Klass.kt | 2 + .../testData/equivalentTo/TypeParameter.kt | 2 + .../AbstractSymbolLightClassesEqualityTest.kt | 34 ++++++++ ...mbolLightClassesEqualityTestGenerated.java | 80 +++++++++++++++++++ .../tests/analysis/api/lightClasses.kt | 7 ++ 21 files changed, 199 insertions(+), 7 deletions(-) create mode 100644 analysis/symbol-light-classes/testData/equivalentTo/AnnotationClass.kt create mode 100644 analysis/symbol-light-classes/testData/equivalentTo/AnonymousClass.kt create mode 100644 analysis/symbol-light-classes/testData/equivalentTo/CompanionProperty.kt create mode 100644 analysis/symbol-light-classes/testData/equivalentTo/Constructor.kt create mode 100644 analysis/symbol-light-classes/testData/equivalentTo/EnumClassEntry.kt create mode 100644 analysis/symbol-light-classes/testData/equivalentTo/Function.kt create mode 100644 analysis/symbol-light-classes/testData/equivalentTo/Interface.kt create mode 100644 analysis/symbol-light-classes/testData/equivalentTo/Klass.kt create mode 100644 analysis/symbol-light-classes/testData/equivalentTo/TypeParameter.kt create mode 100644 analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesEqualityTest.kt create mode 100644 analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/SymbolLightClassesEqualityTestGenerated.java diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassLike.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassLike.kt index ad46dadf30d..1c251266b2b 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassLike.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassLike.kt @@ -154,8 +154,11 @@ abstract class SymbolLightClassForClassLike prote override fun getNavigationElement(): PsiElement = classOrObjectDeclaration ?: this override fun isEquivalentTo(another: PsiElement?): Boolean = - basicIsEquivalentTo(this, another) || - another is PsiClass && qualifiedName != null && another.qualifiedName == qualifiedName + isEquivalentToByName(another) || + isOriginEquivalentTo(another) + + protected fun isEquivalentToByName(another: PsiElement?): Boolean = basicIsEquivalentTo(this, another) || + another is PsiClass && qualifiedName != null && another.qualifiedName == qualifiedName override fun equals(other: Any?): Boolean { if (this === other) return true diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForEnumEntry.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForEnumEntry.kt index e33ead15cb8..b0655f4e610 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForEnumEntry.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForEnumEntry.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.light.classes.symbol.codeReferences.SymbolLightPsiJavaCodeReferenceElementWithNoReference import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry +import org.jetbrains.kotlin.light.classes.symbol.isOriginEquivalentTo import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind import org.jetbrains.kotlin.psi.KtEnumEntry @@ -44,6 +45,10 @@ internal class SymbolLightClassForEnumEntry( override fun toString(): String = "SymbolLightClassForEnumEntry:$name" + override fun isEquivalentTo(another: PsiElement?): Boolean { + return super.isEquivalentTo(another) || isOriginEquivalentTo(another) + } + private val _modifierList: PsiModifierList by lazyPub { SymbolLightClassModifierList( containingDeclaration = this, diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForInterfaceDefaultImpls.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForInterfaceDefaultImpls.kt index 9c0d721c39e..ab151a8b0ad 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForInterfaceDefaultImpls.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForInterfaceDefaultImpls.kt @@ -24,6 +24,10 @@ internal class SymbolLightClassForInterfaceDefaultImpls(private val containingCl override fun copy() = SymbolLightClassForInterfaceDefaultImpls(containingClass) + override fun isEquivalentTo(another: PsiElement?): Boolean { + return isEquivalentToByName(another) + } + override fun equals(other: Any?): Boolean = this === other || other is SymbolLightClassForInterfaceDefaultImpls && other.containingClass == containingClass diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForRepeatableAnnotationContainer.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForRepeatableAnnotationContainer.kt index 4badbc5b15c..5858ca473ee 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForRepeatableAnnotationContainer.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForRepeatableAnnotationContainer.kt @@ -62,6 +62,10 @@ internal class SymbolLightClassForRepeatableAnnotationContainer(private val cont override fun copy(): SymbolLightClassForRepeatableAnnotationContainer = SymbolLightClassForRepeatableAnnotationContainer(containerOwner) + override fun isEquivalentTo(another: PsiElement?): Boolean { + return isEquivalentToByName(another) + } + override fun equals(other: Any?): Boolean = this === other || other is SymbolLightClassForRepeatableAnnotationContainer && other.containerOwner == containerOwner diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForEnumEntry.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForEnumEntry.kt index 35ce424daa5..531fcfd8249 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForEnumEntry.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForEnumEntry.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.light.classes.symbol.analyzeForLightClasses import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForClassOrObject import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForEnumEntry +import org.jetbrains.kotlin.light.classes.symbol.isOriginEquivalentTo import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList import org.jetbrains.kotlin.light.classes.symbol.nonExistentType import org.jetbrains.kotlin.psi.KtEnumEntry @@ -46,6 +47,10 @@ internal class SymbolLightFieldForEnumEntry( } } + override fun isEquivalentTo(another: PsiElement?): Boolean { + return super.isEquivalentTo(another) || isOriginEquivalentTo(another) + } + override fun getModifierList(): PsiModifierList = _modifierList override val kotlinOrigin: KtEnumEntry = enumEntry diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt index 8beefaf7014..4f4efb06557 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt @@ -5,10 +5,7 @@ package org.jetbrains.kotlin.light.classes.symbol.fields -import com.intellij.psi.PsiExpression -import com.intellij.psi.PsiModifier -import com.intellij.psi.PsiModifierList -import com.intellij.psi.PsiType +import com.intellij.psi.* import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue import org.jetbrains.kotlin.analysis.api.annotations.hasAnnotation @@ -87,6 +84,10 @@ internal class SymbolLightFieldForProperty private constructor( } } + override fun isEquivalentTo(another: PsiElement?): Boolean { + return super.isEquivalentTo(another) || isOriginEquivalentTo(another) + } + override fun isDeprecated(): Boolean = _isDeprecated override fun getType(): PsiType = _returnedType diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt index ef6ede425fa..a5a18907d53 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.light.classes.symbol.methods +import com.intellij.psi.PsiElement import com.intellij.psi.PsiIdentifier import com.intellij.psi.PsiParameterList import com.intellij.psi.impl.light.LightReferenceListBuilder @@ -21,6 +22,7 @@ import org.jetbrains.kotlin.light.classes.symbol.annotations.computeThrowsList import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase import org.jetbrains.kotlin.light.classes.symbol.compareSymbolPointers +import org.jetbrains.kotlin.light.classes.symbol.isOriginEquivalentTo import org.jetbrains.kotlin.light.classes.symbol.isValid import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameter import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList @@ -135,6 +137,12 @@ internal abstract class SymbolLightMethod private override fun isValid(): Boolean = super.isValid() && functionDeclaration?.isValid ?: functionSymbolPointer.isValid(ktModule) + override fun isOverride(): Boolean = withFunctionSymbol { it.getDirectlyOverriddenSymbols().isNotEmpty() } + + override fun isEquivalentTo(another: PsiElement?): Boolean { + return super.isEquivalentTo(another) || isOriginEquivalentTo(another) + } + override fun equals(other: Any?): Boolean { if (this === other) return true if (other !is SymbolLightMethod<*> || diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameter.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameter.kt index 26155b59dfb..77c8c201e16 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameter.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameter.kt @@ -186,7 +186,9 @@ internal class SymbolLightTypeParameter private constructor( } override fun hashCode(): Int = typeParameterDeclaration?.hashCode() ?: name.hashCode() - override fun isEquivalentTo(another: PsiElement): Boolean = basicIsEquivalentTo(this, another) + override fun isEquivalentTo(another: PsiElement): Boolean { + return basicIsEquivalentTo(this, another) || isOriginEquivalentTo(another) + } override fun getText(): String? = typeParameterDeclaration?.text override fun getTextRange(): TextRange? = typeParameterDeclaration?.textRange diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt index f9912445147..5d4ae516f29 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.types.* import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.asJava.elements.KtLightElement +import org.jetbrains.kotlin.asJava.elements.KtLightElementBase import org.jetbrains.kotlin.asJava.elements.KtLightMember import org.jetbrains.kotlin.asJava.elements.psiType import org.jetbrains.kotlin.descriptors.Modality @@ -115,6 +116,10 @@ internal fun basicIsEquivalentTo(`this`: PsiElement?, that: PsiElement?): Boolea return thisMemberOrigin.isEquivalentTo(thatMemberOrigin) } +internal fun KtLightElement<*, *>.isOriginEquivalentTo(that: PsiElement?): Boolean { + return kotlinOrigin?.isEquivalentTo(that) == true +} + internal fun KtAnalysisSession.getTypeNullability(ktType: KtType): NullabilityType { if (ktType.nullabilityType != NullabilityType.NotNull) return ktType.nullabilityType diff --git a/analysis/symbol-light-classes/testData/equivalentTo/AnnotationClass.kt b/analysis/symbol-light-classes/testData/equivalentTo/AnnotationClass.kt new file mode 100644 index 00000000000..1892801add4 --- /dev/null +++ b/analysis/symbol-light-classes/testData/equivalentTo/AnnotationClass.kt @@ -0,0 +1,2 @@ +// org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForAnnotationClass +annotation class FooBar \ No newline at end of file diff --git a/analysis/symbol-light-classes/testData/equivalentTo/AnonymousClass.kt b/analysis/symbol-light-classes/testData/equivalentTo/AnonymousClass.kt new file mode 100644 index 00000000000..f9a2b7ac2bc --- /dev/null +++ b/analysis/symbol-light-classes/testData/equivalentTo/AnonymousClass.kt @@ -0,0 +1,4 @@ +// org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForAnonymousObject +val f = object : I {} + +interface I {} \ No newline at end of file diff --git a/analysis/symbol-light-classes/testData/equivalentTo/CompanionProperty.kt b/analysis/symbol-light-classes/testData/equivalentTo/CompanionProperty.kt new file mode 100644 index 00000000000..ff70248ac0c --- /dev/null +++ b/analysis/symbol-light-classes/testData/equivalentTo/CompanionProperty.kt @@ -0,0 +1,6 @@ +// org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForProperty +class FooBar { + companion object { + var foo : String = "" + } +} \ No newline at end of file diff --git a/analysis/symbol-light-classes/testData/equivalentTo/Constructor.kt b/analysis/symbol-light-classes/testData/equivalentTo/Constructor.kt new file mode 100644 index 00000000000..ee4fabae5b8 --- /dev/null +++ b/analysis/symbol-light-classes/testData/equivalentTo/Constructor.kt @@ -0,0 +1,6 @@ +// org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightConstructor +class FooBar { + constructor() { + + } +} \ No newline at end of file diff --git a/analysis/symbol-light-classes/testData/equivalentTo/EnumClassEntry.kt b/analysis/symbol-light-classes/testData/equivalentTo/EnumClassEntry.kt new file mode 100644 index 00000000000..218a0221ae2 --- /dev/null +++ b/analysis/symbol-light-classes/testData/equivalentTo/EnumClassEntry.kt @@ -0,0 +1,8 @@ +// org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForEnumEntry +enum class FooBar { + EnumClassEntry { + fun foo() { + + } + } +} \ No newline at end of file diff --git a/analysis/symbol-light-classes/testData/equivalentTo/Function.kt b/analysis/symbol-light-classes/testData/equivalentTo/Function.kt new file mode 100644 index 00000000000..f0522123fa6 --- /dev/null +++ b/analysis/symbol-light-classes/testData/equivalentTo/Function.kt @@ -0,0 +1,2 @@ +// org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightSimpleMethod +fun fooBar() {} \ No newline at end of file diff --git a/analysis/symbol-light-classes/testData/equivalentTo/Interface.kt b/analysis/symbol-light-classes/testData/equivalentTo/Interface.kt new file mode 100644 index 00000000000..417db61d43f --- /dev/null +++ b/analysis/symbol-light-classes/testData/equivalentTo/Interface.kt @@ -0,0 +1,2 @@ +// org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForInterface +interface FooBar \ No newline at end of file diff --git a/analysis/symbol-light-classes/testData/equivalentTo/Klass.kt b/analysis/symbol-light-classes/testData/equivalentTo/Klass.kt new file mode 100644 index 00000000000..e9ab5e67354 --- /dev/null +++ b/analysis/symbol-light-classes/testData/equivalentTo/Klass.kt @@ -0,0 +1,2 @@ +// org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForClassOrObject +class FooBar \ No newline at end of file diff --git a/analysis/symbol-light-classes/testData/equivalentTo/TypeParameter.kt b/analysis/symbol-light-classes/testData/equivalentTo/TypeParameter.kt new file mode 100644 index 00000000000..cea1ca5dd67 --- /dev/null +++ b/analysis/symbol-light-classes/testData/equivalentTo/TypeParameter.kt @@ -0,0 +1,2 @@ +// org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightTypeParameter +interface FooBar<T> \ No newline at end of file diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesEqualityTest.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesEqualityTest.kt new file mode 100644 index 00000000000..209848faad6 --- /dev/null +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesEqualityTest.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.light.classes.symbol.base + +import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedSingleModuleTest +import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider +import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator +import org.jetbrains.kotlin.asJava.LightClassTestCommon +import org.jetbrains.kotlin.asJava.toLightElements +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.test.model.TestModule +import org.jetbrains.kotlin.test.services.TestServices +import org.jetbrains.kotlin.test.services.assertions + +abstract class AbstractSymbolLightClassesEqualityTest : AbstractAnalysisApiBasedSingleModuleTest() { + override fun doTestByFileStructure(ktFiles: List, module: TestModule, testServices: TestServices) { + val lightQName = LightClassTestCommon.fqNameInTestDataFile(testDataPath.toFile()) + val ktFile = ktFiles.first() + val declaration = testServices.expressionMarkerProvider.getElementOfTypeAtCaret(ktFile) + val lightElements = declaration.toLightElements() + testServices.assertions.assertFalse(lightElements.isEmpty()) + val lightElement = lightElements.find { it.javaClass.name == lightQName } + testServices.assertions.assertNotNull(lightElement) { "Expected $lightQName, got: " + lightElements.joinToString { it::class.java.name } } + testServices.assertions.assertTrue(lightElement!!.isEquivalentTo(declaration)) { "Light element is not equivalent to the corresponding ktElement" } + } + + override val configurator: AnalysisApiTestConfigurator + get() = AnalysisApiFirSourceTestConfigurator(analyseInDependentSession = false) +} \ No newline at end of file diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/SymbolLightClassesEqualityTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/SymbolLightClassesEqualityTestGenerated.java new file mode 100644 index 00000000000..501df9eae88 --- /dev/null +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/SymbolLightClassesEqualityTestGenerated.java @@ -0,0 +1,80 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.light.classes.symbol.base; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("analysis/symbol-light-classes/testData/equivalentTo") +@TestDataPath("$PROJECT_ROOT") +public class SymbolLightClassesEqualityTestGenerated extends AbstractSymbolLightClassesEqualityTest { + @Test + public void testAllFilesPresentInEquivalentTo() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/symbol-light-classes/testData/equivalentTo"), Pattern.compile("^(.+)\\.(kt)$"), null, true); + } + + @Test + @TestMetadata("AnnotationClass.kt") + public void testAnnotationClass() throws Exception { + runTest("analysis/symbol-light-classes/testData/equivalentTo/AnnotationClass.kt"); + } + + @Test + @TestMetadata("AnonymousClass.kt") + public void testAnonymousClass() throws Exception { + runTest("analysis/symbol-light-classes/testData/equivalentTo/AnonymousClass.kt"); + } + + @Test + @TestMetadata("CompanionProperty.kt") + public void testCompanionProperty() throws Exception { + runTest("analysis/symbol-light-classes/testData/equivalentTo/CompanionProperty.kt"); + } + + @Test + @TestMetadata("Constructor.kt") + public void testConstructor() throws Exception { + runTest("analysis/symbol-light-classes/testData/equivalentTo/Constructor.kt"); + } + + @Test + @TestMetadata("EnumClassEntry.kt") + public void testEnumClassEntry() throws Exception { + runTest("analysis/symbol-light-classes/testData/equivalentTo/EnumClassEntry.kt"); + } + + @Test + @TestMetadata("Function.kt") + public void testFunction() throws Exception { + runTest("analysis/symbol-light-classes/testData/equivalentTo/Function.kt"); + } + + @Test + @TestMetadata("Interface.kt") + public void testInterface() throws Exception { + runTest("analysis/symbol-light-classes/testData/equivalentTo/Interface.kt"); + } + + @Test + @TestMetadata("Klass.kt") + public void testKlass() throws Exception { + runTest("analysis/symbol-light-classes/testData/equivalentTo/Klass.kt"); + } + + @Test + @TestMetadata("TypeParameter.kt") + public void testTypeParameter() throws Exception { + runTest("analysis/symbol-light-classes/testData/equivalentTo/TypeParameter.kt"); + } +} diff --git a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/lightClasses.kt b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/lightClasses.kt index 411b9ec1441..f97cb24a5b9 100644 --- a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/lightClasses.kt +++ b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/lightClasses.kt @@ -7,6 +7,7 @@ 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.base.AbstractSymbolLightClassesEqualityTest import org.jetbrains.kotlin.light.classes.symbol.decompiled.* import org.jetbrains.kotlin.light.classes.symbol.source.* @@ -81,5 +82,11 @@ internal fun TestGroupSuite.generateSymbolLightClassesTests() { model("structureByFqName", pattern = TestGeneratorUtil.KT) } } + + run { + testClass { + model("equivalentTo", pattern = TestGeneratorUtil.KT) + } + } } }