From 36b89f5e84ff46fdacca81904e89bccbdba6655b Mon Sep 17 00:00:00 2001 From: Egor Kulikov Date: Wed, 7 Feb 2024 13:39:16 +0100 Subject: [PATCH] [FIR] Fix resolve for java synthetic properties in KDoc ^KT-62880 fixed --- ...ceModuleReferenceResolveTestGenerated.java | 24 ++++++++++++++ .../fir/references/KDocReferenceResolver.kt | 15 ++++++++- .../api/fir/references/KtFirKDocReference.kt | 17 ++++++++++ .../api/fir/references/KtFirReference.kt | 31 +++++++++---------- ...ceModuleReferenceResolveTestGenerated.java | 24 ++++++++++++++ ...ceModuleReferenceResolveTestGenerated.java | 24 ++++++++++++++ ...ceModuleReferenceResolveTestGenerated.java | 24 ++++++++++++++ ...ceModuleReferenceResolveTestGenerated.java | 24 ++++++++++++++ .../NoSyntheticFieldInClass.kt | 16 ++++++++++ .../NoSyntheticFieldInClass.txt | 8 +++++ .../SyntheticFieldInAnnotationInterface.kt | 18 +++++++++++ .../SyntheticFieldInAnnotationInterface.txt | 5 +++ .../javaDeclarations/SyntheticFieldInClass.kt | 13 ++++++++ .../SyntheticFieldInClass.txt | 5 +++ .../SyntheticPropertyInKotlinSubclass.kt | 15 +++++++++ .../SyntheticPropertyInKotlinSubclass.txt | 5 +++ 16 files changed, 250 insertions(+), 18 deletions(-) create mode 100644 analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/NoSyntheticFieldInClass.kt create mode 100644 analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/NoSyntheticFieldInClass.txt create mode 100644 analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInAnnotationInterface.kt create mode 100644 analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInAnnotationInterface.txt create mode 100644 analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInClass.kt create mode 100644 analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInClass.txt create mode 100644 analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticPropertyInKotlinSubclass.kt create mode 100644 analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticPropertyInKotlinSubclass.txt diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java index 162ffba089a..59cceef7c13 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -1808,6 +1808,12 @@ public class Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exte runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/FunctionQualifiedWithKotlinSubclass.kt"); } + @Test + @TestMetadata("NoSyntheticFieldInClass.kt") + public void testNoSyntheticFieldInClass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/NoSyntheticFieldInClass.kt"); + } + @Test @TestMetadata("StaticFieldQualified.kt") public void testStaticFieldQualified() { @@ -1843,6 +1849,24 @@ public class Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exte public void testStaticFunctionQualifiedWithKotlinSubclass() { runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithKotlinSubclass.kt"); } + + @Test + @TestMetadata("SyntheticFieldInAnnotationInterface.kt") + public void testSyntheticFieldInAnnotationInterface() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInAnnotationInterface.kt"); + } + + @Test + @TestMetadata("SyntheticFieldInClass.kt") + public void testSyntheticFieldInClass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInClass.kt"); + } + + @Test + @TestMetadata("SyntheticPropertyInKotlinSubclass.kt") + public void testSyntheticPropertyInKotlinSubclass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticPropertyInKotlinSubclass.kt"); + } } @Nested diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KDocReferenceResolver.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KDocReferenceResolver.kt index d51f3095932..381f8a369e0 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KDocReferenceResolver.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KDocReferenceResolver.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty import kotlin.reflect.KClass import org.jetbrains.kotlin.analysis.utils.printer.parentOfType +import org.jetbrains.kotlin.load.java.possibleGetMethodNames import org.jetbrains.kotlin.utils.addIfNotNull internal object KDocReferenceResolver { @@ -122,7 +123,7 @@ internal object KDocReferenceResolver { } context(KtAnalysisSession) - private fun resolveKdocFqName(fqName: FqName, contextElement: KtElement): Collection { + private fun resolveKdocFqName(fqName: FqName, contextElement: KtElement, trySyntheticGetters: Boolean = true): Collection { getExtensionReceiverSymbolByThisQualifier(fqName, contextElement).ifNotEmpty { return this } buildList { @@ -135,9 +136,21 @@ internal object KDocReferenceResolver { AdditionalKDocResolutionProvider.resolveKdocFqName(fqName, contextElement).map { it.toResolveResult() }.ifNotEmpty { return this } + if (trySyntheticGetters) { + getSymbolsFromSyntheticProperty(fqName, contextElement).ifNotEmpty { return this } + } + return emptyList() } + context(KtAnalysisSession) + private fun getSymbolsFromSyntheticProperty(fqName: FqName, contextElement: KtElement): Collection { + val getterNames = possibleGetMethodNames(fqName.shortNameOrSpecial()) + return getterNames.flatMap { getterName -> + resolveKdocFqName(fqName.parent().child(getterName), contextElement, trySyntheticGetters = false) + } + } + context(KtAnalysisSession) private fun getExtensionReceiverSymbolByThisQualifier(fqName: FqName, contextElement: KtElement): Collection { val owner = contextElement.parentOfType() ?: return emptyList() diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirKDocReference.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirKDocReference.kt index 74a5bdb5911..1a19b450755 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirKDocReference.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirKDocReference.kt @@ -5,10 +5,14 @@ package org.jetbrains.kotlin.analysis.api.fir.references +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.analysis.api.KtAnalysisSession +import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol +import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSyntheticJavaPropertySymbol import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol import org.jetbrains.kotlin.idea.references.KDocReference import org.jetbrains.kotlin.idea.references.KtFirReference +import org.jetbrains.kotlin.idea.references.getPsiDeclarations import org.jetbrains.kotlin.kdoc.psi.impl.KDocName @@ -18,4 +22,17 @@ internal class KtFirKDocReference(element: KDocName) : KDocReference(element), K val selectedFqName = element.getQualifiedNameAsFqName() return KDocReferenceResolver.resolveKdocFqName(selectedFqName, fullFqName, element) } + + override fun getResolvedToPsi( + analysisSession: KtAnalysisSession, + referenceTargetSymbols: Collection, + ): Collection = with(analysisSession) { + referenceTargetSymbols.flatMap { symbol -> + when (symbol) { + is KtFirSyntheticJavaPropertySymbol -> listOfNotNull(symbol.javaGetterSymbol.psi, symbol.javaSetterSymbol?.psi) + is KtFirSymbol<*> -> getPsiDeclarations(symbol) + else -> listOfNotNull(symbol.psi) + } + } + } } \ No newline at end of file diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirReference.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirReference.kt index 872cb05cc8b..9d02b649fe7 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirReference.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirReference.kt @@ -13,9 +13,6 @@ import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin -import org.jetbrains.kotlin.analysis.low.level.api.fir.resolve.extensions.navigationTargetsProvider -import org.jetbrains.kotlin.analysis.project.structure.KtModuleStructureInternals -import org.jetbrains.kotlin.psi.KtFile interface KtFirReference : KtReference, KtSymbolBasedReference { fun getResolvedToPsi(analysisSession: KtAnalysisSession, referenceTargetSymbols: Collection): Collection = @@ -33,18 +30,18 @@ interface KtFirReference : KtReference, KtSymbolBasedReference { getResolvedToPsi(analysisSession, resolveToSymbols()) } - private fun KtAnalysisSession.getPsiDeclarations(symbol: KtFirSymbol<*>): Collection { - val intersectionOverriddenSymbolsOrSingle = when { - symbol.origin == KtSymbolOrigin.INTERSECTION_OVERRIDE && symbol is KtCallableSymbol -> symbol.getIntersectionOverriddenSymbols() - else -> listOf(symbol) - } - return intersectionOverriddenSymbolsOrSingle.mapNotNull { it.findPsiForReferenceResolve() } - } - - private fun KtSymbol.findPsiForReferenceResolve(): PsiElement? { - require(this is KtFirSymbol<*>) - return firSymbol.fir.findReferencePsi() - } - override val resolver get() = KtFirReferenceResolver -} \ No newline at end of file +} + +internal fun KtAnalysisSession.getPsiDeclarations(symbol: KtFirSymbol<*>): Collection { + val intersectionOverriddenSymbolsOrSingle = when { + symbol.origin == KtSymbolOrigin.INTERSECTION_OVERRIDE && symbol is KtCallableSymbol -> symbol.getIntersectionOverriddenSymbols() + else -> listOf(symbol) + } + return intersectionOverriddenSymbolsOrSingle.mapNotNull { it.findPsiForReferenceResolve() } +} + +private fun KtSymbol.findPsiForReferenceResolve(): PsiElement? { + require(this is KtFirSymbol<*>) + return firSymbol.fir.findReferencePsi() +} diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java index 048f9069eb1..08780940527 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -1808,6 +1808,12 @@ public class FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated ex runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/FunctionQualifiedWithKotlinSubclass.kt"); } + @Test + @TestMetadata("NoSyntheticFieldInClass.kt") + public void testNoSyntheticFieldInClass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/NoSyntheticFieldInClass.kt"); + } + @Test @TestMetadata("StaticFieldQualified.kt") public void testStaticFieldQualified() { @@ -1843,6 +1849,24 @@ public class FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated ex public void testStaticFunctionQualifiedWithKotlinSubclass() { runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithKotlinSubclass.kt"); } + + @Test + @TestMetadata("SyntheticFieldInAnnotationInterface.kt") + public void testSyntheticFieldInAnnotationInterface() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInAnnotationInterface.kt"); + } + + @Test + @TestMetadata("SyntheticFieldInClass.kt") + public void testSyntheticFieldInClass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInClass.kt"); + } + + @Test + @TestMetadata("SyntheticPropertyInKotlinSubclass.kt") + public void testSyntheticPropertyInKotlinSubclass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticPropertyInKotlinSubclass.kt"); + } } @Nested diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java index fb47f59b40f..7e40b8603e7 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java @@ -1692,6 +1692,12 @@ public class FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerate runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/FunctionQualifiedWithKotlinSubclass.kt"); } + @Test + @TestMetadata("NoSyntheticFieldInClass.kt") + public void testNoSyntheticFieldInClass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/NoSyntheticFieldInClass.kt"); + } + @Test @TestMetadata("StaticFieldQualified.kt") public void testStaticFieldQualified() { @@ -1727,6 +1733,24 @@ public class FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerate public void testStaticFunctionQualifiedWithKotlinSubclass() { runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithKotlinSubclass.kt"); } + + @Test + @TestMetadata("SyntheticFieldInAnnotationInterface.kt") + public void testSyntheticFieldInAnnotationInterface() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInAnnotationInterface.kt"); + } + + @Test + @TestMetadata("SyntheticFieldInClass.kt") + public void testSyntheticFieldInClass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInClass.kt"); + } + + @Test + @TestMetadata("SyntheticPropertyInKotlinSubclass.kt") + public void testSyntheticPropertyInKotlinSubclass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticPropertyInKotlinSubclass.kt"); + } } @Nested diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java index ff9713ce839..a41e3a5c53f 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -1808,6 +1808,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exten runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/FunctionQualifiedWithKotlinSubclass.kt"); } + @Test + @TestMetadata("NoSyntheticFieldInClass.kt") + public void testNoSyntheticFieldInClass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/NoSyntheticFieldInClass.kt"); + } + @Test @TestMetadata("StaticFieldQualified.kt") public void testStaticFieldQualified() { @@ -1843,6 +1849,24 @@ public class FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exten public void testStaticFunctionQualifiedWithKotlinSubclass() { runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithKotlinSubclass.kt"); } + + @Test + @TestMetadata("SyntheticFieldInAnnotationInterface.kt") + public void testSyntheticFieldInAnnotationInterface() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInAnnotationInterface.kt"); + } + + @Test + @TestMetadata("SyntheticFieldInClass.kt") + public void testSyntheticFieldInClass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInClass.kt"); + } + + @Test + @TestMetadata("SyntheticPropertyInKotlinSubclass.kt") + public void testSyntheticPropertyInKotlinSubclass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticPropertyInKotlinSubclass.kt"); + } } @Nested diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java index 1de2e1f9f77..b2c1e0baefd 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -1808,6 +1808,12 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerate runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/FunctionQualifiedWithKotlinSubclass.kt"); } + @Test + @TestMetadata("NoSyntheticFieldInClass.kt") + public void testNoSyntheticFieldInClass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/NoSyntheticFieldInClass.kt"); + } + @Test @TestMetadata("StaticFieldQualified.kt") public void testStaticFieldQualified() { @@ -1843,6 +1849,24 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerate public void testStaticFunctionQualifiedWithKotlinSubclass() { runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithKotlinSubclass.kt"); } + + @Test + @TestMetadata("SyntheticFieldInAnnotationInterface.kt") + public void testSyntheticFieldInAnnotationInterface() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInAnnotationInterface.kt"); + } + + @Test + @TestMetadata("SyntheticFieldInClass.kt") + public void testSyntheticFieldInClass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInClass.kt"); + } + + @Test + @TestMetadata("SyntheticPropertyInKotlinSubclass.kt") + public void testSyntheticPropertyInKotlinSubclass() { + runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticPropertyInKotlinSubclass.kt"); + } } @Nested diff --git a/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/NoSyntheticFieldInClass.kt b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/NoSyntheticFieldInClass.kt new file mode 100644 index 00000000000..cb8e94f8df6 --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/NoSyntheticFieldInClass.kt @@ -0,0 +1,16 @@ +// FILE: main.kt +/** + * [Storage.value] + * [Storage.setValue] + * [Storage.prop] + */ +fun usage() { + +} + +// FILE: Storage.java +class Storage { + void prop() {} + void setValue(String value) {} + String getProp() { return null; } +} diff --git a/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/NoSyntheticFieldInClass.txt b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/NoSyntheticFieldInClass.txt new file mode 100644 index 00000000000..a28794aa7aa --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/NoSyntheticFieldInClass.txt @@ -0,0 +1,8 @@ + resolved to: +Nothing (Unresolved reference) + + resolved to: +0: (in Storage) open fun setValue(value: kotlin.String!) + + resolved to: +0: (in Storage) open fun prop() \ No newline at end of file diff --git a/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInAnnotationInterface.kt b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInAnnotationInterface.kt new file mode 100644 index 00000000000..2a00936edf3 --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInAnnotationInterface.kt @@ -0,0 +1,18 @@ +// FILE: main.kt +/** + * [Storage.value] + * [Storage2.value2] + */ +fun usage() { + +} + +// FILE: Storage.java +@interface Storage { + String value() default ""; +} + +// FILE: Storage2.java +@interface Storage2 { + String value2(); +} diff --git a/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInAnnotationInterface.txt b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInAnnotationInterface.txt new file mode 100644 index 00000000000..00d1ad3499b --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInAnnotationInterface.txt @@ -0,0 +1,5 @@ + resolved to: +0: (in Storage) val value: kotlin.String + + resolved to: +0: (in Storage2) val value2: kotlin.String \ No newline at end of file diff --git a/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInClass.kt b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInClass.kt new file mode 100644 index 00000000000..a5067f67a33 --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInClass.kt @@ -0,0 +1,13 @@ +// FILE: main.kt +/** + * [Storage.value] + * [Storage.getValue] + */ +fun usage() { + +} + +// FILE: Storage.java +class Storage { + String getValue() { return null; } +} diff --git a/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInClass.txt b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInClass.txt new file mode 100644 index 00000000000..e532e0b8b0f --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticFieldInClass.txt @@ -0,0 +1,5 @@ + resolved to: +0: (in Storage) open fun getValue(): kotlin.String! + + resolved to: +0: (in Storage) open fun getValue(): kotlin.String! \ No newline at end of file diff --git a/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticPropertyInKotlinSubclass.kt b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticPropertyInKotlinSubclass.kt new file mode 100644 index 00000000000..681209090d2 --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticPropertyInKotlinSubclass.kt @@ -0,0 +1,15 @@ +// FILE: main.kt +import dependency.JavaBase + +/** + * [prop] + * [KotlinChild.prop] + */ +class KotlinChild : JavaBase() + +// FILE: dependency/JavaBase.java +package dependency; + +public class JavaBase { + public String getProp() { return null; } +} diff --git a/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticPropertyInKotlinSubclass.txt b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticPropertyInKotlinSubclass.txt new file mode 100644 index 00000000000..56b04b3bbad --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/SyntheticPropertyInKotlinSubclass.txt @@ -0,0 +1,5 @@ + resolved to: +0: (in dependency.JavaBase) open fun getProp(): kotlin.String! + + resolved to: +0: (in dependency.JavaBase) open fun getProp(): kotlin.String!