From 9559158bfeeb274e9ccf1b4563f1b23b42afc493 Mon Sep 17 00:00:00 2001 From: Ignat Beresnev Date: Wed, 5 Jul 2023 10:04:55 +0200 Subject: Decompose Kotlin/Java analysis (#3034) * Extract analysis into separate modules --- build.gradle.kts | 4 - core/api/core.api | 20 + core/build.gradle.kts | 7 +- core/src/main/kotlin/CoreExtensions.kt | 4 +- core/src/main/kotlin/DokkaBootstrap.kt | 1 - core/src/main/kotlin/InternalDokkaApi.kt | 5 +- core/src/main/kotlin/model/Documentable.kt | 11 +- core/src/main/kotlin/model/WithChildren.kt | 2 +- .../main/kotlin/model/documentableProperties.kt | 9 + core/src/main/kotlin/plugability/DokkaPlugin.kt | 3 + core/src/main/kotlin/utilities/Collections.kt | 25 + core/src/main/kotlin/utilities/Html.kt | 2 +- .../utilities/SelfRepresentingSingletonSet.kt | 2 +- core/src/main/kotlin/utilities/ServiceLocator.kt | 2 +- core/src/main/kotlin/utilities/Uri.kt | 2 +- .../main/kotlin/utilities/associateWithNotNull.kt | 2 +- core/src/main/kotlin/utilities/cast.kt | 2 +- .../utilities/parallelCollectionOperations.kt | 7 +- .../kotlin/utilities/DokkaConfigurationJsonTest.kt | 5 +- core/src/test/kotlin/utilities/JsonKtTest.kt | 2 +- core/test-api/build.gradle.kts | 2 +- .../src/main/kotlin/testApi/logger/TestLogger.kt | 2 +- .../testRunner/TestDokkaConfigurationBuilder.kt | 4 +- .../main/kotlin/testApi/testRunner/TestRunner.kt | 25 +- gradle/libs.versions.toml | 15 +- integration-tests/cli/build.gradle.kts | 8 +- kotlin-analysis/build.gradle.kts | 17 - .../compiler-dependency/build.gradle.kts | 26 - .../intellij-dependency/build.gradle.kts | 75 -- .../jetbrains/dokka/analysis/AbsolutePathString.kt | 3 - .../jetbrains/dokka/analysis/AnalysisContext.kt | 94 -- .../dokka/analysis/AnalysisEnvironment.kt | 618 ---------- .../jetbrains/dokka/analysis/CallableFactory.kt | 31 - .../dokka/analysis/CoreKotlinCacheService.kt | 54 - .../org/jetbrains/dokka/analysis/DRIFactory.kt | 50 - .../jetbrains/dokka/analysis/DRITargetFactory.kt | 42 - .../org/jetbrains/dokka/analysis/Documentable.kt | 14 - .../dokka/analysis/DokkaResolutionFacade.kt | 123 -- .../dokka/analysis/JvmDependenciesIndexImpl.kt | 258 ---- .../org/jetbrains/dokka/analysis/KotlinAnalysis.kt | 111 -- .../dokka/analysis/KotlinCliJavaFileManagerImpl.kt | 306 ----- .../dokka/analysis/TypeReferenceFactory.kt | 68 -- .../dokka/analysis/resolve/CommonKlibModuleInfo.kt | 25 - .../analysis/resolve/DokkaJsKlibLibraryInfo.kt | 30 - .../resolve/DokkaJsResolverForModuleFactory.kt | 122 -- .../resolve/DokkaKlibLibraryDependencyResolver.kt | 17 - .../dokka/analysis/resolve/DokkaKlibLibraryInfo.kt | 10 - .../DokkaKlibMetadataCommonDependencyContainer.kt | 140 --- .../analysis/resolve/DokkaNativeKlibLibraryInfo.kt | 44 - .../resolve/DokkaNativeResolverForModuleFactory.kt | 76 -- plugins/all-modules-page/build.gradle.kts | 19 +- .../src/main/kotlin/MultimodulePageCreator.kt | 18 +- plugins/android-documentation/build.gradle.kts | 3 +- .../transformers/HideTagDocumentableFilterTest.kt | 4 +- plugins/base/api/base.api | 195 +-- plugins/base/base-test-utils/build.gradle.kts | 6 +- .../src/main/kotlin/testRunner/baseTestApi.kt | 5 +- plugins/base/build.gradle.kts | 17 +- .../main/components/search/dokkaFuzzyFilter.tsx | 4 +- .../frontend/src/main/components/search/search.tsx | 8 +- .../src/main/components/utils/requests.tsx | 4 +- plugins/base/src/main/kotlin/DokkaBase.kt | 71 +- .../base/src/main/kotlin/parsers/MarkdownParser.kt | 604 ---------- plugins/base/src/main/kotlin/parsers/Parser.kt | 131 -- .../factories/DocTagsFromIElementFactory.kt | 67 - .../parsers/factories/DocTagsFromStringFactory.kt | 77 -- .../IllegalModuleAndPackageDocumentation.kt | 7 - .../ModuleAndPackageDocumentation.kt | 11 - .../ModuleAndPackageDocumentationFragment.kt | 10 - .../ModuleAndPackageDocumentationParsingContext.kt | 64 - .../ModuleAndPackageDocumentationSource.kt | 14 - .../parseModuleAndPackageDocumentation.kt | 12 - .../parseModuleAndPackageDocumentationFragments.kt | 55 - .../main/kotlin/renderers/PackageListService.kt | 5 +- .../src/main/kotlin/renderers/html/HtmlRenderer.kt | 9 +- .../renderers/html/NavigationDataProvider.kt | 18 +- .../main/kotlin/renderers/html/NavigationPage.kt | 2 + .../kotlin/renderers/html/htmlPreprocessors.kt | 2 +- .../src/main/kotlin/renderers/preprocessors.kt | 7 +- .../javadoc/JavadocExternalLocationProvider.kt | 5 +- .../main/kotlin/signatures/JvmSignatureUtils.kt | 6 +- .../kotlin/signatures/KotlinSignatureProvider.kt | 14 +- .../main/kotlin/signatures/KotlinSignatureUtils.kt | 4 +- .../documentables/DefaultDocumentableMerger.kt | 4 +- .../DeprecatedDocumentableFilterTransformer.kt | 2 +- .../DocumentableVisibilityFilterTransformer.kt | 4 +- .../documentables/ExtensionExtractorTransformer.kt | 6 +- ...nheritedEntriesDocumentableFilterTransformer.kt | 5 +- .../InheritorsExtractorTransformer.kt | 2 +- .../ModuleAndPackageDocumentationReader.kt | 107 -- .../ModuleAndPackageDocumentationTransformer.kt | 12 +- .../documentables/ReportUndocumentedTransformer.kt | 41 +- .../documentables/SuppressTagDocumentableFilter.kt | 4 +- .../utils/FullClassHierarchyBuilder.kt | 84 -- .../pages/annotations/SinceKotlinTransformer.kt | 11 +- .../pages/comments/CommentsToContentConverter.kt | 4 +- .../pages/comments/DocTagToContentConverter.kt | 7 +- .../merger/SourceSetMergingPageTransformer.kt | 4 +- .../pages/samples/DefaultSamplesTransformer.kt | 36 - .../pages/samples/SamplesTransformer.kt | 148 --- .../pages/sourcelinks/SourceLinksTransformer.kt | 37 +- .../kotlin/translators/CollectionExtensions.kt | 12 - .../main/kotlin/translators/annotationsValue.kt | 3 - .../DefaultDescriptorToDocumentableTranslator.kt | 1250 ------------------- .../DefaultExternalDocumentablesProvider.kt | 42 - .../DescriptorAccessorConventionUtil.kt | 145 --- .../descriptors/ExternalClasslikesTranslator.kt | 12 - .../descriptors/ExternalDocumentablesProvider.kt | 22 - .../SyntheticDescriptorDocumentationProvider.kt | 47 - .../DefaultDocumentableToPageTranslator.kt | 7 +- .../documentables/DefaultPageCreator.kt | 18 +- .../documentables/DeprecationSectionCreator.kt | 2 +- .../documentables/DescriptionSections.kt | 14 +- .../documentables/briefFromContentNodes.kt | 12 +- .../documentables/documentableLanguage.kt | 15 - .../src/main/kotlin/translators/isException.kt | 18 - .../translators/parseWithNormalisedSpaces.kt | 56 - .../psi/DefaultPsiToDocumentableTranslator.kt | 863 ------------- .../translators/psi/PsiAccessorConventionUtil.kt | 94 -- .../main/kotlin/translators/psi/PsiInheritance.kt | 47 - .../psi/SynheticElementDocumentationProvider.kt | 39 - .../translators/psi/parsers/InheritDocResolver.kt | 129 -- .../translators/psi/parsers/JavadocParser.kt | 511 -------- .../kotlin/translators/psi/parsers/JavadocTag.kt | 32 - .../translators/psi/parsers/PsiCommentsUtils.kt | 146 --- .../kotlin/translators/psi/parsers/exceptionTag.kt | 14 - .../src/main/kotlin/utils/CollectionExtensions.kt | 12 + .../src/main/kotlin/utils/NoopIntellijLogger.kt | 43 - plugins/base/src/test/kotlin/basic/DRITest.kt | 2 +- .../base/src/test/kotlin/basic/DokkaBasicTests.kt | 3 +- .../src/test/kotlin/basic/FailOnWarningTest.kt | 2 +- .../annotations/ContentForAnnotationsTest.kt | 9 +- .../content/annotations/KotlinDeprecatedTest.kt | 4 +- .../kotlin/content/annotations/SinceKotlinTest.kt | 4 +- .../content/exceptions/ContentForExceptions.kt | 5 +- .../content/inheritors/ContentForInheritorsTest.kt | 5 +- .../kotlin/content/params/ContentForParamsTest.kt | 2 +- .../content/signatures/ContentForSignaturesTest.kt | 5 +- .../base/src/test/kotlin/enums/JavaEnumsTest.kt | 3 - .../base/src/test/kotlin/enums/KotlinEnumsTest.kt | 12 +- .../test/kotlin/expectActuals/ExpectActualsTest.kt | 5 +- .../src/test/kotlin/filter/JavaFileFilterTest.kt | 1 - .../filter/KotlinArrayDocumentableReplacerTest.kt | 10 +- .../kotlin/linkableContent/LinkableContentTest.kt | 42 +- .../test/kotlin/linking/EnumValuesLinkingTest.kt | 15 +- .../AndroidExternalLocationProviderTest.kt | 2 +- .../DefaultExternalLocationProviderTest.kt | 2 +- .../Dokka010ExternalLocationProviderTest.kt | 2 +- .../locationProvider/DokkaLocationProviderTest.kt | 7 +- .../JavadocExternalLocationProviderTest.kt | 7 +- .../locationProvider/MultiModuleLinkingTest.kt | 3 +- plugins/base/src/test/kotlin/markdown/KDocTest.kt | 4 +- plugins/base/src/test/kotlin/markdown/LinkTest.kt | 6 +- .../base/src/test/kotlin/markdown/ParserTest.kt | 99 +- plugins/base/src/test/kotlin/model/ClassesTest.kt | 2 +- plugins/base/src/test/kotlin/model/CommentTest.kt | 6 +- .../base/src/test/kotlin/model/ExtensionsTest.kt | 9 +- .../base/src/test/kotlin/model/InheritorsTest.kt | 435 ++++--- .../kotlin/model/MultiLanguageInheritanceTest.kt | 7 +- plugins/base/src/test/kotlin/model/PropertyTest.kt | 3 - .../kotlin/multiplatform/BasicMultiplatformTest.kt | 2 +- .../test/kotlin/pageMerger/PageNodeMergerTest.kt | 7 +- .../src/test/kotlin/parsers/JavadocParserTest.kt | 72 +- ...seModuleAndPackageDocumentationFragmentsTest.kt | 282 ----- .../kotlin/renderers/html/GroupWrappingTest.kt | 2 +- .../renderers/html/HtmlRenderingOnlyTestBase.kt | 4 +- .../kotlin/renderers/html/NavigationIconTest.kt | 2 +- .../test/kotlin/renderers/html/NavigationTest.kt | 2 +- .../FunctionalTypeConstructorsSignatureTest.kt | 3 +- .../kotlin/signatures/ObviousTypeSkippingTest.kt | 2 +- .../kotlin/signatures/VarianceSignatureTest.kt | 1 - .../PageTransformerBuilderTest.kt | 5 +- .../transformers/CommentsToContentConverterTest.kt | 3 +- ...textModuleAndPackageDocumentationReaderTest1.kt | 28 +- ...textModuleAndPackageDocumentationReaderTest3.kt | 8 +- .../test/kotlin/transformers/DivisionSwitchTest.kt | 7 +- ...ntentModuleAndPackageDocumentationReaderTest.kt | 12 +- .../MergeImplicitExpectActualDeclarationsTest.kt | 5 +- ...leAndPackageDocumentationTransformerUnitTest.kt | 36 +- .../ReportUndocumentedTransformerTest.kt | 2 +- .../transformers/SourceLinkTransformerTest.kt | 4 +- ...nfigurationDocumentableFilterTransformerTest.kt | 2 +- .../kotlin/translators/AccessorMethodNamingTest.kt | 5 +- .../base/src/test/kotlin/translators/Bug1341.kt | 2 +- .../DefaultPsiToDocumentableTranslatorTest.kt | 137 ++- .../translators/ExternalDocumentablesTest.kt | 19 +- .../kotlin/translators/JavadocInheritDocsTest.kt | 5 +- .../translators/JavadocInheritedDocTagsTest.kt | 13 +- .../test/kotlin/translators/JavadocParserTest.kt | 4 +- plugins/base/src/test/kotlin/translators/utils.kt | 1 - plugins/base/src/test/kotlin/utils/contentUtils.kt | 7 +- plugins/gfm/build.gradle.kts | 16 +- .../gfm/gfm-template-processing/build.gradle.kts | 2 +- .../org/jetbrains/dokka/gfm/gfmTemplating.kt | 4 +- .../test/kotlin/renderers/gfm/CodeWrappingTest.kt | 3 +- .../test/kotlin/renderers/gfm/GroupWrappingTest.kt | 2 +- plugins/javadoc/api/javadoc.api | 25 +- plugins/javadoc/build.gradle.kts | 8 +- .../org/jetbrains/dokka/javadoc/JavadocPlugin.kt | 8 +- .../dokka/javadoc/pages/JavadocPageNodes.kt | 102 +- .../dokka/javadoc/pages/htmlPreprocessors.kt | 14 +- .../JavadocContentToTemplateMapTranslator.kt | 7 +- .../dokka/javadoc/renderer/KorteJavadocRenderer.kt | 24 +- .../dokka/javadoc/renderer/SearchScriptsCreator.kt | 7 +- .../javadoc/signatures/JavadocSignatureProvider.kt | 2 +- .../documentables/JavadocPageContentBuilder.kt | 5 +- .../javadoc/AbstractJavadocTemplateMapTest.kt | 10 +- .../kotlin/org/jetbrains/dokka/javadoc/Asserts.kt | 3 +- .../dokka/javadoc/JavadocAccessorNamingTest.kt | 6 +- .../dokka/javadoc/location/JavadocLinkingTest.kt | 2 +- .../dokka/javadoc/location/JavadocLocationTest.kt | 12 +- .../javadoc/packagelist/JavadocPackageListTest.kt | 2 +- plugins/jekyll/build.gradle.kts | 4 +- .../jekyll-template-processing/build.gradle.kts | 2 +- plugins/kotlin-as-java/api/kotlin-as-java.api | 6 +- plugins/kotlin-as-java/build.gradle.kts | 11 +- .../src/main/kotlin/CollectionExtensions.kt | 12 + .../src/main/kotlin/converters/KotlinCompanion.kt | 11 +- .../kotlin/converters/KotlinToJavaConverter.kt | 869 ++++++------- plugins/kotlin-as-java/src/main/kotlin/jvmField.kt | 4 +- plugins/kotlin-as-java/src/main/kotlin/jvmName.kt | 6 +- .../kotlin-as-java/src/main/kotlin/jvmStatic.kt | 4 +- .../kotlin/signatures/JavaSignatureProvider.kt | 5 +- .../src/main/kotlin/transformToJava.kt | 19 +- .../KotlinAsJavaDocumentableTransformer.kt | 8 +- .../KotlinAsJavaDocumentableToPageTranslator.kt | 13 +- .../kotlin/translators/KotlinAsJavaPageCreator.kt | 11 +- .../src/test/kotlin/KotlinAsJavaPluginTest.kt | 9 +- plugins/mathjax/build.gradle.kts | 6 +- .../mathjax/src/test/kotlin/MathjaxPluginTest.kt | 2 +- plugins/templating/build.gradle.kts | 13 +- plugins/versioning/build.gradle.kts | 10 +- .../DefaultPreviousDocumentationCopyPostAction.kt | 4 +- .../org/jetbrains/dokka/gradle/DokkaArtifacts.kt | 4 +- .../dokka/gradle/GradleDokkaSourceSetBuilder.kt | 6 +- .../jetbrains/dokka/gradle/gradleConfigurations.kt | 2 +- .../gradle/ConfigureWithKotlinSourceSetGistTest.kt | 3 +- .../dokka/gradle/KotlinSourceSetGistTest.kt | 3 +- runners/maven-plugin/src/main/kotlin/DokkaMojo.kt | 3 +- settings.gradle.kts | 25 +- subprojects/analysis-java-psi/README.md | 5 + .../analysis-java-psi/api/analysis-java-psi.api | 148 +++ subprojects/analysis-java-psi/build.gradle.kts | 18 + .../java/DefaultPsiToDocumentableTranslator.kt | 83 ++ .../dokka/analysis/java/JavaAnalysisPlugin.kt | 106 ++ .../jetbrains/dokka/analysis/java/JavadocTag.kt | 48 + .../java/SynheticElementDocumentationProvider.kt | 42 + .../dokka/analysis/java/doccomment/DocComment.kt | 14 + .../analysis/java/doccomment/DocCommentCreator.kt | 9 + .../analysis/java/doccomment/DocCommentFactory.kt | 20 + .../analysis/java/doccomment/DocCommentFinder.kt | 64 + .../java/doccomment/DocumentationContent.kt | 11 + .../analysis/java/doccomment/JavaDocComment.kt | 84 ++ .../java/doccomment/JavaDocCommentCreator.kt | 11 + .../java/doccomment/PsiDocumentationContent.kt | 22 + .../java/parsers/CommentResolutionContext.kt | 9 + .../analysis/java/parsers/DocCommentParser.kt | 12 + .../dokka/analysis/java/parsers/DokkaPsiParser.kt | 797 ++++++++++++ .../analysis/java/parsers/JavaDocCommentParser.kt | 228 ++++ .../dokka/analysis/java/parsers/JavadocParser.kt | 24 + .../java/parsers/doctag/DocTagParserContext.kt | 47 + .../java/parsers/doctag/HtmlToDocTagConverter.kt | 114 ++ .../parsers/doctag/InheritDocTagContentProvider.kt | 10 + .../java/parsers/doctag/InheritDocTagResolver.kt | 114 ++ .../java/parsers/doctag/PsiDocTagParser.kt | 39 + .../parsers/doctag/PsiElementToHtmlConverter.kt | 214 ++++ .../dokka/analysis/java/util/CoreCopyPaste.kt | 20 + .../dokka/analysis/java/util/NoopIntellijLogger.kt | 43 + .../analysis/java/util/PropertiesConventionUtil.kt | 101 ++ .../java/util/PsiAccessorConventionUtil.kt | 98 ++ .../dokka/analysis/java/util/PsiCommentsUtils.kt | 49 + .../jetbrains/dokka/analysis/java/util/PsiUtil.kt | 119 ++ .../dokka/analysis/java/util/StdlibUtil.kt | 33 + .../dokka/analysis/java/util/resolveToGetDri.kt | 7 + .../org.jetbrains.dokka.plugability.DokkaPlugin | 1 + subprojects/analysis-kotlin-api/README.md | 10 + .../api/analysis-kotlin-api.api | 70 ++ subprojects/analysis-kotlin-api/build.gradle.kts | 14 + .../kotlin/analysis/kotlin/KotlinAnalysisPlugin.kt | 17 + .../internal/DocumentableSourceLanguageParser.kt | 16 + .../internal/ExternalDocumentablesProvider.kt | 24 + .../kotlin/internal/FullClassHierarchyBuilder.kt | 17 + .../analysis/kotlin/internal/InheritanceBuilder.kt | 21 + .../internal/InternalKotlinAnalysisPlugin.kt | 31 + .../kotlin/internal/KotlinToJavaService.kt | 9 + .../ModuleAndPackageDocumentationReader.kt | 15 + .../internal/SyntheticDocumentableDetector.kt | 11 + subprojects/analysis-kotlin-descriptors/README.md | 8 + .../api/analysis-kotlin-descriptors.api | 0 .../analysis-kotlin-descriptors/build.gradle.kts | 43 + .../analysis-kotlin-descriptors/compiler/README.md | 9 + .../compiler/api/compiler.api | 68 ++ .../compiler/build.gradle.kts | 21 + .../descriptors/compiler/AnalysisContextCreator.kt | 20 + .../compiler/CompilerDescriptorAnalysisPlugin.kt | 135 +++ .../CompilerDocumentableSourceLanguageParser.kt | 23 + .../compiler/CompilerExtensionPointProvider.kt | 14 + .../descriptors/compiler/DescriptorFinder.kt | 10 + .../kotlin/descriptors/compiler/KDocFinder.kt | 30 + .../kotlin/descriptors/compiler/KLibService.kt | 23 + .../descriptors/compiler/MockApplicationHack.kt | 9 + .../compiler/configuration/AbsolutePathString.kt | 3 + .../compiler/configuration/AnalysisContext.kt | 94 ++ .../compiler/configuration/AnalysisEnvironment.kt | 599 +++++++++ .../compiler/configuration/CallableFactory.kt | 31 + .../compiler/configuration/DRIFactory.kt | 49 + .../compiler/configuration/DRITargetFactory.kt | 42 + .../compiler/configuration/Documentable.kt | 24 + .../configuration/JvmDependenciesIndexImpl.kt | 264 ++++ .../compiler/configuration/KotlinAnalysis.kt | 94 ++ .../configuration/KotlinCliJavaFileManagerImpl.kt | 304 +++++ .../compiler/configuration/TypeReferenceFactory.kt | 68 ++ .../configuration/resolve/CommonKlibModuleInfo.kt | 25 + .../resolve/DokkaJsKlibLibraryInfo.kt | 30 + .../resolve/DokkaJsResolverForModuleFactory.kt | 125 ++ .../resolve/DokkaKlibLibraryDependencyResolver.kt | 17 + .../configuration/resolve/DokkaKlibLibraryInfo.kt | 10 + .../DokkaKlibMetadataCommonDependencyContainer.kt | 139 +++ .../resolve/DokkaNativeKlibLibraryInfo.kt | 50 + .../resolve/DokkaNativeResolverForModuleFactory.kt | 79 ++ .../compiler/impl/DefaultSamplesTransformer.kt | 35 + .../impl/DescriptorFullClassHierarchyBuilder.kt | 85 ++ .../compiler/impl/DescriptorInheritanceBuilder.kt | 91 ++ .../compiler/impl/DescriptorKotlinToJavaMapper.kt | 31 + .../DescriptorSyntheticDocumentableDetector.kt | 33 + .../compiler/impl/SamplesTransformerImpl.kt | 153 +++ .../IllegalModuleAndPackageDocumentation.kt | 7 + .../moduledocs/ModuleAndPackageDocumentation.kt | 11 + .../ModuleAndPackageDocumentationFragment.kt | 9 + .../ModuleAndPackageDocumentationParsingContext.kt | 71 ++ .../ModuleAndPackageDocumentationReader.kt | 113 ++ .../ModuleAndPackageDocumentationSource.kt | 14 + .../parseModuleAndPackageDocumentation.kt | 12 + .../parseModuleAndPackageDocumentationFragments.kt | 55 + .../java/DescriptorDocumentationContent.kt | 16 + .../compiler/java/DescriptorKotlinDocComment.kt | 79 ++ .../java/DescriptorKotlinDocCommentCreator.kt | 26 + .../java/DescriptorKotlinDocCommentParser.kt | 54 + .../compiler/java/KotlinAnalysisProjectProvider.kt | 16 + .../java/KotlinAnalysisSourceRootsExtractor.kt | 27 + .../java/KotlinInheritDocTagContentProvider.kt | 31 + .../compiler/translator/CollectionExtensions.kt | 12 + .../DefaultDescriptorToDocumentableTranslator.kt | 1275 ++++++++++++++++++++ .../DefaultExternalDocumentablesProvider.kt | 43 + .../translator/DescriptorAccessorConventionUtil.kt | 144 +++ .../translator/ExternalClasslikesTranslator.kt | 12 + .../compiler/translator/KdocMarkdownParser.kt | 101 ++ .../SyntheticDescriptorDocumentationProvider.kt | 46 + .../compiler/translator/annotationsValue.kt | 3 + .../descriptors/compiler/translator/isException.kt | 18 + .../org.jetbrains.dokka.plugability.DokkaPlugin | 1 + ...seModuleAndPackageDocumentationFragmentsTest.kt | 282 +++++ .../analysis-kotlin-descriptors/ide/README.md | 11 + .../analysis-kotlin-descriptors/ide/api/ide.api | 4 + .../ide/build.gradle.kts | 21 + .../descriptors/ide/CoreKotlinCacheService.kt | 54 + .../descriptors/ide/DokkaResolutionFacade.kt | 123 ++ .../descriptors/ide/IdeAnalysisContextCreator.kt | 29 + .../ide/IdeCompilerExtensionPointProvider.kt | 46 + .../descriptors/ide/IdeDescriptorAnalysisPlugin.kt | 38 + .../kotlin/descriptors/ide/IdeDescriptorFinder.kt | 12 + .../kotlin/descriptors/ide/IdeKLibService.kt | 30 + .../descriptors/ide/IdeMockApplicationHack.kt | 12 + .../kotlin/descriptors/ide/IdePluginKDocFinder.kt | 48 + .../ide/ResolutionFacadeAnalysisContext.kt | 30 + .../org.jetbrains.dokka.plugability.DokkaPlugin | 1 + subprojects/analysis-kotlin-symbols/README.md | 8 + .../api/analysis-kotlin-symbols.api | 0 .../analysis-kotlin-symbols/build.gradle.kts | 34 + .../compiler/api/compiler.api | 4 + .../compiler/build.gradle.kts | 13 + .../compiler/CompilerSymbolsAnalysisPlugin.kt | 11 + .../org.jetbrains.dokka.plugability.DokkaPlugin | 1 + .../analysis-kotlin-symbols/ide/api/ide.api | 4 + .../analysis-kotlin-symbols/ide/build.gradle.kts | 13 + .../kotlin/symbols/ide/IdeSymbolsAnalysisPlugin.kt | 11 + .../org.jetbrains.dokka.plugability.DokkaPlugin | 1 + subprojects/analysis-markdown-jb/README.md | 7 + .../api/analysis-markdown-jb.api | 28 + subprojects/analysis-markdown-jb/build.gradle.kts | 17 + .../dokka/analysis/markdown/jb/MarkdownApi.kt | 8 + .../dokka/analysis/markdown/jb/MarkdownParser.kt | 511 ++++++++ .../dokka/analysis/markdown/jb/ParseUtils.kt | 39 + .../jetbrains/dokka/analysis/markdown/jb/Parser.kt | 131 ++ .../jb/factories/DocTagsFromIElementFactory.kt | 86 ++ 385 files changed, 11300 insertions(+), 9345 deletions(-) create mode 100644 core/src/main/kotlin/utilities/Collections.kt delete mode 100644 kotlin-analysis/build.gradle.kts delete mode 100644 kotlin-analysis/compiler-dependency/build.gradle.kts delete mode 100644 kotlin-analysis/intellij-dependency/build.gradle.kts delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/AbsolutePathString.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/AnalysisContext.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/AnalysisEnvironment.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/CallableFactory.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/CoreKotlinCacheService.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/DRIFactory.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/DRITargetFactory.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/Documentable.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/DokkaResolutionFacade.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/JvmDependenciesIndexImpl.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/KotlinAnalysis.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/KotlinCliJavaFileManagerImpl.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/TypeReferenceFactory.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/CommonKlibModuleInfo.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaJsKlibLibraryInfo.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaJsResolverForModuleFactory.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaKlibLibraryDependencyResolver.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaKlibLibraryInfo.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaKlibMetadataCommonDependencyContainer.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaNativeKlibLibraryInfo.kt delete mode 100644 kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaNativeResolverForModuleFactory.kt delete mode 100644 plugins/base/src/main/kotlin/parsers/MarkdownParser.kt delete mode 100644 plugins/base/src/main/kotlin/parsers/Parser.kt delete mode 100644 plugins/base/src/main/kotlin/parsers/factories/DocTagsFromIElementFactory.kt delete mode 100644 plugins/base/src/main/kotlin/parsers/factories/DocTagsFromStringFactory.kt delete mode 100644 plugins/base/src/main/kotlin/parsers/moduleAndPackage/IllegalModuleAndPackageDocumentation.kt delete mode 100644 plugins/base/src/main/kotlin/parsers/moduleAndPackage/ModuleAndPackageDocumentation.kt delete mode 100644 plugins/base/src/main/kotlin/parsers/moduleAndPackage/ModuleAndPackageDocumentationFragment.kt delete mode 100644 plugins/base/src/main/kotlin/parsers/moduleAndPackage/ModuleAndPackageDocumentationParsingContext.kt delete mode 100644 plugins/base/src/main/kotlin/parsers/moduleAndPackage/ModuleAndPackageDocumentationSource.kt delete mode 100644 plugins/base/src/main/kotlin/parsers/moduleAndPackage/parseModuleAndPackageDocumentation.kt delete mode 100644 plugins/base/src/main/kotlin/parsers/moduleAndPackage/parseModuleAndPackageDocumentationFragments.kt delete mode 100644 plugins/base/src/main/kotlin/transformers/documentables/ModuleAndPackageDocumentationReader.kt delete mode 100644 plugins/base/src/main/kotlin/transformers/documentables/utils/FullClassHierarchyBuilder.kt delete mode 100644 plugins/base/src/main/kotlin/transformers/pages/samples/DefaultSamplesTransformer.kt delete mode 100644 plugins/base/src/main/kotlin/transformers/pages/samples/SamplesTransformer.kt delete mode 100644 plugins/base/src/main/kotlin/translators/CollectionExtensions.kt delete mode 100644 plugins/base/src/main/kotlin/translators/annotationsValue.kt delete mode 100644 plugins/base/src/main/kotlin/translators/descriptors/DefaultDescriptorToDocumentableTranslator.kt delete mode 100644 plugins/base/src/main/kotlin/translators/descriptors/DefaultExternalDocumentablesProvider.kt delete mode 100644 plugins/base/src/main/kotlin/translators/descriptors/DescriptorAccessorConventionUtil.kt delete mode 100644 plugins/base/src/main/kotlin/translators/descriptors/ExternalClasslikesTranslator.kt delete mode 100644 plugins/base/src/main/kotlin/translators/descriptors/ExternalDocumentablesProvider.kt delete mode 100644 plugins/base/src/main/kotlin/translators/descriptors/SyntheticDescriptorDocumentationProvider.kt delete mode 100644 plugins/base/src/main/kotlin/translators/documentables/documentableLanguage.kt delete mode 100644 plugins/base/src/main/kotlin/translators/isException.kt delete mode 100644 plugins/base/src/main/kotlin/translators/parseWithNormalisedSpaces.kt delete mode 100644 plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt delete mode 100644 plugins/base/src/main/kotlin/translators/psi/PsiAccessorConventionUtil.kt delete mode 100644 plugins/base/src/main/kotlin/translators/psi/PsiInheritance.kt delete mode 100644 plugins/base/src/main/kotlin/translators/psi/SynheticElementDocumentationProvider.kt delete mode 100644 plugins/base/src/main/kotlin/translators/psi/parsers/PsiCommentsUtils.kt delete mode 100644 plugins/base/src/main/kotlin/translators/psi/parsers/exceptionTag.kt create mode 100644 plugins/base/src/main/kotlin/utils/CollectionExtensions.kt delete mode 100644 plugins/base/src/main/kotlin/utils/NoopIntellijLogger.kt delete mode 100644 plugins/base/src/test/kotlin/parsers/ParseModuleAndPackageDocumentationFragmentsTest.kt create mode 100644 plugins/kotlin-as-java/src/main/kotlin/CollectionExtensions.kt create mode 100644 subprojects/analysis-java-psi/README.md create mode 100644 subprojects/analysis-java-psi/api/analysis-java-psi.api create mode 100644 subprojects/analysis-java-psi/build.gradle.kts create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/DefaultPsiToDocumentableTranslator.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/JavaAnalysisPlugin.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/JavadocTag.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/SynheticElementDocumentationProvider.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/doccomment/DocComment.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/doccomment/DocCommentCreator.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/doccomment/DocCommentFactory.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/doccomment/DocCommentFinder.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/doccomment/DocumentationContent.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/doccomment/JavaDocComment.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/doccomment/JavaDocCommentCreator.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/doccomment/PsiDocumentationContent.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/parsers/CommentResolutionContext.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/parsers/DocCommentParser.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/parsers/DokkaPsiParser.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/parsers/JavaDocCommentParser.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/parsers/JavadocParser.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/parsers/doctag/DocTagParserContext.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/parsers/doctag/HtmlToDocTagConverter.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/parsers/doctag/InheritDocTagContentProvider.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/parsers/doctag/InheritDocTagResolver.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/parsers/doctag/PsiDocTagParser.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/parsers/doctag/PsiElementToHtmlConverter.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/util/CoreCopyPaste.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/util/NoopIntellijLogger.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/util/PropertiesConventionUtil.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/util/PsiAccessorConventionUtil.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/util/PsiCommentsUtils.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/util/PsiUtil.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/util/StdlibUtil.kt create mode 100644 subprojects/analysis-java-psi/src/main/kotlin/org/jetbrains/dokka/analysis/java/util/resolveToGetDri.kt create mode 100644 subprojects/analysis-java-psi/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin create mode 100644 subprojects/analysis-kotlin-api/README.md create mode 100644 subprojects/analysis-kotlin-api/api/analysis-kotlin-api.api create mode 100644 subprojects/analysis-kotlin-api/build.gradle.kts create mode 100644 subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/kotlin/analysis/kotlin/KotlinAnalysisPlugin.kt create mode 100644 subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/kotlin/analysis/kotlin/internal/DocumentableSourceLanguageParser.kt create mode 100644 subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/kotlin/analysis/kotlin/internal/ExternalDocumentablesProvider.kt create mode 100644 subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/kotlin/analysis/kotlin/internal/FullClassHierarchyBuilder.kt create mode 100644 subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/kotlin/analysis/kotlin/internal/InheritanceBuilder.kt create mode 100644 subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/kotlin/analysis/kotlin/internal/InternalKotlinAnalysisPlugin.kt create mode 100644 subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/kotlin/analysis/kotlin/internal/KotlinToJavaService.kt create mode 100644 subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/kotlin/analysis/kotlin/internal/ModuleAndPackageDocumentationReader.kt create mode 100644 subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/kotlin/analysis/kotlin/internal/SyntheticDocumentableDetector.kt create mode 100644 subprojects/analysis-kotlin-descriptors/README.md create mode 100644 subprojects/analysis-kotlin-descriptors/api/analysis-kotlin-descriptors.api create mode 100644 subprojects/analysis-kotlin-descriptors/build.gradle.kts create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/README.md create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/api/compiler.api create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/build.gradle.kts create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/AnalysisContextCreator.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/CompilerDescriptorAnalysisPlugin.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/CompilerDocumentableSourceLanguageParser.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/CompilerExtensionPointProvider.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/DescriptorFinder.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/KDocFinder.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/KLibService.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/MockApplicationHack.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/AbsolutePathString.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/AnalysisContext.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/AnalysisEnvironment.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/CallableFactory.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/DRIFactory.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/DRITargetFactory.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/Documentable.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/JvmDependenciesIndexImpl.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/KotlinAnalysis.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/KotlinCliJavaFileManagerImpl.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/TypeReferenceFactory.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/resolve/CommonKlibModuleInfo.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/resolve/DokkaJsKlibLibraryInfo.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/resolve/DokkaJsResolverForModuleFactory.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/resolve/DokkaKlibLibraryDependencyResolver.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/resolve/DokkaKlibLibraryInfo.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/resolve/DokkaKlibMetadataCommonDependencyContainer.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/resolve/DokkaNativeKlibLibraryInfo.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/configuration/resolve/DokkaNativeResolverForModuleFactory.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/DefaultSamplesTransformer.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/DescriptorFullClassHierarchyBuilder.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/DescriptorInheritanceBuilder.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/DescriptorKotlinToJavaMapper.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/DescriptorSyntheticDocumentableDetector.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/SamplesTransformerImpl.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/moduledocs/IllegalModuleAndPackageDocumentation.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/moduledocs/ModuleAndPackageDocumentation.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/moduledocs/ModuleAndPackageDocumentationFragment.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/moduledocs/ModuleAndPackageDocumentationParsingContext.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/moduledocs/ModuleAndPackageDocumentationReader.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/moduledocs/ModuleAndPackageDocumentationSource.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/moduledocs/parseModuleAndPackageDocumentation.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/impl/moduledocs/parseModuleAndPackageDocumentationFragments.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/java/DescriptorDocumentationContent.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/java/DescriptorKotlinDocComment.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/java/DescriptorKotlinDocCommentCreator.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/java/DescriptorKotlinDocCommentParser.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/java/KotlinAnalysisProjectProvider.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/java/KotlinAnalysisSourceRootsExtractor.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/java/KotlinInheritDocTagContentProvider.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/CollectionExtensions.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/DefaultDescriptorToDocumentableTranslator.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/DefaultExternalDocumentablesProvider.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/DescriptorAccessorConventionUtil.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/ExternalClasslikesTranslator.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/KdocMarkdownParser.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/SyntheticDescriptorDocumentationProvider.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/annotationsValue.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/isException.kt create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin create mode 100644 subprojects/analysis-kotlin-descriptors/compiler/src/test/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/ParseModuleAndPackageDocumentationFragmentsTest.kt create mode 100644 subprojects/analysis-kotlin-descriptors/ide/README.md create mode 100644 subprojects/analysis-kotlin-descriptors/ide/api/ide.api create mode 100644 subprojects/analysis-kotlin-descriptors/ide/build.gradle.kts create mode 100644 subprojects/analysis-kotlin-descriptors/ide/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/ide/CoreKotlinCacheService.kt create mode 100644 subprojects/analysis-kotlin-descriptors/ide/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/ide/DokkaResolutionFacade.kt create mode 100644 subprojects/analysis-kotlin-descriptors/ide/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/ide/IdeAnalysisContextCreator.kt create mode 100644 subprojects/analysis-kotlin-descriptors/ide/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/ide/IdeCompilerExtensionPointProvider.kt create mode 100644 subprojects/analysis-kotlin-descriptors/ide/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/ide/IdeDescriptorAnalysisPlugin.kt create mode 100644 subprojects/analysis-kotlin-descriptors/ide/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/ide/IdeDescriptorFinder.kt create mode 100644 subprojects/analysis-kotlin-descriptors/ide/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/ide/IdeKLibService.kt create mode 100644 subprojects/analysis-kotlin-descriptors/ide/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/ide/IdeMockApplicationHack.kt create mode 100644 subprojects/analysis-kotlin-descriptors/ide/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/ide/IdePluginKDocFinder.kt create mode 100644 subprojects/analysis-kotlin-descriptors/ide/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/ide/ResolutionFacadeAnalysisContext.kt create mode 100644 subprojects/analysis-kotlin-descriptors/ide/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin create mode 100644 subprojects/analysis-kotlin-symbols/README.md create mode 100644 subprojects/analysis-kotlin-symbols/api/analysis-kotlin-symbols.api create mode 100644 subprojects/analysis-kotlin-symbols/build.gradle.kts create mode 100644 subprojects/analysis-kotlin-symbols/compiler/api/compiler.api create mode 100644 subprojects/analysis-kotlin-symbols/compiler/build.gradle.kts create mode 100644 subprojects/analysis-kotlin-symbols/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/symbols/compiler/CompilerSymbolsAnalysisPlugin.kt create mode 100644 subprojects/analysis-kotlin-symbols/compiler/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin create mode 100644 subprojects/analysis-kotlin-symbols/ide/api/ide.api create mode 100644 subprojects/analysis-kotlin-symbols/ide/build.gradle.kts create mode 100644 subprojects/analysis-kotlin-symbols/ide/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/symbols/ide/IdeSymbolsAnalysisPlugin.kt create mode 100644 subprojects/analysis-kotlin-symbols/ide/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin create mode 100644 subprojects/analysis-markdown-jb/README.md create mode 100644 subprojects/analysis-markdown-jb/api/analysis-markdown-jb.api create mode 100644 subprojects/analysis-markdown-jb/build.gradle.kts create mode 100644 subprojects/analysis-markdown-jb/src/main/kotlin/org/jetbrains/dokka/analysis/markdown/jb/MarkdownApi.kt create mode 100644 subprojects/analysis-markdown-jb/src/main/kotlin/org/jetbrains/dokka/analysis/markdown/jb/MarkdownParser.kt create mode 100644 subprojects/analysis-markdown-jb/src/main/kotlin/org/jetbrains/dokka/analysis/markdown/jb/ParseUtils.kt create mode 100644 subprojects/analysis-markdown-jb/src/main/kotlin/org/jetbrains/dokka/analysis/markdown/jb/Parser.kt create mode 100644 subprojects/analysis-markdown-jb/src/main/kotlin/org/jetbrains/dokka/analysis/markdown/jb/factories/DocTagsFromIElementFactory.kt diff --git a/build.gradle.kts b/build.gradle.kts index 689e9215..d3b965bd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -41,10 +41,6 @@ apiValidation { // NAME PATH "frontend", // :plugins:base:frontend - "kotlin-analysis", // :kotlin-analysis - "compiler-dependency", // :kotlin-analysis:compiler-dependency - "intellij-dependency", // :kotlin-analysis:intellij-dependency - "integration-tests", // :integration-tests "gradle", // :integration-tests:gradle "cli", // :integration-tests:cli diff --git a/core/api/core.api b/core/api/core.api index ac48cfd5..9530899d 100644 --- a/core/api/core.api +++ b/core/api/core.api @@ -1459,6 +1459,7 @@ public final class org/jetbrains/dokka/model/DocumentableKt { } public abstract interface class org/jetbrains/dokka/model/DocumentableSource { + public abstract fun computeLineNumber ()Ljava/lang/Integer; public abstract fun getPath ()Ljava/lang/String; } @@ -1782,6 +1783,24 @@ public final class org/jetbrains/dokka/model/Invariance : org/jetbrains/dokka/mo public fun toString ()Ljava/lang/String; } +public final class org/jetbrains/dokka/model/IsAlsoParameter : org/jetbrains/dokka/model/properties/ExtraProperty { + public static final field Companion Lorg/jetbrains/dokka/model/IsAlsoParameter$Companion; + public fun (Ljava/util/List;)V + public final fun component1 ()Ljava/util/List; + public final fun copy (Ljava/util/List;)Lorg/jetbrains/dokka/model/IsAlsoParameter; + public static synthetic fun copy$default (Lorg/jetbrains/dokka/model/IsAlsoParameter;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/dokka/model/IsAlsoParameter; + public fun equals (Ljava/lang/Object;)Z + public final fun getInSourceSets ()Ljava/util/List; + public fun getKey ()Lorg/jetbrains/dokka/model/properties/ExtraProperty$Key; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class org/jetbrains/dokka/model/IsAlsoParameter$Companion : org/jetbrains/dokka/model/properties/ExtraProperty$Key { + public synthetic fun mergeStrategyFor (Ljava/lang/Object;Ljava/lang/Object;)Lorg/jetbrains/dokka/model/properties/MergeStrategy; + public fun mergeStrategyFor (Lorg/jetbrains/dokka/model/IsAlsoParameter;Lorg/jetbrains/dokka/model/IsAlsoParameter;)Lorg/jetbrains/dokka/model/properties/MergeStrategy; +} + public final class org/jetbrains/dokka/model/IsVar : org/jetbrains/dokka/model/properties/ExtraProperty, org/jetbrains/dokka/model/properties/ExtraProperty$Key { public static final field INSTANCE Lorg/jetbrains/dokka/model/IsVar; public fun getKey ()Lorg/jetbrains/dokka/model/properties/ExtraProperty$Key; @@ -4400,6 +4419,7 @@ public abstract class org/jetbrains/dokka/plugability/DokkaPlugin { protected final fun extending (Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/dokka/plugability/DokkaPlugin$ExtensionProvider; protected final fun extensionPoint ()Lkotlin/properties/ReadOnlyProperty; public final fun getContext ()Lorg/jetbrains/dokka/plugability/DokkaContext; + protected final fun getLogger ()Lorg/jetbrains/dokka/utilities/DokkaLogger; protected abstract fun pluginApiPreviewAcknowledgement ()Lorg/jetbrains/dokka/plugability/PluginApiPreviewAcknowledgement; public final fun setContext (Lorg/jetbrains/dokka/plugability/DokkaContext;)V protected final fun unsafeInstall (Lkotlin/Lazy;)V diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 1afed43d..2a5b668c 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -7,11 +7,8 @@ plugins { } dependencies { - api(libs.jetbrains.markdown) implementation(kotlin("reflect")) - - implementation(libs.jsoup) - + implementation(libs.kotlinx.coroutines.core) implementation(libs.jackson.kotlin) implementation(libs.jackson.xml) constraints { @@ -20,8 +17,6 @@ dependencies { } } - implementation(libs.kotlinx.coroutines.core) - testImplementation(projects.core.testApi) testImplementation(kotlin("test-junit")) } diff --git a/core/src/main/kotlin/CoreExtensions.kt b/core/src/main/kotlin/CoreExtensions.kt index ddfa0c69..8b5196c3 100644 --- a/core/src/main/kotlin/CoreExtensions.kt +++ b/core/src/main/kotlin/CoreExtensions.kt @@ -1,7 +1,7 @@ package org.jetbrains.dokka import org.jetbrains.dokka.generation.Generation -import org.jetbrains.dokka.plugability.* +import org.jetbrains.dokka.plugability.ExtensionPoint import org.jetbrains.dokka.renderers.PostAction import org.jetbrains.dokka.renderers.Renderer import org.jetbrains.dokka.transformers.documentation.DocumentableMerger @@ -28,4 +28,4 @@ object CoreExtensions { operator fun provideDelegate(thisRef: CoreExtensions, property: KProperty<*>): Lazy> = lazy { ExtensionPoint(thisRef::class.qualifiedName!!, property.name) } } -} \ No newline at end of file +} diff --git a/core/src/main/kotlin/DokkaBootstrap.kt b/core/src/main/kotlin/DokkaBootstrap.kt index f4533d5b..10a91c5e 100644 --- a/core/src/main/kotlin/DokkaBootstrap.kt +++ b/core/src/main/kotlin/DokkaBootstrap.kt @@ -1,7 +1,6 @@ package org.jetbrains.dokka import java.util.function.BiConsumer -import kotlin.jvm.Throws interface DokkaBootstrap { @Throws(Throwable::class) diff --git a/core/src/main/kotlin/InternalDokkaApi.kt b/core/src/main/kotlin/InternalDokkaApi.kt index 4389bf7b..0582d350 100644 --- a/core/src/main/kotlin/InternalDokkaApi.kt +++ b/core/src/main/kotlin/InternalDokkaApi.kt @@ -16,6 +16,9 @@ package org.jetbrains.dokka level = RequiresOptIn.Level.ERROR, message = "This is an internal Dokka API not intended for public use" ) -@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.FIELD) +@Target( + AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.FIELD, + AnnotationTarget.PROPERTY, AnnotationTarget.TYPEALIAS +) @Retention(AnnotationRetention.BINARY) public annotation class InternalDokkaApi() diff --git a/core/src/main/kotlin/model/Documentable.kt b/core/src/main/kotlin/model/Documentable.kt index c7b2290e..64c3e14c 100644 --- a/core/src/main/kotlin/model/Documentable.kt +++ b/core/src/main/kotlin/model/Documentable.kt @@ -518,6 +518,15 @@ fun SourceSetDependent?.orEmpty(): SourceSetDependent = this ?: emptyM interface DocumentableSource { val path: String + + /** + * Computes the first line number of the documentable's declaration/signature/identifier. + * + * Numbering is always 1-based. + * + * May return null if the sources could not be found - for example, for synthetic/generated declarations. + */ + fun computeLineNumber(): Int? } -data class TypeConstructorWithKind(val typeConstructor: TypeConstructor, val kind: ClassKind) \ No newline at end of file +data class TypeConstructorWithKind(val typeConstructor: TypeConstructor, val kind: ClassKind) diff --git a/core/src/main/kotlin/model/WithChildren.kt b/core/src/main/kotlin/model/WithChildren.kt index 01a188c8..7412971a 100644 --- a/core/src/main/kotlin/model/WithChildren.kt +++ b/core/src/main/kotlin/model/WithChildren.kt @@ -91,4 +91,4 @@ fun > T.asPrintableTree( } return buildString { append(this@asPrintableTree, "", "") } -} \ No newline at end of file +} diff --git a/core/src/main/kotlin/model/documentableProperties.kt b/core/src/main/kotlin/model/documentableProperties.kt index 9fe8aa1d..4e743b0a 100644 --- a/core/src/main/kotlin/model/documentableProperties.kt +++ b/core/src/main/kotlin/model/documentableProperties.kt @@ -49,6 +49,15 @@ object IsVar : ExtraProperty, ExtraProperty.Key { override val key: ExtraProperty.Key = this } +data class IsAlsoParameter(val inSourceSets: List) : ExtraProperty { + companion object : ExtraProperty.Key { + override fun mergeStrategyFor(left: IsAlsoParameter, right: IsAlsoParameter): MergeStrategy = + MergeStrategy.Replace(IsAlsoParameter(left.inSourceSets + right.inSourceSets)) + } + + override val key: ExtraProperty.Key = IsAlsoParameter +} + data class CheckedExceptions(val exceptions: SourceSetDependent>) : ExtraProperty, ExtraProperty.Key { companion object : ExtraProperty.Key { override fun mergeStrategyFor(left: CheckedExceptions, right: CheckedExceptions) = diff --git a/core/src/main/kotlin/plugability/DokkaPlugin.kt b/core/src/main/kotlin/plugability/DokkaPlugin.kt index 54733ac2..99fa4b95 100644 --- a/core/src/main/kotlin/plugability/DokkaPlugin.kt +++ b/core/src/main/kotlin/plugability/DokkaPlugin.kt @@ -4,6 +4,7 @@ import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule import com.fasterxml.jackson.dataformat.xml.XmlMapper import com.fasterxml.jackson.module.kotlin.readValue import org.jetbrains.dokka.DokkaConfiguration +import org.jetbrains.dokka.utilities.DokkaLogger import org.jetbrains.dokka.utilities.parseJson import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KProperty @@ -33,6 +34,8 @@ abstract class DokkaPlugin { @PublishedApi internal var context: DokkaContext? = null + protected val logger: DokkaLogger get() = context?.logger ?: throw IllegalStateException("No logger found") + /** * @see PluginApiPreviewAcknowledgement */ diff --git a/core/src/main/kotlin/utilities/Collections.kt b/core/src/main/kotlin/utilities/Collections.kt new file mode 100644 index 00000000..b18752f7 --- /dev/null +++ b/core/src/main/kotlin/utilities/Collections.kt @@ -0,0 +1,25 @@ +package org.jetbrains.dokka.utilities + +import org.jetbrains.dokka.InternalDokkaApi + +/** + * This utility method was previously imported from `org.jetbrains.kotlin.utils.addToStdlib`, + * and there were a lot of usages. Since no replacement exists in stdlib, it was implemented + * locally for convenience. + */ +@InternalDokkaApi +inline fun Iterable<*>.firstIsInstanceOrNull(): T? { + for (element in this) if (element is T) return element + return null +} + +/** + * This utility method was previously imported from `org.jetbrains.kotlin.utils.addToStdlib`, + * and there were a lot of usages. Since no replacement exists in stdlib, it was implemented + * locally for convenience. + */ +@InternalDokkaApi +inline fun Sequence<*>.firstIsInstanceOrNull(): T? { + for (element in this) if (element is T) return element + return null +} diff --git a/core/src/main/kotlin/utilities/Html.kt b/core/src/main/kotlin/utilities/Html.kt index a1d8ecec..262dd0a0 100644 --- a/core/src/main/kotlin/utilities/Html.kt +++ b/core/src/main/kotlin/utilities/Html.kt @@ -1,6 +1,6 @@ package org.jetbrains.dokka.utilities -import org.jetbrains.dokka.* +import org.jetbrains.dokka.InternalDokkaApi import java.net.URLEncoder diff --git a/core/src/main/kotlin/utilities/SelfRepresentingSingletonSet.kt b/core/src/main/kotlin/utilities/SelfRepresentingSingletonSet.kt index c29d1b2a..e1b42388 100644 --- a/core/src/main/kotlin/utilities/SelfRepresentingSingletonSet.kt +++ b/core/src/main/kotlin/utilities/SelfRepresentingSingletonSet.kt @@ -1,6 +1,6 @@ package org.jetbrains.dokka.utilities -import org.jetbrains.dokka.* +import org.jetbrains.dokka.InternalDokkaApi @InternalDokkaApi interface SelfRepresentingSingletonSet> : Set { diff --git a/core/src/main/kotlin/utilities/ServiceLocator.kt b/core/src/main/kotlin/utilities/ServiceLocator.kt index f86960ec..b5b19057 100644 --- a/core/src/main/kotlin/utilities/ServiceLocator.kt +++ b/core/src/main/kotlin/utilities/ServiceLocator.kt @@ -1,6 +1,6 @@ package org.jetbrains.dokka.utilities -import org.jetbrains.dokka.* +import org.jetbrains.dokka.InternalDokkaApi import java.io.File import java.net.URISyntaxException import java.net.URL diff --git a/core/src/main/kotlin/utilities/Uri.kt b/core/src/main/kotlin/utilities/Uri.kt index 67c81d98..ef8549f7 100644 --- a/core/src/main/kotlin/utilities/Uri.kt +++ b/core/src/main/kotlin/utilities/Uri.kt @@ -1,6 +1,6 @@ package org.jetbrains.dokka.utilities -import org.jetbrains.dokka.* +import org.jetbrains.dokka.InternalDokkaApi import java.net.URI @InternalDokkaApi diff --git a/core/src/main/kotlin/utilities/associateWithNotNull.kt b/core/src/main/kotlin/utilities/associateWithNotNull.kt index 6c0bf4d8..9ff55d2c 100644 --- a/core/src/main/kotlin/utilities/associateWithNotNull.kt +++ b/core/src/main/kotlin/utilities/associateWithNotNull.kt @@ -1,6 +1,6 @@ package org.jetbrains.dokka.utilities -import org.jetbrains.dokka.* +import org.jetbrains.dokka.InternalDokkaApi @InternalDokkaApi inline fun Iterable.associateWithNotNull(valueSelector: (K) -> V?): Map { diff --git a/core/src/main/kotlin/utilities/cast.kt b/core/src/main/kotlin/utilities/cast.kt index 784b7e2a..9fe76ef6 100644 --- a/core/src/main/kotlin/utilities/cast.kt +++ b/core/src/main/kotlin/utilities/cast.kt @@ -1,6 +1,6 @@ package org.jetbrains.dokka.utilities -import org.jetbrains.dokka.* +import org.jetbrains.dokka.InternalDokkaApi @InternalDokkaApi inline fun Any.cast(): T { diff --git a/core/src/main/kotlin/utilities/parallelCollectionOperations.kt b/core/src/main/kotlin/utilities/parallelCollectionOperations.kt index d24aa7a6..cff8d735 100644 --- a/core/src/main/kotlin/utilities/parallelCollectionOperations.kt +++ b/core/src/main/kotlin/utilities/parallelCollectionOperations.kt @@ -1,7 +1,10 @@ package org.jetbrains.dokka.utilities -import kotlinx.coroutines.* -import org.jetbrains.dokka.* +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.launch +import org.jetbrains.dokka.InternalDokkaApi @InternalDokkaApi suspend inline fun Iterable.parallelMap(crossinline f: suspend (A) -> B): List = coroutineScope { diff --git a/core/src/test/kotlin/utilities/DokkaConfigurationJsonTest.kt b/core/src/test/kotlin/utilities/DokkaConfigurationJsonTest.kt index 9ac5fea0..d93ea5df 100644 --- a/core/src/test/kotlin/utilities/DokkaConfigurationJsonTest.kt +++ b/core/src/test/kotlin/utilities/DokkaConfigurationJsonTest.kt @@ -1,6 +1,9 @@ package utilities -import org.jetbrains.dokka.* +import org.jetbrains.dokka.DokkaConfigurationImpl +import org.jetbrains.dokka.DokkaSourceSetID +import org.jetbrains.dokka.DokkaSourceSetImpl +import org.jetbrains.dokka.toCompactJsonString import java.io.File import kotlin.test.Test import kotlin.test.assertEquals diff --git a/core/src/test/kotlin/utilities/JsonKtTest.kt b/core/src/test/kotlin/utilities/JsonKtTest.kt index ee78392c..301f4f5d 100644 --- a/core/src/test/kotlin/utilities/JsonKtTest.kt +++ b/core/src/test/kotlin/utilities/JsonKtTest.kt @@ -2,8 +2,8 @@ package utilities import org.jetbrains.dokka.utilities.serializeAsCompactJson import org.jetbrains.dokka.utilities.serializeAsPrettyJson -import kotlin.test.assertEquals import kotlin.test.Test +import kotlin.test.assertEquals class JsonTest { diff --git a/core/test-api/build.gradle.kts b/core/test-api/build.gradle.kts index 1eb8f00c..6b4b4d17 100644 --- a/core/test-api/build.gradle.kts +++ b/core/test-api/build.gradle.kts @@ -7,7 +7,7 @@ plugins { dependencies { api(projects.core) - implementation(projects.kotlinAnalysis) + implementation("junit:junit:4.13.2") // TODO: remove dependency to junit implementation(kotlin("reflect")) } diff --git a/core/test-api/src/main/kotlin/testApi/logger/TestLogger.kt b/core/test-api/src/main/kotlin/testApi/logger/TestLogger.kt index e70200a7..1e301735 100644 --- a/core/test-api/src/main/kotlin/testApi/logger/TestLogger.kt +++ b/core/test-api/src/main/kotlin/testApi/logger/TestLogger.kt @@ -1,7 +1,7 @@ package org.jetbrains.dokka.testApi.logger import org.jetbrains.dokka.utilities.DokkaLogger -import java.util.Collections +import java.util.* /* * Even in tests it be used in a concurrent environment, so needs to be thread safe diff --git a/core/test-api/src/main/kotlin/testApi/testRunner/TestDokkaConfigurationBuilder.kt b/core/test-api/src/main/kotlin/testApi/testRunner/TestDokkaConfigurationBuilder.kt index 50ab3bad..c63f5b2e 100644 --- a/core/test-api/src/main/kotlin/testApi/testRunner/TestDokkaConfigurationBuilder.kt +++ b/core/test-api/src/main/kotlin/testApi/testRunner/TestDokkaConfigurationBuilder.kt @@ -1,6 +1,5 @@ package testApi.testRunner -import org.intellij.markdown.MarkdownElementTypes import org.jetbrains.dokka.* import org.jetbrains.dokka.links.DRI import org.jetbrains.dokka.model.* @@ -206,6 +205,5 @@ fun dPackage( fun documentationNode(vararg texts: String): DocumentationNode { return DocumentationNode( texts.toList() - .map { Description(CustomDocTag(listOf(Text(it)), name = MarkdownElementTypes.MARKDOWN_FILE.name)) }) + .map { Description(CustomDocTag(listOf(Text(it)), name = "MARKDOWN_FILE")) }) } - diff --git a/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt b/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt index 31443b2d..cfb809ea 100644 --- a/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt +++ b/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt @@ -1,7 +1,8 @@ package org.jetbrains.dokka.testApi.testRunner -import com.intellij.openapi.application.PathManager -import org.jetbrains.dokka.* +import org.jetbrains.dokka.DokkaConfiguration +import org.jetbrains.dokka.DokkaConfigurationImpl +import org.jetbrains.dokka.ExternalDocumentationLinkImpl import org.jetbrains.dokka.model.DModule import org.jetbrains.dokka.pages.RootPageNode import org.jetbrains.dokka.plugability.DokkaContext @@ -37,7 +38,7 @@ abstract class AbstractTest, D : DokkaTestGe cleanupOutput: Boolean = true, useOutputLocationFromConfig: Boolean = false, pluginOverrides: List = emptyList(), - block: T.() -> Unit + block: T.() -> Unit, ) { val testMethods = testBuilder().apply(block).build() val configurationToUse = @@ -65,7 +66,7 @@ abstract class AbstractTest, D : DokkaTestGe cleanupOutput: Boolean = true, pluginOverrides: List = emptyList(), loggerForTest: DokkaLogger = logger, - block: T.() -> Unit + block: T.() -> Unit, ) { val testMethods = testBuilder().apply(block).build() val testDirPath = getTempDir(cleanupOutput).root.toPath().toAbsolutePath() @@ -133,7 +134,7 @@ abstract class AbstractTest, D : DokkaTestGe private fun Map.materializeFiles( root: Path = Paths.get("."), - charset: Charset = Charset.forName("utf-8") + charset: Charset = Charset.forName("utf-8"), ) = this.map { (path, content) -> val file = root.resolve(path) Files.createDirectories(file.parent) @@ -160,11 +161,17 @@ abstract class AbstractTest, D : DokkaTestGe protected val jvmStdlibPath: String? by lazy { - PathManager.getResourceRoot(Strictfp::class.java, "/kotlin/jvm/Strictfp.class") + ClassLoader.getSystemResource("kotlin/jvm/Strictfp.class") + ?.file + ?.replace("file:", "") + ?.replaceAfter(".jar", "") } protected val jsStdlibPath: String? by lazy { - PathManager.getResourceRoot(Any::class.java, "/kotlin/jquery") + ClassLoader.getSystemResource("kotlin/jquery") + ?.file + ?.replace("file:", "") + ?.replaceAfter(".jar", "") } protected val commonStdlibPath: String? by lazy { @@ -195,7 +202,7 @@ open class CoreTestMethods( open val documentablesTransformationStage: (DModule) -> Unit, open val pagesGenerationStage: (RootPageNode) -> Unit, open val pagesTransformationStage: (RootPageNode) -> Unit, - open val renderingStage: (RootPageNode, DokkaContext) -> Unit + open val renderingStage: (RootPageNode, DokkaContext) -> Unit, ) : TestMethods abstract class TestBuilder { @@ -206,7 +213,7 @@ abstract class DokkaTestGenerator( protected val configuration: DokkaConfiguration, protected val logger: DokkaLogger, protected val testMethods: T, - protected val additionalPlugins: List = emptyList() + protected val additionalPlugins: List = emptyList(), ) { abstract fun generate() } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 77374d87..6194d0a1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,13 @@ kotlinx-bcv = "0.12.1" ## Analysis kotlin-compiler = "1.8.10" kotlin-ide-plugin = "213-1.8.10-release-430-IJ6777.52" -intellij = "213.6777.52" +kotlin-jps-common = "213-1.6.21-release-334-IJ6777.52" # TODO [beresnev] not sure which version should be used exactly + +# MUST match the version of the intellij platform used in the kotlin compiler, +# otherwise this will lead to different versions of psi API and implementations +# on the classpath and will fail with hard to debug problems in runtime. +# See: https://github.com/JetBrains/kotlin/blob/e6633d3d9214402fcf3585ae8c24213a4761cc8b/gradle/versions.properties#L1 +intellij-platform = "203.8084.24" ## HTML jsoup = "1.15.3" @@ -65,10 +71,13 @@ kotlin-idePlugin-common = { module = "org.jetbrains.kotlin:common", version.ref kotlin-idePlugin-idea = { module = "org.jetbrains.kotlin:idea", version.ref = "kotlin-ide-plugin" } kotlin-idePlugin-core = { module = "org.jetbrains.kotlin:core", version.ref = "kotlin-ide-plugin" } kotlin-idePlugin-native = { module = "org.jetbrains.kotlin:native", version.ref = "kotlin-ide-plugin" } +kotlin-jps-common = { module = "org.jetbrains.kotlin:jps-common", version.ref = "kotlin-jps-common" } #### Java analysis #### -jetbrains-intellij-core = { module = "com.jetbrains.intellij.idea:intellij-core", version.ref = "intellij" } -jetbrains-intellij-jpsStandalone = { module = "com.jetbrains.intellij.idea:jps-standalone", version.ref = "intellij" } +intellij-java-psi-api = { module = "com.jetbrains.intellij.java:java-psi", version.ref = "intellij-platform" } +intellij-java-psi-impl = { module = "com.jetbrains.intellij.java:java-psi-impl", version.ref = "intellij-platform" } +intellij-platform-util-api = { module = "com.jetbrains.intellij.platform:util", version.ref = "intellij-platform" } +intellij-platform-util-rt = { module = "com.jetbrains.intellij.platform:util-rt", version.ref = "intellij-platform" } #### HTML #### jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" } diff --git a/integration-tests/cli/build.gradle.kts b/integration-tests/cli/build.gradle.kts index 4e498df1..e20529a4 100644 --- a/integration-tests/cli/build.gradle.kts +++ b/integration-tests/cli/build.gradle.kts @@ -23,13 +23,19 @@ val basePluginShadow: Configuration by configurations.creating { dependencies { basePluginShadow(projects.plugins.base) - basePluginShadow(projects.kotlinAnalysis) // compileOnly in base plugin + + // TODO [beresnev] analysis switcher + basePluginShadow(project(path = ":subprojects:analysis-kotlin-descriptors", configuration = "shadow")) } val basePluginShadowJar by tasks.register("basePluginShadowJar", ShadowJar::class) { configurations = listOf(basePluginShadow) archiveFileName.set("fat-base-plugin-$dokka_version.jar") archiveClassifier.set("") + + // service files are merged to make sure all Dokka plugins + // from the dependencies are loaded, and not just a single one. + mergeServiceFiles() } tasks.integrationTest { diff --git a/kotlin-analysis/build.gradle.kts b/kotlin-analysis/build.gradle.kts deleted file mode 100644 index a5908b4e..00000000 --- a/kotlin-analysis/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -import org.jetbrains.registerDokkaArtifactPublication - -plugins { - id("org.jetbrains.conventions.kotlin-jvm") - id("org.jetbrains.conventions.maven-publish") - id("com.github.johnrengelman.shadow") -} - -dependencies { - compileOnly(projects.core) - api(project("intellij-dependency", configuration = "shadow")) - api(project("compiler-dependency", configuration = "shadow")) -} - -registerDokkaArtifactPublication("dokkaAnalysis") { - artifactId = "dokka-analysis" -} diff --git a/kotlin-analysis/compiler-dependency/build.gradle.kts b/kotlin-analysis/compiler-dependency/build.gradle.kts deleted file mode 100644 index 5d0a01e0..00000000 --- a/kotlin-analysis/compiler-dependency/build.gradle.kts +++ /dev/null @@ -1,26 +0,0 @@ -import org.jetbrains.DokkaPublicationBuilder.Component.Shadow -import org.jetbrains.registerDokkaArtifactPublication - -plugins { - id("org.jetbrains.conventions.kotlin-jvm") - id("org.jetbrains.conventions.maven-publish") - id("com.github.johnrengelman.shadow") -} - -dependencies { - api(libs.kotlin.compiler) -} - -tasks { - shadowJar { - val dokka_version: String by project - archiveFileName.set("dokka-kotlin-analysis-compiler-$dokka_version.jar") - archiveClassifier.set("") - exclude("com/intellij/") - } -} - -registerDokkaArtifactPublication("kotlinAnalysisCompiler") { - artifactId = "kotlin-analysis-compiler" - component = Shadow -} diff --git a/kotlin-analysis/intellij-dependency/build.gradle.kts b/kotlin-analysis/intellij-dependency/build.gradle.kts deleted file mode 100644 index af099902..00000000 --- a/kotlin-analysis/intellij-dependency/build.gradle.kts +++ /dev/null @@ -1,75 +0,0 @@ -import org.jetbrains.DokkaPublicationBuilder.Component.Shadow -import org.jetbrains.registerDokkaArtifactPublication - -plugins { - id("org.jetbrains.conventions.kotlin-jvm") - id("org.jetbrains.conventions.maven-publish") - id("com.github.johnrengelman.shadow") -} - -repositories { - // Override the shared repositories defined in the root settings.gradle.kts - // These repositories are very specific and are not needed in other projects - mavenCentral() - maven("https://www.jetbrains.com/intellij-repository/snapshots") { - mavenContent { snapshotsOnly() } - } - maven("https://www.jetbrains.com/intellij-repository/releases") - maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-ide") - maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-ide-plugin-dependencies") - maven("https://cache-redirector.jetbrains.com/intellij-dependencies") - maven("https://www.myget.org/F/rd-snapshots/maven/") -} - -val intellijCore: Configuration by configurations.creating - -fun intellijCoreAnalysis() = zipTree(intellijCore.singleFile).matching { - include("intellij-core.jar") -} - -val jpsStandalone: Configuration by configurations.creating - -fun jpsModel() = zipTree(jpsStandalone.singleFile).matching { - include("jps-model.jar") - include("aalto-xml-*.jar") -} - -dependencies { - api(libs.kotlin.idePlugin.common) - api(libs.kotlin.idePlugin.idea) { - isTransitive = false - } - api(libs.kotlin.idePlugin.core) - api(libs.kotlin.idePlugin.native) - - @Suppress("UnstableApiUsage") - intellijCore(libs.jetbrains.intellij.core) - implementation(intellijCoreAnalysis()) - - @Suppress("UnstableApiUsage") - jpsStandalone(libs.jetbrains.intellij.jpsStandalone) - implementation(jpsModel()) -} - -tasks { - shadowJar { - val dokka_version: String by project - archiveFileName.set("dokka-kotlin-analysis-intellij-$dokka_version.jar") - archiveClassifier.set("") - - exclude("colorScheme/**") - exclude("fileTemplates/**") - exclude("inspectionDescriptions/**") - exclude("intentionDescriptions/**") - exclude("tips/**") - exclude("messages/**") - exclude("src/**") - exclude("**/*.kotlin_metadata") - exclude("**/*.kotlin_builtins") - } -} - -registerDokkaArtifactPublication("kotlinAnalysisIntelliJ") { - artifactId = "kotlin-analysis-intellij" - component = Shadow -} diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/AbsolutePathString.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/AbsolutePathString.kt deleted file mode 100644 index 7c8b6840..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/AbsolutePathString.kt +++ /dev/null @@ -1,3 +0,0 @@ -package org.jetbrains.dokka.analysis - -internal typealias AbsolutePathString = String diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/AnalysisContext.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/AnalysisContext.kt deleted file mode 100644 index ca83d029..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/AnalysisContext.kt +++ /dev/null @@ -1,94 +0,0 @@ -package org.jetbrains.dokka.analysis - -import org.jetbrains.dokka.DokkaConfiguration -import org.jetbrains.dokka.Platform -import org.jetbrains.dokka.utilities.DokkaLogger -import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity -import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation -import org.jetbrains.kotlin.cli.common.messages.MessageCollector -import org.jetbrains.kotlin.cli.common.messages.MessageRenderer -import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment -import java.io.Closeable -import java.io.File - -internal fun createAnalysisContext( - logger: DokkaLogger, - sourceSets: List, - sourceSet: DokkaConfiguration.DokkaSourceSet, - analysisConfiguration: DokkaAnalysisConfiguration -): AnalysisContext { - val parentSourceSets = sourceSets.filter { it.sourceSetID in sourceSet.dependentSourceSets } - val classpath = sourceSet.classpath + parentSourceSets.flatMap { it.classpath } - val sources = sourceSet.sourceRoots + parentSourceSets.flatMap { it.sourceRoots } - - return createAnalysisContext( - logger = logger, - classpath = classpath, - sourceRoots = sources, - sourceSet = sourceSet, - analysisConfiguration = analysisConfiguration - ) -} - -internal fun createAnalysisContext( - logger: DokkaLogger, - classpath: List, - sourceRoots: Set, - sourceSet: DokkaConfiguration.DokkaSourceSet, - analysisConfiguration: DokkaAnalysisConfiguration -): AnalysisContext { - val analysisEnvironment = AnalysisEnvironment(DokkaMessageCollector(logger), sourceSet.analysisPlatform).apply { - if (analysisPlatform == Platform.jvm) { - configureJdkClasspathRoots() - } - addClasspath(classpath) - addSources(sourceRoots) - - loadLanguageVersionSettings(sourceSet.languageVersion, sourceSet.apiVersion) - } - - val environment = analysisEnvironment.createCoreEnvironment() - val (facade, _) = analysisEnvironment.createResolutionFacade( - environment, - analysisConfiguration.ignoreCommonBuiltIns - ) - - return AnalysisContext(environment, facade, analysisEnvironment) -} - -class DokkaMessageCollector(private val logger: DokkaLogger) : MessageCollector { - override fun clear() { - seenErrors = false - } - - private var seenErrors = false - - override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageSourceLocation?) { - if (severity == CompilerMessageSeverity.ERROR) { - seenErrors = true - } - logger.info(MessageRenderer.PLAIN_FULL_PATHS.render(severity, message, location)) - } - - override fun hasErrors() = seenErrors -} - -// It is not data class due to ill-defined equals -class AnalysisContext( - environment: KotlinCoreEnvironment, - facade: DokkaResolutionFacade, - private val analysisEnvironment: AnalysisEnvironment -) : Closeable { - private var isClosed: Boolean = false - val environment: KotlinCoreEnvironment = environment - get() = field.takeUnless { isClosed } ?: throw IllegalStateException("AnalysisEnvironment is already closed") - val facade: DokkaResolutionFacade = facade - get() = field.takeUnless { isClosed } ?: throw IllegalStateException("AnalysisEnvironment is already closed") - - operator fun component1() = environment - operator fun component2() = facade - override fun close() { - isClosed = true - analysisEnvironment.dispose() - } -} diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/AnalysisEnvironment.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/AnalysisEnvironment.kt deleted file mode 100644 index bbc6dda6..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/AnalysisEnvironment.kt +++ /dev/null @@ -1,618 +0,0 @@ -package org.jetbrains.dokka.analysis - -import com.intellij.core.CoreApplicationEnvironment -import com.intellij.mock.MockApplication -import com.intellij.mock.MockComponentManager -import com.intellij.openapi.Disposable -import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.extensions.Extensions -import com.intellij.openapi.project.Project -import com.intellij.openapi.util.Disposer -import com.intellij.openapi.vfs.StandardFileSystems -import com.intellij.psi.PsiNameHelper -import com.intellij.psi.impl.PsiNameHelperImpl -import com.intellij.psi.impl.source.javadoc.JavadocManagerImpl -import com.intellij.psi.javadoc.CustomJavadocTagProvider -import com.intellij.psi.javadoc.JavadocManager -import com.intellij.psi.javadoc.JavadocTagInfo -import com.intellij.psi.search.GlobalSearchScope -import org.jetbrains.dokka.Platform -import org.jetbrains.dokka.analysis.resolve.* -import org.jetbrains.kotlin.analyzer.* -import org.jetbrains.kotlin.analyzer.common.* -import org.jetbrains.kotlin.builtins.DefaultBuiltIns -import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns -import org.jetbrains.kotlin.caches.resolve.* -import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys -import org.jetbrains.kotlin.cli.common.config.ContentRoot -import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot -import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot -import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity -import org.jetbrains.kotlin.cli.common.messages.MessageCollector -import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles -import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider -import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment -import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM -import org.jetbrains.kotlin.cli.jvm.config.* -import org.jetbrains.kotlin.cli.jvm.index.JavaRoot -import org.jetbrains.kotlin.config.* -import org.jetbrains.kotlin.context.ProjectContext -import org.jetbrains.kotlin.context.withModule -import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl -import org.jetbrains.kotlin.extensions.ApplicationExtensionDescriptor -import org.jetbrains.kotlin.ide.konan.NativePlatformKindResolution -import org.jetbrains.kotlin.idea.klib.KlibLoadingMetadataCache -import org.jetbrains.kotlin.idea.klib.getCompatibilityInfo -import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices -import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION -import org.jetbrains.kotlin.library.KotlinLibrary -import org.jetbrains.kotlin.library.ToolingSingleFileKlibResolveStrategy -import org.jetbrains.kotlin.library.resolveSingleFileKlib -import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl -import org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaClass -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.platform.CommonPlatforms -import org.jetbrains.kotlin.platform.IdePlatformKind -import org.jetbrains.kotlin.platform.TargetPlatform -import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind -import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind -import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind -import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind -import org.jetbrains.kotlin.platform.js.JsPlatforms -import org.jetbrains.kotlin.platform.jvm.JvmPlatforms -import org.jetbrains.kotlin.platform.jvm.JvmPlatforms.unspecifiedJvmPlatform -import org.jetbrains.kotlin.platform.konan.NativePlatforms -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.CliSealedClassInheritorsProvider -import org.jetbrains.kotlin.resolve.CompilerEnvironment -import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices -import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters -import org.jetbrains.kotlin.resolve.jvm.JvmResolverForModuleFactory -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices -import org.jetbrains.kotlin.resolve.konan.platform.NativePlatformAnalyzerServices -import org.jetbrains.kotlin.storage.LockBasedStorageManager -import java.io.File -import org.jetbrains.kotlin.konan.file.File as KFile - -const val JAR_SEPARATOR = "!/" - -/** - * Kotlin as a service entry point - * - * Configures environment, analyses files and provides facilities to perform code processing without emitting bytecode - * - * $messageCollector: required by compiler infrastructure and will receive all compiler messages - * $body: optional and can be used to configure environment without creating local variable - */ -class AnalysisEnvironment(val messageCollector: MessageCollector, val analysisPlatform: Platform) : Disposable { - val configuration = CompilerConfiguration() - - init { - configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector) - } - - fun createCoreEnvironment(): KotlinCoreEnvironment { - System.setProperty("idea.io.use.nio2", "true") - System.setProperty("idea.ignore.disabled.plugins", "true") - - val configFiles = when (analysisPlatform) { - Platform.jvm, Platform.common -> EnvironmentConfigFiles.JVM_CONFIG_FILES - Platform.native -> EnvironmentConfigFiles.NATIVE_CONFIG_FILES - Platform.js, Platform.wasm -> EnvironmentConfigFiles.JS_CONFIG_FILES - } - - val environment = KotlinCoreEnvironment.createForProduction(this, configuration, configFiles) - val projectComponentManager = environment.project as MockComponentManager - - CoreApplicationEnvironment.registerExtensionPoint( - environment.project.extensionArea, - JavadocTagInfo.EP_NAME, JavadocTagInfo::class.java - ) - - @Suppress("DEPRECATION") - val extensionArea = Extensions.getRootArea() - - CoreApplicationEnvironment.registerExtensionPoint( - extensionArea, - CustomJavadocTagProvider.EP_NAME, CustomJavadocTagProvider::class.java - ) - - // TODO: figure out why compilation fails with unresolved `CoreApplicationEnvironment.registerApplicationService(...)` - // call, fix it appropriately - with(ApplicationManager.getApplication() as MockApplication) { - if (getService(KlibLoadingMetadataCache::class.java) == null) - registerService(KlibLoadingMetadataCache::class.java, KlibLoadingMetadataCache()) - } - - projectComponentManager.registerService( - JavadocManager::class.java, - JavadocManagerImpl(environment.project) - ) - - projectComponentManager.registerService( - PsiNameHelper::class.java, - PsiNameHelperImpl(environment.project) - ) - - projectComponentManager.registerService( - CustomJavadocTagProvider::class.java, - CustomJavadocTagProvider { emptyList() } - ) - - registerExtensionPoint( - ApplicationExtensionDescriptor("org.jetbrains.kotlin.idePlatformKind", IdePlatformKind::class.java), - listOf( - CommonIdePlatformKind, - JvmIdePlatformKind, - JsIdePlatformKind, - NativeIdePlatformKind - ), - this - ) - - registerExtensionPoint( - IdePlatformKindResolution, - listOf( - CommonPlatformKindResolution(), - JvmPlatformKindResolution(), - JsPlatformKindResolution(), - NativePlatformKindResolution() - ), - this - ) - - return environment - } - - private fun createSourceModuleSearchScope(project: Project, sourceFiles: List): GlobalSearchScope = - when (analysisPlatform) { - Platform.jvm -> TopDownAnalyzerFacadeForJVM.newModuleSearchScope(project, sourceFiles) - Platform.js, Platform.common, Platform.native, Platform.wasm -> GlobalSearchScope.filesScope( - project, - sourceFiles.map { it.virtualFile }.toSet() - ) - } - - fun createResolutionFacade(environment: KotlinCoreEnvironment, ignoreCommonBuiltIns: Boolean = false): Pair { - val projectContext = ProjectContext(environment.project, "Dokka") - val sourceFiles = environment.getSourceFiles() - - val targetPlatform = when (analysisPlatform) { - Platform.js, Platform.wasm -> JsPlatforms.defaultJsPlatform - Platform.common -> CommonPlatforms.defaultCommonPlatform - Platform.native -> NativePlatforms.unspecifiedNativePlatform - Platform.jvm -> JvmPlatforms.defaultJvmPlatform - } - - val kotlinLibraries: Map = resolveKotlinLibraries() - - val commonDependencyContainer = if (analysisPlatform == Platform.common) DokkaKlibMetadataCommonDependencyContainer( - kotlinLibraries.values.toList(), - environment.configuration, - LockBasedStorageManager("DokkaKlibMetadata") - ) else null - - val extraModuleDependencies = kotlinLibraries.values.registerLibraries() + commonDependencyContainer?.moduleInfos.orEmpty() - - val library = object : LibraryModuleInfo { - override val analyzerServices: PlatformDependentAnalyzerServices = - analysisPlatform.analyzerServices() - override val name: Name = Name.special("") - override val platform: TargetPlatform = targetPlatform - override fun dependencies(): List = listOf(this) - override fun getLibraryRoots(): Collection = classpath - .map { libraryFile -> libraryFile.absolutePath } - .filter { path -> path !in kotlinLibraries } - } - - val module = object : ModuleInfo { - override val analyzerServices: PlatformDependentAnalyzerServices = - analysisPlatform.analyzerServices() - override val name: Name = Name.special("") - override val platform: TargetPlatform = targetPlatform - override fun dependencies(): List = - listOf(this, library) + extraModuleDependencies - - /** - * Only for common platform ignore BuiltIns for StdLib since it can cause a conflict - * between BuiltIns from a compiler and ones from source code. - */ - override fun dependencyOnBuiltIns(): ModuleInfo.DependencyOnBuiltIns { - return if (analysisPlatform == Platform.common && ignoreCommonBuiltIns) ModuleInfo.DependencyOnBuiltIns.NONE - else super.dependencyOnBuiltIns() - } - } - - val sourcesScope = createSourceModuleSearchScope(environment.project, sourceFiles) - val modulesContent: (ModuleInfo) -> ModuleContent = { - when (it) { - library -> ModuleContent(it, emptyList(), GlobalSearchScope.notScope(sourcesScope)) - module -> ModuleContent(it, emptyList(), GlobalSearchScope.allScope(environment.project)) - is DokkaKlibLibraryInfo -> { - if (it.libraryRoot in kotlinLibraries) - ModuleContent(it, emptyList(), GlobalSearchScope.notScope(sourcesScope)) - else null - } - is CommonKlibModuleInfo -> ModuleContent(it, emptyList(), GlobalSearchScope.notScope(sourcesScope)) - else -> null - } ?: throw IllegalArgumentException("Unexpected module info") - } - - var builtIns: JvmBuiltIns? = null - - val resolverForProject = when (analysisPlatform) { - Platform.jvm -> { - builtIns = JvmBuiltIns( - projectContext.storageManager, - JvmBuiltIns.Kind.FROM_CLASS_LOADER - ) // TODO we should use FROM_DEPENDENCIES - createJvmResolverForProject( - projectContext, - module, - library, - modulesContent, - sourcesScope, - builtIns - ) - } - Platform.common -> createCommonResolverForProject( - projectContext, - module, - modulesContent, - environment, - commonDependencyContainer - ) - Platform.js, Platform.wasm -> createJsResolverForProject(projectContext, module, modulesContent) - Platform.native -> createNativeResolverForProject(projectContext, module, modulesContent) - - } - val libraryModuleDescriptor = resolverForProject.descriptorForModule(library) - val moduleDescriptor = resolverForProject.descriptorForModule(module) - builtIns?.initialize(moduleDescriptor, true) - - val resolverForLibrary = - resolverForProject.resolverForModule(library) // Required before module to initialize library properly - val resolverForModule = resolverForProject.resolverForModule(module) - val libraryResolutionFacade = - DokkaResolutionFacade( - environment.project, - libraryModuleDescriptor, - resolverForLibrary - ) - val created = - DokkaResolutionFacade( - environment.project, - moduleDescriptor, - resolverForModule - ) - val projectComponentManager = environment.project as MockComponentManager - projectComponentManager.registerService( - KotlinCacheService:: - class.java, - CoreKotlinCacheService(created) - ) - - return created to libraryResolutionFacade - } - - private fun Platform.analyzerServices() = when (this) { - Platform.js, Platform.wasm -> JsPlatformAnalyzerServices - Platform.common -> CommonPlatformAnalyzerServices - Platform.native -> NativePlatformAnalyzerServices - Platform.jvm -> JvmPlatformAnalyzerServices - } - - fun Collection.registerLibraries(): List { - if (analysisPlatform != Platform.native && analysisPlatform != Platform.js && analysisPlatform != Platform.wasm) return emptyList() - val dependencyResolver = DokkaKlibLibraryDependencyResolver() - val analyzerServices = analysisPlatform.analyzerServices() - - return map { kotlinLibrary -> - if (analysisPlatform == org.jetbrains.dokka.Platform.native) DokkaNativeKlibLibraryInfo( - kotlinLibrary, - analyzerServices, - dependencyResolver - ) - else DokkaJsKlibLibraryInfo(kotlinLibrary, analyzerServices, dependencyResolver) - } - } - - @OptIn(ExperimentalStdlibApi::class) - private fun resolveKotlinLibraries(): Map { - return if (analysisPlatform == Platform.jvm) emptyMap() else buildMap { - classpath - .filter { it.isDirectory || it.extension == KLIB_FILE_EXTENSION } - .forEach { libraryFile -> - try { - val kotlinLibrary = resolveSingleFileKlib( - libraryFile = KFile(libraryFile.absolutePath), - strategy = ToolingSingleFileKlibResolveStrategy - ) - - if (kotlinLibrary.getCompatibilityInfo().isCompatible) { - // exists, is KLIB, has compatible format - put( - libraryFile.absolutePath, - kotlinLibrary - ) - } - } catch (e: Throwable) { - configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) - .report(CompilerMessageSeverity.WARNING, "Can not resolve KLIB. " + e.message) - } - } - } - } - - private fun createCommonResolverForProject( - projectContext: ProjectContext, - module: ModuleInfo, - modulesContent: (ModuleInfo) -> ModuleContent, - environment: KotlinCoreEnvironment, - dependencyContainer: CommonDependenciesContainer? - ): ResolverForProject { - return object : AbstractResolverForProject( - "Dokka", - projectContext, - modules = module.dependencies() - ) { - override fun modulesContent(module: ModuleInfo): ModuleContent = modulesContent(module) - - override fun builtInsForModule(module: ModuleInfo): KotlinBuiltIns = DefaultBuiltIns.Instance - - override fun createResolverForModule( - descriptor: ModuleDescriptor, - moduleInfo: ModuleInfo - ): ResolverForModule = - CommonResolverForModuleFactory( - CommonAnalysisParameters( - metadataPartProviderFactory = { content -> - environment.createPackagePartProvider(content.moduleContentScope) - } - ), - CompilerEnvironment, - unspecifiedJvmPlatform, - true, - dependencyContainer - ).createResolverForModule( - descriptor as ModuleDescriptorImpl, - projectContext.withModule(descriptor), - modulesContent(moduleInfo), - this, - LanguageVersionSettingsImpl.DEFAULT, - CliSealedClassInheritorsProvider, - ) - - override fun sdkDependency(module: ModuleInfo): ModuleInfo? = null - } - } - - private fun createJsResolverForProject( - projectContext: ProjectContext, - module: ModuleInfo, - modulesContent: (ModuleInfo) -> ModuleContent - ): ResolverForProject { - return object : AbstractResolverForProject( - "Dokka", - projectContext, - modules = module.dependencies() - ) { - override fun modulesContent(module: ModuleInfo): ModuleContent = modulesContent(module) - override fun createResolverForModule( - descriptor: ModuleDescriptor, - moduleInfo: ModuleInfo - ): ResolverForModule = DokkaJsResolverForModuleFactory(CompilerEnvironment).createResolverForModule( - descriptor as ModuleDescriptorImpl, - projectContext.withModule(descriptor), - modulesContent(moduleInfo), - this, - LanguageVersionSettingsImpl.DEFAULT, - CliSealedClassInheritorsProvider, - ) - - override fun builtInsForModule(module: ModuleInfo): KotlinBuiltIns = DefaultBuiltIns.Instance - - override fun sdkDependency(module: ModuleInfo): ModuleInfo? = null - } - } - - private fun createNativeResolverForProject( - projectContext: ProjectContext, - module: ModuleInfo, - modulesContent: (ModuleInfo) -> ModuleContent - ): ResolverForProject { - return object : AbstractResolverForProject( - "Dokka", - projectContext, - modules = module.dependencies() - ) { - override fun modulesContent(module: ModuleInfo): ModuleContent = modulesContent(module) - override fun createResolverForModule( - descriptor: ModuleDescriptor, - moduleInfo: ModuleInfo - ): ResolverForModule { - - return DokkaNativeResolverForModuleFactory(CompilerEnvironment).createResolverForModule( - descriptor as ModuleDescriptorImpl, - projectContext.withModule(descriptor), - modulesContent(moduleInfo), - this, - LanguageVersionSettingsImpl.DEFAULT, - CliSealedClassInheritorsProvider, - ) - } - - override fun builtInsForModule(module: ModuleInfo): KotlinBuiltIns = DefaultBuiltIns.Instance - - override fun sdkDependency(module: ModuleInfo): ModuleInfo? = null - } - } - - private fun createJvmResolverForProject( - projectContext: ProjectContext, - module: ModuleInfo, - library: LibraryModuleInfo, - modulesContent: (ModuleInfo) -> ModuleContent, - sourcesScope: GlobalSearchScope, - builtIns: KotlinBuiltIns - ): ResolverForProject { - val javaRoots = classpath - .mapNotNull { file -> - val rootFile = when (file.extension) { - "jar" -> StandardFileSystems.jar().findFileByPath("${file.absolutePath}$JAR_SEPARATOR") - else -> StandardFileSystems.local().findFileByPath(file.absolutePath) - } - rootFile?.let { JavaRoot(it, JavaRoot.RootType.BINARY) } - } - - return object : AbstractResolverForProject( - "Dokka", - projectContext, - modules = listOf(module, library) - ) { - override fun modulesContent(module: ModuleInfo): ModuleContent = - when (module) { - library -> ModuleContent(module, emptyList(), GlobalSearchScope.notScope(sourcesScope)) - module -> ModuleContent(module, emptyList(), sourcesScope) - else -> throw IllegalArgumentException("Unexpected module info") - } - - override fun builtInsForModule(module: ModuleInfo): KotlinBuiltIns = builtIns - - override fun createResolverForModule( - descriptor: ModuleDescriptor, - moduleInfo: ModuleInfo - ): ResolverForModule = JvmResolverForModuleFactory( - JvmPlatformParameters(packagePartProviderFactory = { content -> - JvmPackagePartProvider( - configuration.languageVersionSettings, - content.moduleContentScope - ) - .apply { - addRoots(javaRoots, messageCollector) - } - }, moduleByJavaClass = { - val file = - (it as? BinaryJavaClass)?.virtualFile ?: (it as JavaClassImpl).psi.containingFile.virtualFile - if (file in sourcesScope) - module - else - library - }, resolverForReferencedModule = null, - useBuiltinsProviderForModule = { false }), - CompilerEnvironment, - unspecifiedJvmPlatform - ).createResolverForModule( - descriptor as ModuleDescriptorImpl, - projectContext.withModule(descriptor), - modulesContent(moduleInfo), - this, - configuration.languageVersionSettings, - CliSealedClassInheritorsProvider, - ) - - override fun sdkDependency(module: ModuleInfo): ModuleInfo? = null - } - } - - fun loadLanguageVersionSettings(languageVersionString: String?, apiVersionString: String?) { - val languageVersion = LanguageVersion.fromVersionString(languageVersionString) ?: LanguageVersion.LATEST_STABLE - val apiVersion = - apiVersionString?.let { ApiVersion.parse(it) } ?: ApiVersion.createByLanguageVersion(languageVersion) - configuration.languageVersionSettings = LanguageVersionSettingsImpl( - languageVersion = languageVersion, - apiVersion = apiVersion, analysisFlags = hashMapOf( - // force to resolve light classes (lazily by default) - AnalysisFlags.eagerResolveOfLightClasses to true - ) - ) - } - - /** - * Classpath for this environment. - */ - val classpath: List - get() = configuration.jvmClasspathRoots + configuration.getList(JSConfigurationKeys.LIBRARIES) - .mapNotNull { File(it) } - - /** - * Adds list of paths to classpath. - * $paths: collection of files to add - */ - fun addClasspath(paths: List) { - if (analysisPlatform == Platform.js || analysisPlatform == Platform.wasm) { - configuration.addAll(JSConfigurationKeys.LIBRARIES, paths.map { it.absolutePath }) - } else { - configuration.addJvmClasspathRoots(paths) - } - } - - // Set up JDK classpath roots explicitly because of https://github.com/JetBrains/kotlin/commit/f89765eb33dd95c8de33a919cca83651b326b246 - fun configureJdkClasspathRoots() = configuration.configureJdkClasspathRoots() - /** - * Adds path to classpath. - * $path: path to add - */ - fun addClasspath(path: File) { - if (analysisPlatform == Platform.js || analysisPlatform == Platform.wasm) { - configuration.add(JSConfigurationKeys.LIBRARIES, path.absolutePath) - } else { - configuration.addJvmClasspathRoot(path) - } - } - - /** - * List of source roots for this environment. - */ - val sources: List - get() = configuration.get(CLIConfigurationKeys.CONTENT_ROOTS) - ?.filterIsInstance() - ?.map { it.path } ?: emptyList() - - /** - * Adds list of paths to source roots. - * $list: collection of files to add - */ - fun addSources(sourceDirectories: Iterable) { - sourceDirectories.forEach { directory -> - configuration.addKotlinSourceRoot(directory.path) - if (directory.isDirectory || directory.extension == "java") { - configuration.addJavaSourceRoot(directory) - } - } - } - - fun addRoots(list: List) { - configuration.addAll(CLIConfigurationKeys.CONTENT_ROOTS, list) - } - - /** - * Disposes the environment and frees all associated resources. - */ - override fun dispose() { - Disposer.dispose(this) - } - - companion object { - private fun registerExtensionPoint( - appExtension: ApplicationExtensionDescriptor, - instances: List, - disposable: Disposable - ) { - @Suppress("DEPRECATION") - val extensionArea = Extensions.getRootArea() - - if (extensionArea.hasExtensionPoint(appExtension.extensionPointName)) { - return - } - - appExtension.registerExtensionPoint() - instances.forEach { extension -> appExtension.registerExtension(extension, disposable) } - } - } -} - - diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/CallableFactory.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/CallableFactory.kt deleted file mode 100644 index de48cfae..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/CallableFactory.kt +++ /dev/null @@ -1,31 +0,0 @@ -package org.jetbrains.dokka.analysis - -import com.intellij.psi.PsiField -import com.intellij.psi.PsiMethod -import org.jetbrains.dokka.links.Callable -import org.jetbrains.dokka.links.JavaClassReference -import org.jetbrains.dokka.links.TypeReference -import org.jetbrains.kotlin.descriptors.CallableDescriptor - -fun Callable.Companion.from(descriptor: CallableDescriptor, name: String? = null) = with(descriptor) { - Callable( - name ?: descriptor.name.asString(), - extensionReceiverParameter?.let { TypeReference.from(it) }, - valueParameters.mapNotNull { TypeReference.from(it) } - ) -} - -fun Callable.Companion.from(psi: PsiMethod) = with(psi) { - Callable( - name, - null, - parameterList.parameters.map { param -> JavaClassReference(param.type.canonicalText) }) -} - -fun Callable.Companion.from(psi: PsiField): Callable { - return Callable( - name = psi.name, - receiver = null, - params = emptyList() - ) -} diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/CoreKotlinCacheService.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/CoreKotlinCacheService.kt deleted file mode 100644 index e2cd328a..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/CoreKotlinCacheService.kt +++ /dev/null @@ -1,54 +0,0 @@ -package org.jetbrains.dokka.analysis - -import com.intellij.psi.PsiFile -import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.caches.resolve.KotlinCacheService -import org.jetbrains.kotlin.caches.resolve.PlatformAnalysisSettings -import org.jetbrains.kotlin.idea.resolve.ResolutionFacade -import org.jetbrains.kotlin.platform.TargetPlatform -import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.resolve.diagnostics.KotlinSuppressCache - - -class CoreKotlinCacheService(private val resolutionFacade: DokkaResolutionFacade) : KotlinCacheService { - override fun getResolutionFacade(elements: List): ResolutionFacade { - return resolutionFacade - } - - override fun getResolutionFacade(element: KtElement): ResolutionFacade { - return resolutionFacade - } - - override fun getResolutionFacadeByFile( - file: PsiFile, - platform: org.jetbrains.kotlin.platform.TargetPlatform - ): ResolutionFacade { - return resolutionFacade - } - - override fun getResolutionFacadeByModuleInfo( - moduleInfo: ModuleInfo, - settings: PlatformAnalysisSettings - ): ResolutionFacade { - return resolutionFacade - } - - override fun getResolutionFacadeByModuleInfo( - moduleInfo: ModuleInfo, - platform: org.jetbrains.kotlin.platform.TargetPlatform - ): ResolutionFacade { - return resolutionFacade - } - - override fun getResolutionFacadeWithForcedPlatform( - elements: List, - platform: TargetPlatform - ): ResolutionFacade { - return resolutionFacade - } - - override fun getSuppressionCache(): KotlinSuppressCache { - throw UnsupportedOperationException() - } - -} diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/DRIFactory.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/DRIFactory.kt deleted file mode 100644 index 73b20885..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/DRIFactory.kt +++ /dev/null @@ -1,50 +0,0 @@ -package org.jetbrains.dokka.analysis - -import com.intellij.psi.* -import org.jetbrains.dokka.links.* -import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.descriptors.impl.EnumEntrySyntheticClassDescriptor -import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf -import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf -import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull -import org.jetbrains.kotlin.utils.addToStdlib.safeAs - -fun DRI.Companion.from(descriptor: DeclarationDescriptor) = descriptor.parentsWithSelf.run { - val parameter = firstIsInstanceOrNull() - val callable = parameter?.containingDeclaration ?: firstIsInstanceOrNull() - - DRI( - packageName = firstIsInstanceOrNull()?.fqName?.asString() ?: "", - classNames = (filterIsInstance() + filterIsInstance()).toList() - .takeIf { it.isNotEmpty() } - ?.asReversed() - ?.joinToString(separator = ".") { it.name.asString() }, - callable = callable?.let { Callable.from(it) }, - target = DriTarget.from(parameter ?: descriptor), - extra = if (descriptor is EnumEntrySyntheticClassDescriptor || descriptor.safeAs()?.kind == ClassKind.ENUM_ENTRY) - DRIExtraContainer().also { it[EnumEntryDRIExtra] = EnumEntryDRIExtra }.encode() - else null - ) -} - -fun DRI.Companion.from(psi: PsiElement) = psi.parentsWithSelf.run { - val psiMethod = firstIsInstanceOrNull() - val psiField = firstIsInstanceOrNull() - val classes = filterIsInstance().filterNot { it is PsiTypeParameter } - .toList() // We only want exact PsiClass types, not PsiTypeParameter subtype - val additionalClasses = if (psi is PsiEnumConstant) listOfNotNull(psiField?.name) else emptyList() - DRI( - packageName = classes.lastOrNull()?.qualifiedName?.substringBeforeLast('.', "") ?: "", - classNames = (additionalClasses + classes.mapNotNull { it.name }).takeIf { it.isNotEmpty() } - ?.asReversed()?.joinToString("."), - // The fallback strategy test whether psi is not `PsiEnumConstant`. The reason behind this is that - // we need unified DRI for both Java and Kotlin enums, so we can link them properly and treat them alike. - // To achieve that, we append enum name to classNames list and leave the callable part set to null. For Kotlin enums - // it is by default, while for Java enums we have to explicitly test for that in this `takeUnless` condition. - callable = psiMethod?.let { Callable.from(it) } ?: psiField?.takeUnless { psi is PsiEnumConstant }?.let { Callable.from(it) }, - target = DriTarget.from(psi), - extra = if (psi is PsiEnumConstant) - DRIExtraContainer().also { it[EnumEntryDRIExtra] = EnumEntryDRIExtra }.encode() - else null - ) -} diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/DRITargetFactory.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/DRITargetFactory.kt deleted file mode 100644 index e1e93962..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/DRITargetFactory.kt +++ /dev/null @@ -1,42 +0,0 @@ -package org.jetbrains.dokka.analysis - -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiMethod -import com.intellij.psi.PsiParameter -import com.intellij.psi.PsiTypeParameter -import org.jetbrains.dokka.links.DriTarget -import org.jetbrains.dokka.links.PointingToCallableParameters -import org.jetbrains.dokka.links.PointingToDeclaration -import org.jetbrains.dokka.links.PointingToGenericParameters -import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf -import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf -import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull - -fun DriTarget.Companion.from(descriptor: DeclarationDescriptor): DriTarget = descriptor.parentsWithSelf.run { - return when (descriptor) { - is TypeParameterDescriptor -> PointingToGenericParameters(descriptor.index) - is ValueParameterDescriptor -> PointingToCallableParameters(descriptor.index) - else -> { - val callable = firstIsInstanceOrNull() - val params = - callable?.let { listOfNotNull(it.extensionReceiverParameter) + it.valueParameters }.orEmpty() - val parameterDescriptor = firstIsInstanceOrNull() - - parameterDescriptor?.let { PointingToCallableParameters(params.indexOf(it)) } - ?: PointingToDeclaration - } - } -} - - -fun DriTarget.Companion.from(psi: PsiElement): DriTarget = psi.parentsWithSelf.run { - return when (psi) { - is PsiTypeParameter -> PointingToGenericParameters(psi.index) - else -> firstIsInstanceOrNull()?.let { - val callable = firstIsInstanceOrNull() - val params = (callable?.parameterList?.parameters).orEmpty() - PointingToCallableParameters(params.indexOf(it)) - } ?: PointingToDeclaration - } -} diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/Documentable.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/Documentable.kt deleted file mode 100644 index 0c55fed4..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/Documentable.kt +++ /dev/null @@ -1,14 +0,0 @@ -package org.jetbrains.dokka.analysis - -import com.intellij.psi.PsiNamedElement -import org.jetbrains.dokka.model.DocumentableSource -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.load.kotlin.toSourceElement - -class DescriptorDocumentableSource(val descriptor: DeclarationDescriptor) : DocumentableSource { - override val path = descriptor.toSourceElement.containingFile.toString() -} - -class PsiDocumentableSource(val psi: PsiNamedElement) : DocumentableSource { - override val path = psi.containingFile.virtualFile.path -} diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/DokkaResolutionFacade.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/DokkaResolutionFacade.kt deleted file mode 100644 index b278ef6e..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/DokkaResolutionFacade.kt +++ /dev/null @@ -1,123 +0,0 @@ -@file:OptIn(FrontendInternals::class) - -package org.jetbrains.dokka.analysis - -import com.google.common.collect.ImmutableMap -import com.intellij.openapi.project.Project -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.analyzer.AnalysisResult -import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.analyzer.ResolverForModule -import org.jetbrains.kotlin.analyzer.ResolverForProject -import org.jetbrains.kotlin.container.getService -import org.jetbrains.kotlin.container.tryGetService -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.diagnostics.DiagnosticSink -import org.jetbrains.kotlin.idea.FrontendInternals -import org.jetbrains.kotlin.idea.resolve.ResolutionFacade -import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.psi.KtExpression -import org.jetbrains.kotlin.psi.KtParameter -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.BindingTrace -import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode -import org.jetbrains.kotlin.resolve.lazy.ResolveSession -import org.jetbrains.kotlin.types.KotlinType -import org.jetbrains.kotlin.util.slicedMap.ReadOnlySlice -import org.jetbrains.kotlin.util.slicedMap.WritableSlice - -class DokkaResolutionFacade( - override val project: Project, - override val moduleDescriptor: ModuleDescriptor, - val resolverForModule: ResolverForModule -) : ResolutionFacade { - override fun analyzeWithAllCompilerChecks( - elements: Collection, - callback: DiagnosticSink.DiagnosticsCallback? - ): AnalysisResult { - throw UnsupportedOperationException() - } - - @OptIn(FrontendInternals::class) - override fun tryGetFrontendService(element: PsiElement, serviceClass: Class): T? { - return resolverForModule.componentProvider.tryGetService(serviceClass) - } - - override fun resolveToDescriptor( - declaration: KtDeclaration, - bodyResolveMode: BodyResolveMode - ): DeclarationDescriptor { - return resolveSession.resolveToDescriptor(declaration) - } - - override fun analyze(elements: Collection, bodyResolveMode: BodyResolveMode): BindingContext { - throw UnsupportedOperationException() - } - - val resolveSession: ResolveSession get() = getFrontendService(ResolveSession::class.java) - - override fun analyze(element: KtElement, bodyResolveMode: BodyResolveMode): BindingContext { - if (element is KtDeclaration) { - val descriptor = resolveToDescriptor(element) - return object : BindingContext { - override fun getKeys(p0: WritableSlice?): Collection { - throw UnsupportedOperationException() - } - - override fun getType(p0: KtExpression): KotlinType? { - throw UnsupportedOperationException() - } - - override fun get(slice: ReadOnlySlice?, key: K): V? { - if (key != element) { - throw UnsupportedOperationException() - } - @Suppress("UNCHECKED_CAST") - return when { - slice == BindingContext.DECLARATION_TO_DESCRIPTOR -> descriptor as V - slice == BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER && (element as KtParameter).hasValOrVar() -> descriptor as V - else -> null - } - } - - override fun getDiagnostics(): Diagnostics { - throw UnsupportedOperationException() - } - - override fun addOwnDataTo(p0: BindingTrace, p1: Boolean) { - throw UnsupportedOperationException() - } - - override fun getSliceContents(p0: ReadOnlySlice): ImmutableMap { - throw UnsupportedOperationException() - } - - } - } - throw UnsupportedOperationException() - } - - override fun getFrontendService(element: PsiElement, serviceClass: Class): T { - throw UnsupportedOperationException() - } - - override fun getFrontendService(serviceClass: Class): T { - return resolverForModule.componentProvider.getService(serviceClass) - } - - override fun getFrontendService(moduleDescriptor: ModuleDescriptor, serviceClass: Class): T { - return resolverForModule.componentProvider.getService(serviceClass) - } - - override fun getIdeService(serviceClass: Class): T { - throw UnsupportedOperationException() - } - - override fun getResolverForProject(): ResolverForProject { - throw UnsupportedOperationException() - } - -} diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/JvmDependenciesIndexImpl.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/JvmDependenciesIndexImpl.kt deleted file mode 100644 index 1075665e..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/JvmDependenciesIndexImpl.kt +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.cli.jvm.index - -import com.intellij.ide.highlighter.JavaClassFileType -import com.intellij.ide.highlighter.JavaFileType -import com.intellij.openapi.vfs.VfsUtilCore -import com.intellij.openapi.vfs.VirtualFile -import it.unimi.dsi.fastutil.ints.IntArrayList -import gnu.trove.THashMap -import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.name.FqName -import java.util.* - -// speeds up finding files/classes in classpath/java source roots -// NOT THREADSAFE, needs to be adapted/removed if we want compiler to be multithreaded -// the main idea of this class is for each package to store roots which contains it to avoid excessive file system traversal -class JvmDependenciesIndexImpl(_roots: List) : JvmDependenciesIndex { - //these fields are computed based on _roots passed to constructor which are filled in later - private val roots: List by lazy { _roots.toList() } - - private val maxIndex: Int - get() = roots.size - - // each "Cache" object corresponds to a package - private class Cache { - private val innerPackageCaches = HashMap() - - operator fun get(name: String) = innerPackageCaches.getOrPut(name, ::Cache) - - // indices of roots that are known to contain this package - // if this list contains [1, 3, 5] then roots with indices 1, 3 and 5 are known to contain this package, 2 and 4 are known not to (no information about roots 6 or higher) - // if this list contains maxIndex that means that all roots containing this package are known - val rootIndices = IntArrayList(2) - } - - // root "Cache" object corresponds to DefaultPackage which exists in every root. Roots with non-default fqname are also listed here but - // they will be ignored on requests with invalid fqname prefix. - private val rootCache: Cache by lazy { - Cache().apply { - roots.indices.forEach(rootIndices::add) - rootIndices.add(maxIndex) - rootIndices.trim() - } - } - - // holds the request and the result last time we searched for class - // helps improve several scenarios, LazyJavaResolverContext.findClassInJava being the most important - private var lastClassSearch: Pair? = null - - override val indexedRoots by lazy { roots.asSequence() } - - private val packageCache: Array> by lazy { - Array(roots.size) { THashMap() } - } - - override fun traverseDirectoriesInPackage( - packageFqName: FqName, - acceptedRootTypes: Set, - continueSearch: (VirtualFile, JavaRoot.RootType) -> Boolean - ) { - search(TraverseRequest(packageFqName, acceptedRootTypes)) { dir, rootType -> - if (continueSearch(dir, rootType)) null else Unit - } - } - - // findClassGivenDirectory MUST check whether the class with this classId exists in given package - override fun findClass( - classId: ClassId, - acceptedRootTypes: Set, - findClassGivenDirectory: (VirtualFile, JavaRoot.RootType) -> T? - ): T? { - // make a decision based on information saved from last class search - if (lastClassSearch?.first?.classId != classId) { - return search(FindClassRequest(classId, acceptedRootTypes), findClassGivenDirectory) - } - - val (cachedRequest, cachedResult) = lastClassSearch!! - return when (cachedResult) { - is SearchResult.NotFound -> { - val limitedRootTypes = acceptedRootTypes - cachedRequest.acceptedRootTypes - if (limitedRootTypes.isEmpty()) { - null - } else { - search(FindClassRequest(classId, limitedRootTypes), findClassGivenDirectory) - } - } - is SearchResult.Found -> { - if (cachedRequest.acceptedRootTypes == acceptedRootTypes) { - findClassGivenDirectory(cachedResult.packageDirectory, cachedResult.root.type) - } else { - search(FindClassRequest(classId, acceptedRootTypes), findClassGivenDirectory) - } - } - } - } - - private fun search(request: SearchRequest, handler: (VirtualFile, JavaRoot.RootType) -> T?): T? { - // a list of package sub names, ["org", "jb", "kotlin"] - val packagesPath = request.packageFqName.pathSegments().map { it.identifier } - // a list of caches corresponding to packages, [default, "org", "org.jb", "org.jb.kotlin"] - val caches = cachesPath(packagesPath) - - var processedRootsUpTo = -1 - // traverse caches starting from last, which contains most specific information - - // NOTE: indices manipulation instead of using caches.reversed() is here for performance reasons - for (cacheIndex in caches.lastIndex downTo 0) { - val cacheRootIndices = caches[cacheIndex].rootIndices - for (i in 0 until cacheRootIndices.size) { - val rootIndex = cacheRootIndices.getInt(i) - if (rootIndex <= processedRootsUpTo) continue // roots with those indices have been processed by now - - val directoryInRoot = - travelPath(rootIndex, request.packageFqName, packagesPath, cacheIndex, caches) ?: continue - val root = roots[rootIndex] - if (root.type in request.acceptedRootTypes) { - val result = handler(directoryInRoot, root.type) - if (result != null) { - if (request is FindClassRequest) { - lastClassSearch = Pair(request, SearchResult.Found(directoryInRoot, root)) - } - return result - } - } - } - processedRootsUpTo = - if (cacheRootIndices.isEmpty) { - processedRootsUpTo - } else { - cacheRootIndices.getInt(cacheRootIndices.size - 1) - } - } - - if (request is FindClassRequest) { - lastClassSearch = Pair(request, SearchResult.NotFound) - } - return null - } - - // try to find a target directory corresponding to package represented by packagesPath in a given root represented by index - // possibly filling "Cache" objects with new information - private fun travelPath( - rootIndex: Int, - packageFqName: FqName, - packagesPath: List, - fillCachesAfter: Int, - cachesPath: List - ): VirtualFile? { - if (rootIndex >= maxIndex) { - for (i in (fillCachesAfter + 1) until cachesPath.size) { - // we all know roots that contain this package by now - cachesPath[i].rootIndices.add(maxIndex) - cachesPath[i].rootIndices.trim() - } - return null - } - - return synchronized(packageCache) { - packageCache[rootIndex].getOrPut(packageFqName.asString()) { - doTravelPath(rootIndex, packagesPath, fillCachesAfter, cachesPath) - } - } - } - - private fun doTravelPath(rootIndex: Int, packagesPath: List, fillCachesAfter: Int, cachesPath: List): VirtualFile? { - val pathRoot = roots[rootIndex] - val prefixPathSegments = pathRoot.prefixFqName?.pathSegments() - - var currentFile = pathRoot.file - - for (pathIndex in packagesPath.indices) { - val subPackageName = packagesPath[pathIndex] - if (prefixPathSegments != null && pathIndex < prefixPathSegments.size) { - // Traverse prefix first instead of traversing real directories - if (prefixPathSegments[pathIndex].identifier != subPackageName) { - return null - } - } else { - currentFile = currentFile.findChildPackage(subPackageName, pathRoot.type) ?: return null - } - - val correspondingCacheIndex = pathIndex + 1 - if (correspondingCacheIndex > fillCachesAfter) { - // subPackageName exists in this root - cachesPath[correspondingCacheIndex].rootIndices.add(rootIndex) - } - } - - return currentFile - } - - private fun VirtualFile.findChildPackage(subPackageName: String, rootType: JavaRoot.RootType): VirtualFile? { - val childDirectory = findChild(subPackageName) ?: return null - - val fileExtension = when (rootType) { - JavaRoot.RootType.BINARY -> JavaClassFileType.INSTANCE.defaultExtension - JavaRoot.RootType.BINARY_SIG -> "sig" - JavaRoot.RootType.SOURCE -> JavaFileType.INSTANCE.defaultExtension - } - - // If in addition to a directory "foo" there's a class file "foo.class" AND there are no classes anywhere in the directory "foo", - // then we ignore the directory and let the resolution choose the class "foo" instead. - if (findChild("$subPackageName.$fileExtension")?.isDirectory == false) { - if (VfsUtilCore.processFilesRecursively(childDirectory) { file -> file.extension != fileExtension }) { - return null - } - } - - return childDirectory - } - - private fun cachesPath(path: List): List { - val caches = ArrayList(path.size + 1) - caches.add(rootCache) - var currentCache = rootCache - for (subPackageName in path) { - currentCache = currentCache[subPackageName] - caches.add(currentCache) - } - return caches - } - - private data class FindClassRequest(val classId: ClassId, override val acceptedRootTypes: Set) : SearchRequest { - override val packageFqName: FqName - get() = classId.packageFqName - } - - private data class TraverseRequest( - override val packageFqName: FqName, - override val acceptedRootTypes: Set - ) : SearchRequest - - private interface SearchRequest { - val packageFqName: FqName - val acceptedRootTypes: Set - } - - private sealed class SearchResult { - class Found(val packageDirectory: VirtualFile, val root: JavaRoot) : SearchResult() - - object NotFound : SearchResult() - } -} diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/KotlinAnalysis.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/KotlinAnalysis.kt deleted file mode 100644 index 27328a6c..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/KotlinAnalysis.kt +++ /dev/null @@ -1,111 +0,0 @@ -package org.jetbrains.dokka.analysis - -import org.jetbrains.dokka.DokkaConfiguration.DokkaSourceSet -import org.jetbrains.dokka.DokkaSourceSetID -import org.jetbrains.dokka.model.SourceSetDependent -import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.utilities.DokkaLogger -import java.io.Closeable - -@Suppress("FunctionName") -fun ProjectKotlinAnalysis( - sourceSets: List, - logger: DokkaLogger, - analysisConfiguration: DokkaAnalysisConfiguration = DokkaAnalysisConfiguration() -): KotlinAnalysis { - val environments = sourceSets.associateWith { sourceSet -> - createAnalysisContext( - logger = logger, - sourceSets = sourceSets, - sourceSet = sourceSet, - analysisConfiguration = analysisConfiguration - ) - } - return EnvironmentKotlinAnalysis(environments) -} - -/** - * [projectKotlinAnalysis] needs to be closed separately - * Usually the analysis created for samples is short-lived and can be closed right after - * it's been used, there's no need to wait for [projectKotlinAnalysis] to be closed as it must be handled separately. - */ -@Suppress("FunctionName") -fun SamplesKotlinAnalysis( - sourceSets: List, - logger: DokkaLogger, - projectKotlinAnalysis: KotlinAnalysis, - analysisConfiguration: DokkaAnalysisConfiguration = DokkaAnalysisConfiguration() -): KotlinAnalysis { - val environments = sourceSets - .filter { it.samples.isNotEmpty() } - .associateWith { sourceSet -> - createAnalysisContext( - logger = logger, - classpath = sourceSet.classpath, - sourceRoots = sourceSet.samples, - sourceSet = sourceSet, - analysisConfiguration = analysisConfiguration - ) - } - - return EnvironmentKotlinAnalysis(environments, projectKotlinAnalysis) -} - -class DokkaAnalysisConfiguration( - /** - * Only for common platform ignore BuiltIns for StdLib since it can cause a conflict - * between BuiltIns from a compiler and ones from source code. - */ - val ignoreCommonBuiltIns: Boolean = false -) - -@Deprecated( - message = "Construct using list of DokkaSourceSets and logger", - replaceWith = ReplaceWith("KotlinAnalysis(context.configuration.sourceSets, context.logger)") -) -fun KotlinAnalysis(context: DokkaContext): KotlinAnalysis = - ProjectKotlinAnalysis(context.configuration.sourceSets, context.logger) - -@Deprecated( - message = "It was renamed to `ProjectKotlinAnalysis`", - replaceWith = ReplaceWith("ProjectKotlinAnalysis(sourceSets, logger, analysisConfiguration)") -) -fun KotlinAnalysis( - sourceSets: List, - logger: DokkaLogger, - analysisConfiguration: DokkaAnalysisConfiguration = DokkaAnalysisConfiguration() -) = ProjectKotlinAnalysis(sourceSets, logger, analysisConfiguration) - - -/** - * First child delegation. It does not close [parent]. - */ -abstract class KotlinAnalysis( - val parent: KotlinAnalysis? = null -) : Closeable { - - operator fun get(key: DokkaSourceSet): AnalysisContext { - return get(key.sourceSetID) - } - - operator fun get(key: DokkaSourceSetID): AnalysisContext { - return find(key) - ?: parent?.get(key) - ?: throw IllegalStateException("Missing EnvironmentAndFacade for sourceSet $key") - } - - protected abstract fun find(sourceSetID: DokkaSourceSetID): AnalysisContext? -} - -internal open class EnvironmentKotlinAnalysis( - private val environments: SourceSetDependent, - parent: KotlinAnalysis? = null, -) : KotlinAnalysis(parent = parent) { - - override fun find(sourceSetID: DokkaSourceSetID): AnalysisContext? = - environments.entries.firstOrNull { (sourceSet, _) -> sourceSet.sourceSetID == sourceSetID }?.value - - override fun close() { - environments.values.forEach(AnalysisContext::close) - } -} diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/KotlinCliJavaFileManagerImpl.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/KotlinCliJavaFileManagerImpl.kt deleted file mode 100644 index 37a5e3f7..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/KotlinCliJavaFileManagerImpl.kt +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.cli.jvm.compiler - -import com.intellij.core.CoreJavaFileManager -import com.intellij.openapi.diagnostic.Logger -import com.intellij.openapi.util.text.StringUtil -import com.intellij.openapi.vfs.VirtualFile -import com.intellij.psi.* -import com.intellij.psi.impl.file.PsiPackageImpl -import com.intellij.psi.search.GlobalSearchScope -import gnu.trove.THashMap -import gnu.trove.THashSet -import org.jetbrains.kotlin.cli.jvm.index.JavaRoot -import org.jetbrains.kotlin.cli.jvm.index.JvmDependenciesIndex -import org.jetbrains.kotlin.cli.jvm.index.SingleJavaFileRootsIndex -import org.jetbrains.kotlin.load.java.JavaClassFinder -import org.jetbrains.kotlin.load.java.structure.JavaClass -import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl -import org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryClassSignatureParser -import org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaClass -import org.jetbrains.kotlin.load.java.structure.impl.classFiles.ClassifierResolutionContext -import org.jetbrains.kotlin.load.java.structure.impl.classFiles.isNotTopLevelClass -import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.resolve.jvm.KotlinCliJavaFileManager -import org.jetbrains.kotlin.util.PerformanceCounter -import org.jetbrains.kotlin.utils.addIfNotNull -import java.util.* - -// TODO: do not inherit from CoreJavaFileManager to avoid accidental usage of its methods which do not use caches/indices -// Currently, the only relevant usage of this class as CoreJavaFileManager is at CoreJavaDirectoryService.getPackage, -// which is indirectly invoked from PsiPackage.getSubPackages -class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) : CoreJavaFileManager(myPsiManager), KotlinCliJavaFileManager { - private val perfCounter = PerformanceCounter.create("Find Java class") - private lateinit var index: JvmDependenciesIndex - private lateinit var singleJavaFileRootsIndex: SingleJavaFileRootsIndex - private lateinit var packagePartProviders: List - private val topLevelClassesCache: MutableMap = THashMap() - private val allScope = GlobalSearchScope.allScope(myPsiManager.project) - private var usePsiClassFilesReading = false - - fun initialize( - index: JvmDependenciesIndex, - packagePartProviders: List, - singleJavaFileRootsIndex: SingleJavaFileRootsIndex, - usePsiClassFilesReading: Boolean - ) { - this.index = index - this.packagePartProviders = packagePartProviders - this.singleJavaFileRootsIndex = singleJavaFileRootsIndex - this.usePsiClassFilesReading = usePsiClassFilesReading - } - - private fun findPsiClass(classId: ClassId, searchScope: GlobalSearchScope): PsiClass? = perfCounter.time { - findVirtualFileForTopLevelClass(classId, searchScope)?.findPsiClassInVirtualFile(classId.relativeClassName.asString()) - } - - private fun findVirtualFileForTopLevelClass(classId: ClassId, searchScope: GlobalSearchScope): VirtualFile? { - val relativeClassName = classId.relativeClassName.asString() - synchronized(topLevelClassesCache) { - return topLevelClassesCache.getOrPut(classId.packageFqName.child(classId.relativeClassName.pathSegments().first())) { - index.findClass(classId) { dir, type -> - findVirtualFileGivenPackage(dir, relativeClassName, type) - } ?: singleJavaFileRootsIndex.findJavaSourceClass(classId) - }?.takeIf { it in searchScope } - } - } - - private val binaryCache: MutableMap = THashMap() - private val signatureParsingComponent = BinaryClassSignatureParser() - - fun findClass(classId: ClassId, searchScope: GlobalSearchScope): JavaClass? = findClass(JavaClassFinder.Request(classId), searchScope) - - override fun findClass(request: JavaClassFinder.Request, searchScope: GlobalSearchScope): JavaClass? { - val (classId, classFileContentFromRequest, outerClassFromRequest) = request - val virtualFile = findVirtualFileForTopLevelClass(classId, searchScope) ?: return null - - if (!usePsiClassFilesReading && (virtualFile.extension == "class" || virtualFile.extension == "sig")) { - synchronized(binaryCache){ - // We return all class files' names in the directory in knownClassNamesInPackage method, so one may request an inner class - return binaryCache.getOrPut(classId) { - // Note that currently we implicitly suppose that searchScope for binary classes is constant and we do not use it - // as a key in cache - // This is a true assumption by now since there are two search scopes in compiler: one for sources and another one for binary - // When it become wrong because we introduce the modules into CLI, it's worth to consider - // having different KotlinCliJavaFileManagerImpl's for different modules - - classId.outerClassId?.let { outerClassId -> - val outerClass = outerClassFromRequest ?: findClass(outerClassId, searchScope) - - return if (outerClass is BinaryJavaClass) - outerClass.findInnerClass(classId.shortClassName, classFileContentFromRequest) - else - outerClass?.findInnerClass(classId.shortClassName) - } - - // Here, we assume the class is top-level - val classContent = classFileContentFromRequest ?: virtualFile.contentsToByteArray() - if (virtualFile.nameWithoutExtension.contains("$") && isNotTopLevelClass(classContent)) return@getOrPut null - - val resolver = ClassifierResolutionContext { findClass(it, allScope) } - - BinaryJavaClass( - virtualFile, classId.asSingleFqName(), resolver, signatureParsingComponent, - outerClass = null, classContent = classContent - ) - } - } - } - - return virtualFile.findPsiClassInVirtualFile(classId.relativeClassName.asString())?.let(::JavaClassImpl) - } - - // this method is called from IDEA to resolve dependencies in Java code - // which supposedly shouldn't have errors so the dependencies exist in general - override fun findClass(qName: String, scope: GlobalSearchScope): PsiClass? { - // String cannot be reliably converted to ClassId because we don't know where the package name ends and class names begin. - // For example, if qName is "a.b.c.d.e", we should either look for a top level class "e" in the package "a.b.c.d", - // or, for example, for a nested class with the relative qualified name "c.d.e" in the package "a.b". - // Below, we start by looking for the top level class "e" in the package "a.b.c.d" first, then for the class "d.e" in the package - // "a.b.c", and so on, until we find something. Most classes are top level, so most of the times the search ends quickly - - forEachClassId(qName) { classId -> - findPsiClass(classId, scope)?.let { return it } - } - - return null - } - - private inline fun forEachClassId(fqName: String, block: (ClassId) -> Unit) { - var classId = fqName.toSafeTopLevelClassId() ?: return - - while (true) { - block(classId) - - val packageFqName = classId.packageFqName - if (packageFqName.isRoot) break - - classId = ClassId( - packageFqName.parent(), - FqName(packageFqName.shortName().asString() + "." + classId.relativeClassName.asString()), - false - ) - } - } - - override fun findClasses(qName: String, scope: GlobalSearchScope): Array = perfCounter.time { - val result = ArrayList(1) - forEachClassId(qName) { classId -> - val relativeClassName = classId.relativeClassName.asString() - index.traverseDirectoriesInPackage(classId.packageFqName) { dir, rootType -> - val psiClass = - findVirtualFileGivenPackage(dir, relativeClassName, rootType) - ?.takeIf { it in scope } - ?.findPsiClassInVirtualFile(relativeClassName) - if (psiClass != null) { - result.add(psiClass) - } - // traverse all - true - } - - result.addIfNotNull( - singleJavaFileRootsIndex.findJavaSourceClass(classId) - ?.takeIf { it in scope } - ?.findPsiClassInVirtualFile(relativeClassName) - ) - - if (result.isNotEmpty()) { - return@time result.toTypedArray() - } - } - - PsiClass.EMPTY_ARRAY - } - - override fun findPackage(packageName: String): PsiPackage? { - var found = false - val packageFqName = packageName.toSafeFqName() ?: return null - index.traverseDirectoriesInPackage(packageFqName) { _, _ -> - found = true - //abort on first found - false - } - if (!found) { - found = packagePartProviders.any { it.findPackageParts(packageName).isNotEmpty() } - } - if (!found) { - found = singleJavaFileRootsIndex.findJavaSourceClasses(packageFqName).isNotEmpty() - } - return if (found) PsiPackageImpl(myPsiManager, packageName) else null - } - - private fun findVirtualFileGivenPackage( - packageDir: VirtualFile, - classNameWithInnerClasses: String, - rootType: JavaRoot.RootType - ): VirtualFile? { - val topLevelClassName = classNameWithInnerClasses.substringBefore('.') - - val vFile = when (rootType) { - JavaRoot.RootType.BINARY -> packageDir.findChild("$topLevelClassName.class") - JavaRoot.RootType.BINARY_SIG -> packageDir.findChild("$topLevelClassName.sig") - JavaRoot.RootType.SOURCE -> packageDir.findChild("$topLevelClassName.java") - } ?: return null - - if (!vFile.isValid) { - LOG.error("Invalid child of valid parent: ${vFile.path}; ${packageDir.isValid} path=${packageDir.path}") - return null - } - - return vFile - } - - private fun VirtualFile.findPsiClassInVirtualFile(classNameWithInnerClasses: String): PsiClass? { - val file = myPsiManager.findFile(this) as? PsiClassOwner ?: return null - return findClassInPsiFile(classNameWithInnerClasses, file) - } - - override fun knownClassNamesInPackage(packageFqName: FqName): Set { - val result = THashSet() - index.traverseDirectoriesInPackage(packageFqName, continueSearch = { dir, _ -> - for (child in dir.children) { - if (child.extension == "class" || child.extension == "java" || child.extension == "sig") { - result.add(child.nameWithoutExtension) - } - } - - true - }) - - for (classId in singleJavaFileRootsIndex.findJavaSourceClasses(packageFqName)) { - assert(!classId.isNestedClass) { "ClassId of a single .java source class should not be nested: $classId" } - result.add(classId.shortClassName.asString()) - } - - return result - } - - override fun findModules(moduleName: String, scope: GlobalSearchScope): Collection { - // TODO - return emptySet() - } - - override fun getNonTrivialPackagePrefixes(): Collection = emptyList() - - companion object { - private val LOG = Logger.getInstance(KotlinCliJavaFileManagerImpl::class.java) - - private fun findClassInPsiFile(classNameWithInnerClassesDotSeparated: String, file: PsiClassOwner): PsiClass? { - for (topLevelClass in file.classes) { - val candidate = findClassByTopLevelClass(classNameWithInnerClassesDotSeparated, topLevelClass) - if (candidate != null) { - return candidate - } - } - return null - } - - private fun findClassByTopLevelClass(className: String, topLevelClass: PsiClass): PsiClass? { - if (className.indexOf('.') < 0) { - return if (className == topLevelClass.name) topLevelClass else null - } - - val segments = StringUtil.split(className, ".").iterator() - if (!segments.hasNext() || segments.next() != topLevelClass.name) { - return null - } - var curClass = topLevelClass - while (segments.hasNext()) { - val innerClassName = segments.next() - val innerClass = curClass.findInnerClassByName(innerClassName, false) ?: return null - curClass = innerClass - } - return curClass - } - } -} - -// a sad workaround to avoid throwing exception when called from inside IDEA code -private fun safely(compute: () -> T): T? = - try { - compute() - } catch (e: IllegalArgumentException) { - null - } catch (e: AssertionError) { - null - } - -private fun String.toSafeFqName(): FqName? = safely { FqName(this) } -private fun String.toSafeTopLevelClassId(): ClassId? = safely { ClassId.topLevel(FqName(this)) } diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/TypeReferenceFactory.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/TypeReferenceFactory.kt deleted file mode 100644 index 091e54ce..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/TypeReferenceFactory.kt +++ /dev/null @@ -1,68 +0,0 @@ -package org.jetbrains.dokka.analysis - -import com.intellij.psi.PsiClass -import org.jetbrains.dokka.links.* -import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor -import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor -import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver -import org.jetbrains.kotlin.types.KotlinType -import org.jetbrains.kotlin.types.TypeProjection -import org.jetbrains.kotlin.types.error.ErrorType -import org.jetbrains.kotlin.types.error.ErrorTypeConstructor -import org.jetbrains.kotlin.types.error.ErrorTypeKind - -fun TypeReference.Companion.from(d: ReceiverParameterDescriptor): TypeReference? = - when (d.value) { - is ExtensionReceiver -> fromPossiblyNullable(d.type, emptyList()) - else -> run { - println("Unknown value type for $d") - null - } - } - -fun TypeReference.Companion.from(d: ValueParameterDescriptor): TypeReference = - fromPossiblyNullable(d.type, emptyList()) - -fun TypeReference.Companion.from(@Suppress("UNUSED_PARAMETER") p: PsiClass) = TypeReference - -private fun TypeReference.Companion.fromPossiblyNullable(t: KotlinType, paramTrace: List): TypeReference = - fromPossiblyRecursive(t, paramTrace).let { if (t.isMarkedNullable) Nullable(it) else it } - -private fun TypeReference.Companion.fromPossiblyRecursive(t: KotlinType, paramTrace: List): TypeReference = - paramTrace.indexOfFirst { it.constructor == t.constructor && it.arguments == t.arguments } - .takeIf { it >= 0 } - ?.let(::RecursiveType) - ?: from(t, paramTrace) - -private fun TypeReference.Companion.from(t: KotlinType, paramTrace: List): TypeReference { - if (t is ErrorType) { - val errorConstructor = t.constructor as? ErrorTypeConstructor - val presentableName = - if (errorConstructor?.kind == ErrorTypeKind.UNRESOLVED_TYPE && errorConstructor.parameters.isNotEmpty()) - errorConstructor.getParam(0) - else - t.constructor.toString() - return TypeConstructor(presentableName, t.arguments.map { fromProjection(it, paramTrace) }) - } - return when (val d = t.constructor.declarationDescriptor) { - is TypeParameterDescriptor -> TypeParam( - d.upperBounds.map { fromPossiblyNullable(it, paramTrace + t) } - ) - else -> TypeConstructor( - t.constructorName.orEmpty(), - t.arguments.map { fromProjection(it, paramTrace) } - ) - } -} - -private fun TypeReference.Companion.fromProjection(t: TypeProjection, paramTrace: List): TypeReference = - if (t.isStarProjection) { - StarProjection - } else { - fromPossiblyNullable(t.type, paramTrace) - } - -private val KotlinType.constructorName - get() = constructor.declarationDescriptor?.fqNameSafe?.asString() diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/CommonKlibModuleInfo.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/CommonKlibModuleInfo.kt deleted file mode 100644 index 22c86dd7..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/CommonKlibModuleInfo.kt +++ /dev/null @@ -1,25 +0,0 @@ -package org.jetbrains.dokka.analysis.resolve - -import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices -import org.jetbrains.kotlin.library.KotlinLibrary -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.platform.CommonPlatforms -import org.jetbrains.kotlin.platform.TargetPlatform -import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices - -internal class CommonKlibModuleInfo( - override val name: Name, - val kotlinLibrary: KotlinLibrary, - private val dependOnModules: List -) : ModuleInfo { - override fun dependencies(): List = dependOnModules - - override fun dependencyOnBuiltIns(): ModuleInfo.DependencyOnBuiltIns = ModuleInfo.DependencyOnBuiltIns.LAST - - override val platform: TargetPlatform - get() = CommonPlatforms.defaultCommonPlatform - - override val analyzerServices: PlatformDependentAnalyzerServices - get() = CommonPlatformAnalyzerServices -} \ No newline at end of file diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaJsKlibLibraryInfo.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaJsKlibLibraryInfo.kt deleted file mode 100644 index 9d28cc3c..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaJsKlibLibraryInfo.kt +++ /dev/null @@ -1,30 +0,0 @@ -package org.jetbrains.dokka.analysis.resolve - -import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.library.KotlinLibrary -import org.jetbrains.kotlin.library.shortName -import org.jetbrains.kotlin.library.uniqueName -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.platform.TargetPlatform -import org.jetbrains.kotlin.platform.js.JsPlatforms -import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices - -/** TODO: replace by [org.jetbrains.kotlin.caches.resolve.JsKlibLibraryInfo] after fix of KT-40734 */ -internal class DokkaJsKlibLibraryInfo( - override val kotlinLibrary: KotlinLibrary, - override val analyzerServices: PlatformDependentAnalyzerServices, - private val dependencyResolver: DokkaKlibLibraryDependencyResolver -) : DokkaKlibLibraryInfo() { - init { - dependencyResolver.registerLibrary(this) - } - - override val name: Name by lazy { - val libraryName = kotlinLibrary.shortName ?: kotlinLibrary.uniqueName - Name.special("<$libraryName>") - } - - override val platform: TargetPlatform = JsPlatforms.defaultJsPlatform - override fun dependencies(): List = listOf(this) + dependencyResolver.resolveDependencies(this) - override fun getLibraryRoots(): Collection = listOf(libraryRoot) -} \ No newline at end of file diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaJsResolverForModuleFactory.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaJsResolverForModuleFactory.kt deleted file mode 100644 index 353c71fb..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaJsResolverForModuleFactory.kt +++ /dev/null @@ -1,122 +0,0 @@ -package org.jetbrains.dokka.analysis.resolve - -import org.jetbrains.kotlin.analyzer.* -import org.jetbrains.kotlin.builtins.DefaultBuiltIns -import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.container.StorageComponentContainer -import org.jetbrains.kotlin.container.get -import org.jetbrains.kotlin.context.ModuleContext -import org.jetbrains.kotlin.descriptors.PackageFragmentProvider -import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl -import org.jetbrains.kotlin.frontend.di.createContainerForLazyResolve -import org.jetbrains.kotlin.idea.klib.createKlibPackageFragmentProvider -import org.jetbrains.kotlin.incremental.components.LookupTracker -import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices -import org.jetbrains.kotlin.konan.util.KlibMetadataFactories -import org.jetbrains.kotlin.resolve.CodeAnalyzerInitializer -import org.jetbrains.kotlin.resolve.SealedClassInheritorsProvider -import org.jetbrains.kotlin.resolve.TargetEnvironment -import org.jetbrains.kotlin.resolve.lazy.ResolveSession -import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService -import org.jetbrains.kotlin.serialization.js.DynamicTypeDeserializer -import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil -import org.jetbrains.kotlin.serialization.js.createKotlinJavascriptPackageFragmentProvider -import org.jetbrains.kotlin.serialization.konan.impl.KlibMetadataModuleDescriptorFactoryImpl -import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils -import java.io.File - -/** TODO: replace by [org.jetbrains.kotlin.caches.resolve.JsResolverForModuleFactory] after fix of KT-40734 */ -internal class DokkaJsResolverForModuleFactory( - private val targetEnvironment: TargetEnvironment -) : ResolverForModuleFactory() { - companion object { - private val metadataFactories = KlibMetadataFactories({ DefaultBuiltIns.Instance }, DynamicTypeDeserializer) - - private val metadataModuleDescriptorFactory = KlibMetadataModuleDescriptorFactoryImpl( - metadataFactories.DefaultDescriptorFactory, - metadataFactories.DefaultPackageFragmentsFactory, - metadataFactories.flexibleTypeDeserializer, - metadataFactories.platformDependentTypeTransformer - ) - } - - override fun createResolverForModule( - moduleDescriptor: ModuleDescriptorImpl, - moduleContext: ModuleContext, - moduleContent: ModuleContent, - resolverForProject: ResolverForProject, - languageVersionSettings: LanguageVersionSettings, - sealedInheritorsProvider: SealedClassInheritorsProvider - ): ResolverForModule { - val declarationProviderFactory = DeclarationProviderFactoryService.createDeclarationProviderFactory( - moduleContext.project, - moduleContext.storageManager, - moduleContent.syntheticFiles, - moduleContent.moduleContentScope, - moduleContent.moduleInfo - ) - - val container = createContainerForLazyResolve( - moduleContext, - declarationProviderFactory, - CodeAnalyzerInitializer.getInstance(moduleContext.project).createTrace(), // BindingTraceContext(/* allowSliceRewrite = */ true), - moduleDescriptor.platform!!, - JsPlatformAnalyzerServices, - targetEnvironment, - languageVersionSettings - ) - - var packageFragmentProvider = container.get().packageFragmentProvider - - val libraryProviders = createPackageFragmentProvider(moduleContent.moduleInfo, container, moduleContext, moduleDescriptor, languageVersionSettings) - - if (libraryProviders.isNotEmpty()) { - packageFragmentProvider = - CompositePackageFragmentProvider(listOf(packageFragmentProvider) + libraryProviders, "DokkaCompositePackageFragmentProvider") - } - return ResolverForModule(packageFragmentProvider, container) - } - - internal fun createPackageFragmentProvider( - moduleInfo: M, - container: StorageComponentContainer, - moduleContext: ModuleContext, - moduleDescriptor: ModuleDescriptorImpl, - languageVersionSettings: LanguageVersionSettings - ): List = when (moduleInfo) { - is DokkaJsKlibLibraryInfo -> { - listOfNotNull( - moduleInfo.kotlinLibrary - .createKlibPackageFragmentProvider( - storageManager = moduleContext.storageManager, - metadataModuleDescriptorFactory = metadataModuleDescriptorFactory, - languageVersionSettings = languageVersionSettings, - moduleDescriptor = moduleDescriptor, - lookupTracker = LookupTracker.DO_NOTHING - ) - ) - } - is LibraryModuleInfo -> { - moduleInfo.getLibraryRoots() - .flatMap { - if (File(it).exists()) { - KotlinJavascriptMetadataUtils.loadMetadata(it) - } else { - // TODO can/should we warn a user about a problem in a library root? If so how? - emptyList() - } - } - .filter { it.version.isCompatible() } - .map { metadata -> - val (header, packageFragmentProtos) = - KotlinJavascriptSerializationUtil.readModuleAsProto(metadata.body, metadata.version) - createKotlinJavascriptPackageFragmentProvider( - moduleContext.storageManager, moduleDescriptor, header, packageFragmentProtos, metadata.version, - container.get(), LookupTracker.DO_NOTHING - ) - } - } - else -> emptyList() - } -} \ No newline at end of file diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaKlibLibraryDependencyResolver.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaKlibLibraryDependencyResolver.kt deleted file mode 100644 index 9259deff..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaKlibLibraryDependencyResolver.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.jetbrains.dokka.analysis.resolve - -import org.jetbrains.kotlin.library.uniqueName -import org.jetbrains.kotlin.library.unresolvedDependencies - -/** TODO: replace by [NativeKlibLibraryInfo] after fix of KT-40734 */ -internal class DokkaKlibLibraryDependencyResolver { - private val cachedDependencies = mutableMapOf() - - fun registerLibrary(libraryInfo: DokkaKlibLibraryInfo) { - cachedDependencies[libraryInfo.kotlinLibrary.uniqueName] = libraryInfo - } - - fun resolveDependencies(libraryInfo: DokkaKlibLibraryInfo): List { - return libraryInfo.kotlinLibrary.unresolvedDependencies.mapNotNull { cachedDependencies[it.path] } - } -} diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaKlibLibraryInfo.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaKlibLibraryInfo.kt deleted file mode 100644 index e4e12b66..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaKlibLibraryInfo.kt +++ /dev/null @@ -1,10 +0,0 @@ -package org.jetbrains.dokka.analysis.resolve - -import org.jetbrains.kotlin.analyzer.LibraryModuleInfo -import org.jetbrains.kotlin.library.KotlinLibrary - -abstract class DokkaKlibLibraryInfo : LibraryModuleInfo { - abstract val kotlinLibrary: KotlinLibrary - internal val libraryRoot: String - get() = kotlinLibrary.libraryFile.path -} \ No newline at end of file diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaKlibMetadataCommonDependencyContainer.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaKlibMetadataCommonDependencyContainer.kt deleted file mode 100644 index 1a987a1f..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaKlibMetadataCommonDependencyContainer.kt +++ /dev/null @@ -1,140 +0,0 @@ -package org.jetbrains.dokka.analysis.resolve - -import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.analyzer.common.CommonDependenciesContainer -import org.jetbrains.kotlin.builtins.DefaultBuiltIns -import org.jetbrains.kotlin.config.CompilerConfiguration -import org.jetbrains.kotlin.config.languageVersionSettings -import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.descriptors.PackageFragmentProvider -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl -import org.jetbrains.kotlin.descriptors.konan.DeserializedKlibModuleOrigin -import org.jetbrains.kotlin.incremental.components.LookupTracker -import org.jetbrains.kotlin.konan.util.KlibMetadataFactories -import org.jetbrains.kotlin.library.KotlinLibrary -import org.jetbrains.kotlin.library.metadata.NativeTypeTransformer -import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer -import org.jetbrains.kotlin.library.metadata.parseModuleHeader -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration -import org.jetbrains.kotlin.serialization.konan.impl.KlibMetadataModuleDescriptorFactoryImpl -import org.jetbrains.kotlin.storage.LockBasedStorageManager -import org.jetbrains.kotlin.storage.StorageManager -import org.jetbrains.kotlin.utils.keysToMap - -/** - * Adapted from org.jetbrains.kotlin.cli.metadata.KlibMetadataDependencyContainer - */ -class DokkaKlibMetadataCommonDependencyContainer( - kotlinLibraries: List, - private val configuration: CompilerConfiguration, - private val storageManager: StorageManager -) : CommonDependenciesContainer { - - private val builtIns - get() = DefaultBuiltIns.Instance - - private val mutableDependenciesForAllModuleDescriptors = mutableListOf().apply { - add(builtIns.builtInsModule) - } - - private val mutableDependenciesForAllModules = mutableListOf() - - private val moduleDescriptorsForKotlinLibraries: Map = - kotlinLibraries.keysToMap { library -> - val moduleHeader = parseModuleHeader(library.moduleHeaderData) - val moduleName = Name.special(moduleHeader.moduleName) - val moduleOrigin = DeserializedKlibModuleOrigin(library) - MetadataFactories.DefaultDescriptorFactory.createDescriptor( - moduleName, storageManager, builtIns, moduleOrigin - ) - }.also { result -> - val resultValues = result.values - resultValues.forEach { module -> - module.setDependencies(mutableDependenciesForAllModuleDescriptors) - } - mutableDependenciesForAllModuleDescriptors.addAll(resultValues) - } - - private val moduleInfosImpl: List = mutableListOf().apply { - addAll( - moduleDescriptorsForKotlinLibraries.map { (kotlinLibrary, moduleDescriptor) -> - CommonKlibModuleInfo(moduleDescriptor.name, kotlinLibrary, mutableDependenciesForAllModules) - } - ) - mutableDependenciesForAllModules.addAll(this@apply) - } - - override val moduleInfos: List get() = moduleInfosImpl - - /* not used in Dokka */ - override val friendModuleInfos: List = emptyList() - - /* not used in Dokka */ - override val refinesModuleInfos: List = emptyList() - - override fun moduleDescriptorForModuleInfo(moduleInfo: ModuleInfo): ModuleDescriptor { - if (moduleInfo !in moduleInfos) - error("Unknown module info $moduleInfo") - - // Ensure that the package fragment provider has been created and the module descriptor has been - // initialized with the package fragment provider: - packageFragmentProviderForModuleInfo(moduleInfo) - - return moduleDescriptorsForKotlinLibraries.getValue((moduleInfo as CommonKlibModuleInfo).kotlinLibrary) - } - - override fun registerDependencyForAllModules( - moduleInfo: ModuleInfo, - descriptorForModule: ModuleDescriptorImpl - ) { - mutableDependenciesForAllModules.add(moduleInfo) - mutableDependenciesForAllModuleDescriptors.add(descriptorForModule) - } - - override fun packageFragmentProviderForModuleInfo( - moduleInfo: ModuleInfo - ): PackageFragmentProvider? { - if (moduleInfo !in moduleInfos) - return null - return packageFragmentProviderForKotlinLibrary((moduleInfo as CommonKlibModuleInfo).kotlinLibrary) - } - - private val klibMetadataModuleDescriptorFactory by lazy { - KlibMetadataModuleDescriptorFactoryImpl( - MetadataFactories.DefaultDescriptorFactory, - MetadataFactories.DefaultPackageFragmentsFactory, - MetadataFactories.flexibleTypeDeserializer, - MetadataFactories.platformDependentTypeTransformer - ) - } - - private fun packageFragmentProviderForKotlinLibrary( - library: KotlinLibrary - ): PackageFragmentProvider { - val languageVersionSettings = configuration.languageVersionSettings - - val libraryModuleDescriptor = moduleDescriptorsForKotlinLibraries.getValue(library) - val packageFragmentNames = parseModuleHeader(library.moduleHeaderData).packageFragmentNameList - - return klibMetadataModuleDescriptorFactory.createPackageFragmentProvider( - library, - packageAccessHandler = null, - packageFragmentNames = packageFragmentNames, - storageManager = LockBasedStorageManager("KlibMetadataPackageFragmentProvider"), - moduleDescriptor = libraryModuleDescriptor, - configuration = CompilerDeserializationConfiguration(languageVersionSettings), - compositePackageFragmentAddend = null, - lookupTracker = LookupTracker.DO_NOTHING - ).also { - libraryModuleDescriptor.initialize(it) - } - } -} - -private val MetadataFactories = - KlibMetadataFactories( - { DefaultBuiltIns.Instance }, - NullFlexibleTypeDeserializer, - NativeTypeTransformer() - ) \ No newline at end of file diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaNativeKlibLibraryInfo.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaNativeKlibLibraryInfo.kt deleted file mode 100644 index e2b388a9..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaNativeKlibLibraryInfo.kt +++ /dev/null @@ -1,44 +0,0 @@ -package org.jetbrains.dokka.analysis.resolve - -import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.descriptors.ModuleCapability -import org.jetbrains.kotlin.descriptors.konan.DeserializedKlibModuleOrigin -import org.jetbrains.kotlin.descriptors.konan.KlibModuleOrigin -import org.jetbrains.kotlin.idea.klib.safeRead -import org.jetbrains.kotlin.library.KotlinLibrary -import org.jetbrains.kotlin.library.isInterop -import org.jetbrains.kotlin.library.shortName -import org.jetbrains.kotlin.library.uniqueName -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.platform.TargetPlatform -import org.jetbrains.kotlin.platform.konan.NativePlatforms -import org.jetbrains.kotlin.resolve.ImplicitIntegerCoercion -import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices - -/** TODO: replace by [NativeKlibLibraryInfo] after fix of KT-40734 */ -internal class DokkaNativeKlibLibraryInfo( - override val kotlinLibrary: KotlinLibrary, - override val analyzerServices: PlatformDependentAnalyzerServices, - private val dependencyResolver: DokkaKlibLibraryDependencyResolver -) : DokkaKlibLibraryInfo() { - init { - dependencyResolver.registerLibrary(this) - } - - override val name: Name by lazy { - val libraryName = kotlinLibrary.shortName ?: kotlinLibrary.uniqueName - Name.special("<$libraryName>") - } - - override val platform: TargetPlatform = NativePlatforms.unspecifiedNativePlatform - override fun dependencies(): List = listOf(this) + dependencyResolver.resolveDependencies(this) - override fun getLibraryRoots(): Collection = listOf(libraryRoot) - - override val capabilities: Map, Any?> - get() { - val capabilities = super.capabilities.toMutableMap() - capabilities[KlibModuleOrigin.CAPABILITY] = DeserializedKlibModuleOrigin(kotlinLibrary) - capabilities[ImplicitIntegerCoercion.MODULE_CAPABILITY] = kotlinLibrary.safeRead(false) { isInterop } - return capabilities - } -} diff --git a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaNativeResolverForModuleFactory.kt b/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaNativeResolverForModuleFactory.kt deleted file mode 100644 index 0114f1ac..00000000 --- a/kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/resolve/DokkaNativeResolverForModuleFactory.kt +++ /dev/null @@ -1,76 +0,0 @@ -package org.jetbrains.dokka.analysis.resolve - -import org.jetbrains.kotlin.analyzer.* -import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns -import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.container.get -import org.jetbrains.kotlin.context.ModuleContext -import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl -import org.jetbrains.kotlin.frontend.di.createContainerForLazyResolve -import org.jetbrains.kotlin.idea.klib.createKlibPackageFragmentProvider -import org.jetbrains.kotlin.incremental.components.LookupTracker -import org.jetbrains.kotlin.konan.util.KlibMetadataFactories -import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer -import org.jetbrains.kotlin.resolve.CodeAnalyzerInitializer -import org.jetbrains.kotlin.resolve.SealedClassInheritorsProvider -import org.jetbrains.kotlin.resolve.TargetEnvironment -import org.jetbrains.kotlin.resolve.konan.platform.NativePlatformAnalyzerServices -import org.jetbrains.kotlin.resolve.lazy.ResolveSession -import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService - -/** TODO: replace by [NativeResolverForModuleFactory] after fix of KT-40734 */ -internal class DokkaNativeResolverForModuleFactory( - private val targetEnvironment: TargetEnvironment -) : ResolverForModuleFactory() { - companion object { - private val metadataFactories = KlibMetadataFactories(::KonanBuiltIns, NullFlexibleTypeDeserializer) - } - - override fun createResolverForModule( - moduleDescriptor: ModuleDescriptorImpl, - moduleContext: ModuleContext, - moduleContent: ModuleContent, - resolverForProject: ResolverForProject, - languageVersionSettings: LanguageVersionSettings, - sealedInheritorsProvider: SealedClassInheritorsProvider - ): ResolverForModule { - - val declarationProviderFactory = DeclarationProviderFactoryService.createDeclarationProviderFactory( - moduleContext.project, - moduleContext.storageManager, - moduleContent.syntheticFiles, - moduleContent.moduleContentScope, - moduleContent.moduleInfo - ) - - val container = createContainerForLazyResolve( - moduleContext, - declarationProviderFactory, - CodeAnalyzerInitializer.getInstance(moduleContext.project).createTrace(), - moduleDescriptor.platform!!, - NativePlatformAnalyzerServices, - targetEnvironment, - languageVersionSettings - ) - - var packageFragmentProvider = container.get().packageFragmentProvider - - val klibPackageFragmentProvider = (moduleContent.moduleInfo as? DokkaNativeKlibLibraryInfo) - ?.kotlinLibrary - ?.createKlibPackageFragmentProvider( - storageManager = moduleContext.storageManager, - metadataModuleDescriptorFactory = metadataFactories.DefaultDeserializedDescriptorFactory, - languageVersionSettings = languageVersionSettings, - moduleDescriptor = moduleDescriptor, - lookupTracker = LookupTracker.DO_NOTHING - ) - - if (klibPackageFragmentProvider != null) { - packageFragmentProvider = - CompositePackageFragmentProvider(listOf(packageFragmentProvider, klibPackageFragmentProvider), "DokkaCompositePackageFragmentProvider") - } - - return ResolverForModule(packageFragmentProvider, container) - } -} diff --git a/plugins/all-modules-page/build.gradle.kts b/plugins/all-modules-page/build.gradle.kts index d0778dc5..191f2433 100644 --- a/plugins/all-modules-page/build.gradle.kts +++ b/plugins/all-modules-page/build.gradle.kts @@ -11,27 +11,20 @@ registerDokkaArtifactPublication("dokkaAllModulesPage") { dependencies { compileOnly(projects.core) - implementation(kotlin("reflect")) + compileOnly(projects.subprojects.analysisKotlinApi) - compileOnly(projects.kotlinAnalysis) implementation(projects.plugins.base) implementation(projects.plugins.templating) + + implementation(projects.subprojects.analysisMarkdownJb) + + implementation(libs.kotlinx.html) + testImplementation(projects.plugins.base) testImplementation(projects.plugins.base.baseTestUtils) testImplementation(projects.plugins.gfm) testImplementation(projects.plugins.gfm.gfmTemplateProcessing) testImplementation(projects.core.contentMatcherTestUtils) - - implementation(libs.kotlinx.coroutines.core) - implementation(libs.jackson.kotlin) - constraints { - implementation(libs.jackson.databind) { - because("CVE-2022-42003") - } - } - implementation(libs.kotlinx.html) - implementation(libs.jsoup) - testImplementation(projects.core.testApi) testImplementation(platform(libs.junit.bom)) testImplementation(libs.junit.jupiter) diff --git a/plugins/all-modules-page/src/main/kotlin/MultimodulePageCreator.kt b/plugins/all-modules-page/src/main/kotlin/MultimodulePageCreator.kt index 2901f361..e0092fcd 100644 --- a/plugins/all-modules-page/src/main/kotlin/MultimodulePageCreator.kt +++ b/plugins/all-modules-page/src/main/kotlin/MultimodulePageCreator.kt @@ -2,12 +2,8 @@ package org.jetbrains.dokka.allModulesPage import org.jetbrains.dokka.DokkaConfiguration.DokkaModuleDescription import org.jetbrains.dokka.DokkaConfiguration.DokkaSourceSet +import org.jetbrains.dokka.analysis.markdown.jb.MarkdownParser import org.jetbrains.dokka.base.DokkaBase -import org.jetbrains.dokka.base.parsers.MarkdownParser -import org.jetbrains.dokka.base.parsers.moduleAndPackage.ModuleAndPackageDocumentation.Classifier.Module -import org.jetbrains.dokka.base.parsers.moduleAndPackage.ModuleAndPackageDocumentationParsingContext -import org.jetbrains.dokka.base.parsers.moduleAndPackage.parseModuleAndPackageDocumentation -import org.jetbrains.dokka.base.parsers.moduleAndPackage.parseModuleAndPackageDocumentationFragments import org.jetbrains.dokka.base.resolvers.anchors.SymbolAnchorHint import org.jetbrains.dokka.base.transformers.pages.comments.DocTagToContentConverter import org.jetbrains.dokka.base.translators.documentables.PageContentBuilder @@ -22,6 +18,7 @@ import org.jetbrains.dokka.plugability.plugin import org.jetbrains.dokka.plugability.querySingle import org.jetbrains.dokka.transformers.pages.PageCreator import org.jetbrains.dokka.utilities.DokkaLogger +import org.jetbrains.kotlin.analysis.kotlin.internal.InternalKotlinAnalysisPlugin import java.io.File class MultimodulePageCreator( @@ -31,6 +28,7 @@ class MultimodulePageCreator( private val commentsConverter by lazy { context.plugin().querySingle { commentsToContentConverter } } private val signatureProvider by lazy { context.plugin().querySingle { signatureProvider } } + private val moduleDocumentationReader by lazy { context.plugin().querySingle { moduleAndPackageDocumentationReader } } override fun invoke(creationContext: AllModulesPageGeneration.DefaultAllModulesContext): RootPageNode { val modules = context.configuration.modules @@ -88,15 +86,7 @@ class MultimodulePageCreator( files.map { MarkdownParser({ null }, it.absolutePath).parse(it.readText()) } private fun getDisplayedModuleDocumentation(module: DokkaModuleDescription): P? { - val parsingContext = ModuleAndPackageDocumentationParsingContext(logger) - - val documentationFragment = module.includes - .flatMap { include -> parseModuleAndPackageDocumentationFragments(include) } - .firstOrNull { fragment -> fragment.classifier == Module && fragment.name == module.name } - ?: return null - - val moduleDocumentation = parseModuleAndPackageDocumentation(parsingContext, documentationFragment) - return moduleDocumentation.documentation.firstParagraph() + return moduleDocumentationReader.read(module)?.firstParagraph() } private fun DocumentationNode.firstParagraph(): P? = diff --git a/plugins/android-documentation/build.gradle.kts b/plugins/android-documentation/build.gradle.kts index 5ef734b8..4dfc972d 100644 --- a/plugins/android-documentation/build.gradle.kts +++ b/plugins/android-documentation/build.gradle.kts @@ -8,9 +8,10 @@ plugins { dependencies { compileOnly(projects.core) - implementation(kotlin("reflect")) implementation(projects.plugins.base) + implementation(kotlin("reflect")) + testImplementation(projects.plugins.base) testImplementation(projects.plugins.base.baseTestUtils) testImplementation(projects.core.testApi) diff --git a/plugins/android-documentation/src/test/kotlin/transformers/HideTagDocumentableFilterTest.kt b/plugins/android-documentation/src/test/kotlin/transformers/HideTagDocumentableFilterTest.kt index 82375201..180268e4 100644 --- a/plugins/android-documentation/src/test/kotlin/transformers/HideTagDocumentableFilterTest.kt +++ b/plugins/android-documentation/src/test/kotlin/transformers/HideTagDocumentableFilterTest.kt @@ -2,8 +2,8 @@ package transformers import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest import org.jetbrains.dokka.model.DClass -import kotlin.test.assertEquals import org.junit.jupiter.api.Test +import kotlin.test.assertEquals class HideTagDocumentableFilterTest : BaseAbstractTest() { private val configuration = dokkaConfiguration { @@ -68,4 +68,4 @@ class HideTagDocumentableFilterTest : BaseAbstractTest() { } -} \ No newline at end of file +} diff --git a/plugins/base/api/base.api b/plugins/base/api/base.api index 0af1b46a..26787734 100644 --- a/plugins/base/api/base.api +++ b/plugins/base/api/base.api @@ -6,12 +6,7 @@ public final class org/jetbrains/dokka/base/DokkaBase : org/jetbrains/dokka/plug public final fun getCommentsToContentConverter ()Lorg/jetbrains/dokka/plugability/ExtensionPoint; public final fun getCustomResourceInstaller ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getCustomTagContentProvider ()Lorg/jetbrains/dokka/plugability/ExtensionPoint; - public final fun getDefaultExternalClasslikesTranslator ()Lorg/jetbrains/dokka/plugability/Extension; - public final fun getDefaultExternalDocumentablesProvider ()Lorg/jetbrains/dokka/plugability/Extension; - public final fun getDefaultKotlinAnalysis ()Lorg/jetbrains/dokka/plugability/Extension; - public final fun getDefaultSamplesTransformer ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getDeprecatedDocumentableFilter ()Lorg/jetbrains/dokka/plugability/Extension; - public final fun getDescriptorToDocumentableTranslator ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getDocTagToContentConverter ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getDocumentableMerger ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getDocumentableToPageTranslator ()Lorg/jetbrains/dokka/plugability/Extension; @@ -20,8 +15,6 @@ public final class org/jetbrains/dokka/base/DokkaBase : org/jetbrains/dokka/plug public final fun getEmptyModulesFilter ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getEmptyPackagesFilter ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getExtensionsExtractor ()Lorg/jetbrains/dokka/plugability/Extension; - public final fun getExternalClasslikesTranslator ()Lorg/jetbrains/dokka/plugability/ExtensionPoint; - public final fun getExternalDocumentablesProvider ()Lorg/jetbrains/dokka/plugability/ExtensionPoint; public final fun getExternalLocationProviderFactory ()Lorg/jetbrains/dokka/plugability/ExtensionPoint; public final fun getFallbackMerger ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getFileWriter ()Lorg/jetbrains/dokka/plugability/Extension; @@ -31,7 +24,6 @@ public final class org/jetbrains/dokka/base/DokkaBase : org/jetbrains/dokka/plug public final fun getInheritedEntriesVisbilityFilter ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getInheritorsExtractor ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getJavadocLocationProvider ()Lorg/jetbrains/dokka/plugability/Extension; - public final fun getKotlinAnalysis ()Lorg/jetbrains/dokka/plugability/ExtensionPoint; public final fun getKotlinArrayDocumentableReplacer ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getKotlinSignatureProvider ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getLocationProvider ()Lorg/jetbrains/dokka/plugability/Extension; @@ -45,7 +37,6 @@ public final class org/jetbrains/dokka/base/DokkaBase : org/jetbrains/dokka/plug public final fun getPageMergerStrategy ()Lorg/jetbrains/dokka/plugability/ExtensionPoint; public final fun getPathToRootConsumer ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getPreMergeDocumentableTransformer ()Lorg/jetbrains/dokka/plugability/ExtensionPoint; - public final fun getPsiToDocumentableTranslator ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getReplaceVersionConsumer ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getResolveLinkConsumer ()Lorg/jetbrains/dokka/plugability/Extension; public final fun getRootCreator ()Lorg/jetbrains/dokka/plugability/Extension; @@ -120,104 +111,6 @@ public final class org/jetbrains/dokka/base/generation/SingleModuleGeneration : public final fun validityCheck (Lorg/jetbrains/dokka/plugability/DokkaContext;)V } -public class org/jetbrains/dokka/base/parsers/MarkdownParser : org/jetbrains/dokka/base/parsers/Parser { - public static final field Companion Lorg/jetbrains/dokka/base/parsers/MarkdownParser$Companion; - public fun (Lkotlin/jvm/functions/Function1;Ljava/lang/String;)V - public fun parseStringToDocNode (Ljava/lang/String;)Lorg/jetbrains/dokka/model/doc/DocTag; - public fun parseTagWithBody (Ljava/lang/String;Ljava/lang/String;)Lorg/jetbrains/dokka/model/doc/TagWrapper; - public fun preparse (Ljava/lang/String;)Ljava/lang/String; -} - -public final class org/jetbrains/dokka/base/parsers/MarkdownParser$Companion { - public final fun fqName (Lorg/jetbrains/dokka/links/DRI;)Ljava/lang/String; - public final fun parseFromKDocTag (Lorg/jetbrains/kotlin/kdoc/psi/impl/KDocTag;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Z)Lorg/jetbrains/dokka/model/doc/DocumentationNode; - public static synthetic fun parseFromKDocTag$default (Lorg/jetbrains/dokka/base/parsers/MarkdownParser$Companion;Lorg/jetbrains/kotlin/kdoc/psi/impl/KDocTag;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ZILjava/lang/Object;)Lorg/jetbrains/dokka/model/doc/DocumentationNode; -} - -public abstract class org/jetbrains/dokka/base/parsers/Parser { - public fun ()V - public fun parse (Ljava/lang/String;)Lorg/jetbrains/dokka/model/doc/DocumentationNode; - public abstract fun parseStringToDocNode (Ljava/lang/String;)Lorg/jetbrains/dokka/model/doc/DocTag; - public fun parseTagWithBody (Ljava/lang/String;Ljava/lang/String;)Lorg/jetbrains/dokka/model/doc/TagWrapper; - public abstract fun preparse (Ljava/lang/String;)Ljava/lang/String; -} - -public final class org/jetbrains/dokka/base/parsers/factories/DocTagsFromIElementFactory { - public static final field INSTANCE Lorg/jetbrains/dokka/base/parsers/factories/DocTagsFromIElementFactory; - public final fun getInstance (Lorg/intellij/markdown/IElementType;Ljava/util/List;Ljava/util/Map;Ljava/lang/String;Lorg/jetbrains/dokka/links/DRI;Z)Ljava/util/List; - public static synthetic fun getInstance$default (Lorg/jetbrains/dokka/base/parsers/factories/DocTagsFromIElementFactory;Lorg/intellij/markdown/IElementType;Ljava/util/List;Ljava/util/Map;Ljava/lang/String;Lorg/jetbrains/dokka/links/DRI;ZILjava/lang/Object;)Ljava/util/List; -} - -public final class org/jetbrains/dokka/base/parsers/factories/DocTagsFromStringFactory { - public static final field INSTANCE Lorg/jetbrains/dokka/base/parsers/factories/DocTagsFromStringFactory; - public final fun getInstance (Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/lang/String;Lorg/jetbrains/dokka/links/DRI;)Lorg/jetbrains/dokka/model/doc/DocTag; - public static synthetic fun getInstance$default (Lorg/jetbrains/dokka/base/parsers/factories/DocTagsFromStringFactory;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/lang/String;Lorg/jetbrains/dokka/links/DRI;ILjava/lang/Object;)Lorg/jetbrains/dokka/model/doc/DocTag; -} - -public final class org/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation { - public fun (Ljava/lang/String;Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier;Lorg/jetbrains/dokka/model/doc/DocumentationNode;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier; - public final fun component3 ()Lorg/jetbrains/dokka/model/doc/DocumentationNode; - public final fun copy (Ljava/lang/String;Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier;Lorg/jetbrains/dokka/model/doc/DocumentationNode;)Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation; - public static synthetic fun copy$default (Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation;Ljava/lang/String;Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier;Lorg/jetbrains/dokka/model/doc/DocumentationNode;ILjava/lang/Object;)Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation; - public fun equals (Ljava/lang/Object;)Z - public final fun getClassifier ()Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier; - public final fun getDocumentation ()Lorg/jetbrains/dokka/model/doc/DocumentationNode; - public final fun getName ()Ljava/lang/String; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class org/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier : java/lang/Enum { - public static final field Module Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier; - public static final field Package Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier; - public static fun valueOf (Ljava/lang/String;)Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier; - public static fun values ()[Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier; -} - -public final class org/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationFragment { - public fun (Ljava/lang/String;Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier;Ljava/lang/String;Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationSource;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier; - public final fun component3 ()Ljava/lang/String; - public final fun component4 ()Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationSource; - public final fun copy (Ljava/lang/String;Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier;Ljava/lang/String;Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationSource;)Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationFragment; - public static synthetic fun copy$default (Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationFragment;Ljava/lang/String;Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier;Ljava/lang/String;Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationSource;ILjava/lang/Object;)Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationFragment; - public fun equals (Ljava/lang/Object;)Z - public final fun getClassifier ()Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation$Classifier; - public final fun getDocumentation ()Ljava/lang/String; - public final fun getName ()Ljava/lang/String; - public final fun getSource ()Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationSource; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public abstract interface class org/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationParsingContext { - public abstract fun markdownParserFor (Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationFragment;Ljava/lang/String;)Lorg/jetbrains/dokka/base/parsers/MarkdownParser; -} - -public final class org/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationParsingContextKt { - public static final fun ModuleAndPackageDocumentationParsingContext (Lorg/jetbrains/dokka/utilities/DokkaLogger;Lorg/jetbrains/dokka/analysis/DokkaResolutionFacade;)Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationParsingContext; - public static synthetic fun ModuleAndPackageDocumentationParsingContext$default (Lorg/jetbrains/dokka/utilities/DokkaLogger;Lorg/jetbrains/dokka/analysis/DokkaResolutionFacade;ILjava/lang/Object;)Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationParsingContext; -} - -public abstract class org/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationSource { - public fun ()V - public abstract fun getDocumentation ()Ljava/lang/String; - public abstract fun getSourceDescription ()Ljava/lang/String; - public fun toString ()Ljava/lang/String; -} - -public final class org/jetbrains/dokka/base/parsers/moduleAndPackage/ParseModuleAndPackageDocumentationFragmentsKt { - public static final fun parseModuleAndPackageDocumentationFragments (Ljava/io/File;)Ljava/util/List; - public static final fun parseModuleAndPackageDocumentationFragments (Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationSource;)Ljava/util/List; -} - -public final class org/jetbrains/dokka/base/parsers/moduleAndPackage/ParseModuleAndPackageDocumentationKt { - public static final fun parseModuleAndPackageDocumentation (Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationParsingContext;Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentationFragment;)Lorg/jetbrains/dokka/base/parsers/moduleAndPackage/ModuleAndPackageDocumentation; -} - public final class org/jetbrains/dokka/base/renderers/ContentTypeCheckingKt { public static final fun getURIExtension (Ljava/lang/String;)Ljava/lang/String; public static final fun isImage (Ljava/lang/String;)Z @@ -391,7 +284,7 @@ public final class org/jetbrains/dokka/base/renderers/html/HtmlRendererKt { } public abstract class org/jetbrains/dokka/base/renderers/html/NavigationDataProvider { - public fun ()V + public fun (Lorg/jetbrains/dokka/plugability/DokkaContext;)V public fun navigableChildren (Lorg/jetbrains/dokka/pages/RootPageNode;)Lorg/jetbrains/dokka/base/renderers/html/NavigationNode; public fun visit (Lorg/jetbrains/dokka/pages/ContentPage;)Lorg/jetbrains/dokka/base/renderers/html/NavigationNode; } @@ -1276,11 +1169,6 @@ public final class org/jetbrains/dokka/base/transformers/documentables/UtilsKt { public static final fun isException (Lorg/jetbrains/dokka/model/properties/WithExtraProperties;)Z } -public final class org/jetbrains/dokka/base/transformers/documentables/utils/FullClassHierarchyBuilder { - public fun ()V - public final fun invoke (Lorg/jetbrains/dokka/model/DModule;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -} - public final class org/jetbrains/dokka/base/transformers/pages/annotations/SinceKotlinTransformer : org/jetbrains/dokka/transformers/documentation/DocumentableTransformer { public fun (Lorg/jetbrains/dokka/plugability/DokkaContext;)V public final fun getContext ()Lorg/jetbrains/dokka/plugability/DokkaContext; @@ -1332,21 +1220,6 @@ public final class org/jetbrains/dokka/base/transformers/pages/merger/SourceSetM public fun invoke (Lorg/jetbrains/dokka/pages/RootPageNode;)Lorg/jetbrains/dokka/pages/RootPageNode; } -public final class org/jetbrains/dokka/base/transformers/pages/samples/DefaultSamplesTransformer : org/jetbrains/dokka/base/transformers/pages/samples/SamplesTransformer { - public fun (Lorg/jetbrains/dokka/plugability/DokkaContext;)V - public fun processBody (Lcom/intellij/psi/PsiElement;)Ljava/lang/String; - public fun processImports (Lcom/intellij/psi/PsiElement;)Ljava/lang/String; -} - -public abstract class org/jetbrains/dokka/base/transformers/pages/samples/SamplesTransformer : org/jetbrains/dokka/transformers/pages/PageTransformer { - public fun (Lorg/jetbrains/dokka/plugability/DokkaContext;)V - protected fun createSampleBody (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; - public final fun getContext ()Lorg/jetbrains/dokka/plugability/DokkaContext; - public final fun invoke (Lorg/jetbrains/dokka/pages/RootPageNode;)Lorg/jetbrains/dokka/pages/RootPageNode; - public abstract fun processBody (Lcom/intellij/psi/PsiElement;)Ljava/lang/String; - public abstract fun processImports (Lcom/intellij/psi/PsiElement;)Ljava/lang/String; -} - public final class org/jetbrains/dokka/base/transformers/pages/sourcelinks/SourceLink { public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;)V public fun (Lorg/jetbrains/dokka/DokkaConfiguration$SourceLinkDefinition;Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;)V @@ -1389,43 +1262,6 @@ public final class org/jetbrains/dokka/base/transformers/pages/tags/SinceKotlinT public fun isApplicable (Lorg/jetbrains/dokka/model/doc/CustomTagWrapper;)Z } -public final class org/jetbrains/dokka/base/translators/descriptors/DRIWithPlatformInfo { - public fun (Lorg/jetbrains/dokka/links/DRI;Ljava/util/Map;)V - public final fun component1 ()Lorg/jetbrains/dokka/links/DRI; - public final fun component2 ()Ljava/util/Map; - public final fun copy (Lorg/jetbrains/dokka/links/DRI;Ljava/util/Map;)Lorg/jetbrains/dokka/base/translators/descriptors/DRIWithPlatformInfo; - public static synthetic fun copy$default (Lorg/jetbrains/dokka/base/translators/descriptors/DRIWithPlatformInfo;Lorg/jetbrains/dokka/links/DRI;Ljava/util/Map;ILjava/lang/Object;)Lorg/jetbrains/dokka/base/translators/descriptors/DRIWithPlatformInfo; - public fun equals (Ljava/lang/Object;)Z - public final fun getActual ()Ljava/util/Map; - public final fun getDri ()Lorg/jetbrains/dokka/links/DRI; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class org/jetbrains/dokka/base/translators/descriptors/DefaultDescriptorToDocumentableTranslator : org/jetbrains/dokka/base/translators/descriptors/ExternalClasslikesTranslator, org/jetbrains/dokka/transformers/sources/AsyncSourceToDocumentableTranslator { - public fun (Lorg/jetbrains/dokka/plugability/DokkaContext;)V - public fun invoke (Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;Lorg/jetbrains/dokka/plugability/DokkaContext;)Lorg/jetbrains/dokka/model/DModule; - public fun invokeSuspending (Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;Lorg/jetbrains/dokka/plugability/DokkaContext;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public fun translateClassDescriptor (Lorg/jetbrains/kotlin/descriptors/ClassDescriptor;Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;)Lorg/jetbrains/dokka/model/DClasslike; -} - -public final class org/jetbrains/dokka/base/translators/descriptors/DefaultDescriptorToDocumentableTranslatorKt { - public static final fun withEmptyInfo (Lorg/jetbrains/dokka/links/DRI;)Lorg/jetbrains/dokka/base/translators/descriptors/DRIWithPlatformInfo; -} - -public final class org/jetbrains/dokka/base/translators/descriptors/DefaultExternalDocumentablesProvider : org/jetbrains/dokka/base/translators/descriptors/ExternalDocumentablesProvider { - public fun (Lorg/jetbrains/dokka/plugability/DokkaContext;)V - public fun findClasslike (Lorg/jetbrains/dokka/links/DRI;Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;)Lorg/jetbrains/dokka/model/DClasslike; -} - -public abstract interface class org/jetbrains/dokka/base/translators/descriptors/ExternalClasslikesTranslator { - public abstract fun translateClassDescriptor (Lorg/jetbrains/kotlin/descriptors/ClassDescriptor;Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;)Lorg/jetbrains/dokka/model/DClasslike; -} - -public abstract interface class org/jetbrains/dokka/base/translators/descriptors/ExternalDocumentablesProvider { - public abstract fun findClasslike (Lorg/jetbrains/dokka/links/DRI;Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;)Lorg/jetbrains/dokka/model/DClasslike; -} - public final class org/jetbrains/dokka/base/translators/documentables/BriefFromContentNodesKt { public static final fun firstParagraphBrief (Lorg/jetbrains/dokka/model/doc/DocTag;)Lorg/jetbrains/dokka/model/doc/DocTag; public static final fun firstSentenceBriefFromContentNodes (Ljava/util/List;)Ljava/util/List; @@ -1441,8 +1277,8 @@ public final class org/jetbrains/dokka/base/translators/documentables/DefaultDoc } public class org/jetbrains/dokka/base/translators/documentables/DefaultPageCreator { - public fun (Lorg/jetbrains/dokka/base/DokkaBaseConfiguration;Lorg/jetbrains/dokka/base/transformers/pages/comments/CommentsToContentConverter;Lorg/jetbrains/dokka/base/signatures/SignatureProvider;Lorg/jetbrains/dokka/utilities/DokkaLogger;Ljava/util/List;)V - public synthetic fun (Lorg/jetbrains/dokka/base/DokkaBaseConfiguration;Lorg/jetbrains/dokka/base/transformers/pages/comments/CommentsToContentConverter;Lorg/jetbrains/dokka/base/signatures/SignatureProvider;Lorg/jetbrains/dokka/utilities/DokkaLogger;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lorg/jetbrains/dokka/base/DokkaBaseConfiguration;Lorg/jetbrains/dokka/base/transformers/pages/comments/CommentsToContentConverter;Lorg/jetbrains/dokka/base/signatures/SignatureProvider;Lorg/jetbrains/dokka/utilities/DokkaLogger;Ljava/util/List;Lorg/jetbrains/kotlin/analysis/kotlin/internal/DocumentableSourceLanguageParser;)V + public synthetic fun (Lorg/jetbrains/dokka/base/DokkaBaseConfiguration;Lorg/jetbrains/dokka/base/transformers/pages/comments/CommentsToContentConverter;Lorg/jetbrains/dokka/base/signatures/SignatureProvider;Lorg/jetbrains/dokka/utilities/DokkaLogger;Ljava/util/List;Lorg/jetbrains/kotlin/analysis/kotlin/internal/DocumentableSourceLanguageParser;ILkotlin/jvm/internal/DefaultConstructorMarker;)V protected fun contentForBrief (Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder$DocumentableContentBuilder;Lorg/jetbrains/dokka/model/Documentable;)V protected fun contentForClasslikesAndEntries (Ljava/util/List;)Lorg/jetbrains/dokka/pages/ContentGroup; protected fun contentForConstructors (Ljava/util/List;Ljava/util/Set;Ljava/util/Set;)Lorg/jetbrains/dokka/pages/ContentGroup; @@ -1462,6 +1298,7 @@ public class org/jetbrains/dokka/base/translators/documentables/DefaultPageCreat public static synthetic fun divergentBlock$default (Lorg/jetbrains/dokka/base/translators/documentables/DefaultPageCreator;Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder$DocumentableContentBuilder;Ljava/lang/String;Ljava/util/Collection;Lorg/jetbrains/dokka/pages/ContentKind;Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILjava/lang/Object;)V protected fun getContentBuilder ()Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder; public final fun getCustomTagContentProviders ()Ljava/util/List; + public final fun getDocumentableAnalyzer ()Lorg/jetbrains/kotlin/analysis/kotlin/internal/DocumentableSourceLanguageParser; public final fun getLogger ()Lorg/jetbrains/dokka/utilities/DokkaLogger; protected final fun getMergeImplicitExpectActualDeclarations ()Z protected final fun getSeparateInheritedMembers ()Z @@ -1622,27 +1459,3 @@ public class org/jetbrains/dokka/base/translators/documentables/PageContentBuild public static synthetic fun row$default (Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder$TableBuilder;Ljava/util/Set;Ljava/util/Set;Lorg/jetbrains/dokka/pages/Kind;Ljava/util/Set;Lorg/jetbrains/dokka/model/properties/PropertyContainer;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V } -public final class org/jetbrains/dokka/base/translators/psi/DefaultPsiToDocumentableTranslator : org/jetbrains/dokka/transformers/sources/AsyncSourceToDocumentableTranslator { - public fun (Lorg/jetbrains/dokka/plugability/DokkaContext;)V - public fun invoke (Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;Lorg/jetbrains/dokka/plugability/DokkaContext;)Lorg/jetbrains/dokka/model/DModule; - public fun invokeSuspending (Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;Lorg/jetbrains/dokka/plugability/DokkaContext;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -} - -public final class org/jetbrains/dokka/base/translators/psi/DefaultPsiToDocumentableTranslator$DokkaPsiParser { - public fun (Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;Lorg/jetbrains/dokka/analysis/DokkaResolutionFacade;Lorg/jetbrains/dokka/utilities/DokkaLogger;)V - public final fun parsePackage (Ljava/lang/String;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -} - -public abstract interface class org/jetbrains/dokka/base/translators/psi/parsers/JavaDocumentationParser { - public abstract fun parseDocumentation (Lcom/intellij/psi/PsiNamedElement;)Lorg/jetbrains/dokka/model/doc/DocumentationNode; -} - -public final class org/jetbrains/dokka/base/translators/psi/parsers/JavadocParser : org/jetbrains/dokka/base/translators/psi/parsers/JavaDocumentationParser { - public static final field Companion Lorg/jetbrains/dokka/base/translators/psi/parsers/JavadocParser$Companion; - public fun (Lorg/jetbrains/dokka/utilities/DokkaLogger;Lorg/jetbrains/dokka/analysis/DokkaResolutionFacade;)V - public fun parseDocumentation (Lcom/intellij/psi/PsiNamedElement;)Lorg/jetbrains/dokka/model/doc/DocumentationNode; -} - -public final class org/jetbrains/dokka/base/translators/psi/parsers/JavadocParser$Companion { -} - diff --git a/plugins/base/base-test-utils/build.gradle.kts b/plugins/base/base-test-utils/build.gradle.kts index 2645fbc3..ef4f9f7b 100644 --- a/plugins/base/base-test-utils/build.gradle.kts +++ b/plugins/base/base-test-utils/build.gradle.kts @@ -7,11 +7,15 @@ plugins { dependencies { compileOnly(projects.core) + compileOnly(projects.plugins.base) + + api(projects.subprojects.analysisKotlinApi) + // TODO [beresnev] analysis switcher + runtimeOnly(project(path = ":subprojects:analysis-kotlin-descriptors", configuration = "shadow")) implementation(kotlin("reflect")) - compileOnly(projects.plugins.base) implementation(projects.core.testApi) implementation(libs.jsoup) diff --git a/plugins/base/base-test-utils/src/main/kotlin/testRunner/baseTestApi.kt b/plugins/base/base-test-utils/src/main/kotlin/testRunner/baseTestApi.kt index a11ddb84..593a487c 100644 --- a/plugins/base/base-test-utils/src/main/kotlin/testRunner/baseTestApi.kt +++ b/plugins/base/base-test-utils/src/main/kotlin/testRunner/baseTestApi.kt @@ -9,7 +9,10 @@ import org.jetbrains.dokka.pages.RootPageNode import org.jetbrains.dokka.plugability.DokkaContext import org.jetbrains.dokka.plugability.DokkaPlugin import org.jetbrains.dokka.testApi.logger.TestLogger -import org.jetbrains.dokka.testApi.testRunner.* +import org.jetbrains.dokka.testApi.testRunner.AbstractTest +import org.jetbrains.dokka.testApi.testRunner.CoreTestMethods +import org.jetbrains.dokka.testApi.testRunner.DokkaTestGenerator +import org.jetbrains.dokka.testApi.testRunner.TestBuilder import org.jetbrains.dokka.utilities.DokkaConsoleLogger import org.jetbrains.dokka.utilities.DokkaLogger import org.jetbrains.dokka.utilities.LoggingLevel diff --git a/plugins/base/build.gradle.kts b/plugins/base/build.gradle.kts index b6ba2917..8bea63e8 100644 --- a/plugins/base/build.gradle.kts +++ b/plugins/base/build.gradle.kts @@ -8,14 +8,16 @@ plugins { dependencies { compileOnly(projects.core) + compileOnly(projects.subprojects.analysisKotlinApi) - implementation(kotlin("reflect")) + implementation(projects.subprojects.analysisMarkdownJb) + // Other + implementation(kotlin("reflect")) implementation(libs.kotlinx.coroutines.core) - - compileOnly(projects.kotlinAnalysis) implementation(libs.jsoup) - + implementation(libs.freemarker) + implementation(libs.kotlinx.html) implementation(libs.jackson.kotlin) constraints { implementation(libs.jackson.databind) { @@ -23,14 +25,9 @@ dependencies { } } - implementation(libs.freemarker) - + // Test only testImplementation(projects.plugins.base.baseTestUtils) testImplementation(projects.core.contentMatcherTestUtils) - - implementation(libs.kotlinx.html) - - testImplementation(projects.kotlinAnalysis) testImplementation(projects.core.testApi) testImplementation(platform(libs.junit.bom)) testImplementation(libs.junit.jupiter) diff --git a/plugins/base/frontend/src/main/components/search/dokkaFuzzyFilter.tsx b/plugins/base/frontend/src/main/components/search/dokkaFuzzyFilter.tsx index 1d0c8c10..d5150dd5 100644 --- a/plugins/base/frontend/src/main/components/search/dokkaFuzzyFilter.tsx +++ b/plugins/base/frontend/src/main/components/search/dokkaFuzzyFilter.tsx @@ -2,7 +2,7 @@ import Select from '@jetbrains/ring-ui/components/select/select'; import {Option, OptionWithHighlightComponent, OptionWithSearchResult} from "./types"; import fuzzyHighlight from '@jetbrains/ring-ui/components/global/fuzzy-highlight.js' import React from "react"; -import {SearchResultRow, signatureFromSearchResult} from "./searchResultRow"; +import {SearchResultRow} from "./searchResultRow"; import _ from "lodash"; const orderRecords = (records: OptionWithSearchResult[], searchPhrase: string): OptionWithSearchResult[] => { @@ -94,4 +94,4 @@ export class DokkaFuzzyFilterComponent extends Select { return highlightMatchedPhrases(orderRecords(matchedRecords, filterPhrase)) } -} \ No newline at end of file +} diff --git a/plugins/base/frontend/src/main/components/search/search.tsx b/plugins/base/frontend/src/main/components/search/search.tsx index d4e406bf..045f6365 100644 --- a/plugins/base/frontend/src/main/components/search/search.tsx +++ b/plugins/base/frontend/src/main/components/search/search.tsx @@ -1,12 +1,12 @@ -import React, { useCallback, useEffect, useState } from 'react'; +import React, {useCallback, useEffect, useState} from 'react'; import List from '@jetbrains/ring-ui/components/list/list'; import Select from '@jetbrains/ring-ui/components/select/select'; import '@jetbrains/ring-ui/components/input-size/input-size.css'; import './search.scss'; import {CustomAnchorProps, IWindow, Option, Props} from "./types"; -import { DokkaSearchAnchor } from "./dokkaSearchAnchor"; -import { DokkaFuzzyFilterComponent } from "./dokkaFuzzyFilter"; -import { relativizeUrlForRequest } from '../utils/requests'; +import {DokkaSearchAnchor} from "./dokkaSearchAnchor"; +import {DokkaFuzzyFilterComponent} from "./dokkaFuzzyFilter"; +import {relativizeUrlForRequest} from '../utils/requests'; const WithFuzzySearchFilterComponent: React.FC = ({ data }: Props) => { const [selected, onSelected] = useState