Kotlin / dokka

API documentation engine for Kotlin
https://kotl.in/dokka
Apache License 2.0
3.34k stars 395 forks source link

[K2] `Modules are inconsistent` reported on using samples from different source root #3373

Open atyrin opened 7 months ago

atyrin commented 7 months ago

In a KMP configure samples like

tasks.dokkaHtml.configure {
    dokkaSourceSets {
        configureEach {
            samples.from("src/commonMain/kotlin/samples.kt")
        }
     }
}

and use a sample from the file in a platform source set

Execution failed for task ':dokkaHtml'
Caused by: org.jetbrains.kotlin.utils.exceptions.KotlinIllegalStateExceptionWithAttachments: Modules are inconsistent
    at org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirFileBuilder$buildRawFirFileWithCaching$1.invoke(LLFirFileBuilder.kt:56)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirFileBuilder$buildRawFirFileWithCaching$1.invoke(LLFirFileBuilder.kt:25)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.ModuleFileCacheImpl$fileCached$1.invoke(LLFirDeclrationsCacheForModule.kt:39)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.ModuleFileCacheImpl$fileCached$1.invoke(LLFirDeclrationsCacheForModule.kt:39)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.ModuleFileCacheImpl.fileCached$lambda$0(LLFirDeclrationsCacheForModule.kt:39)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.ModuleFileCacheImpl.fileCached(LLFirDeclrationsCacheForModule.kt:39)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirFileBuilder.buildRawFirFileWithCaching(LLFirFileBuilder.kt:25)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirProviderHelper$callablesByCallableId$1.invoke(LLFirProviderHelper.kt:96)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirProviderHelper$callablesByCallableId$1.invoke(LLFirProviderHelper.kt:91)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.fir.caches.FirThreadSafeCache.getValue(FirThreadSafeCache.kt:27)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirProviderHelper.getTopLevelCallableSymbols(LLFirProviderHelper.kt:167)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirProviderHelper.getTopLevelFunctionSymbols(LLFirProviderHelper.kt:135)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirProvider$SymbolProvider.getTopLevelFunctionSymbolsTo(LLFirProvider.kt:158)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirModuleWithDependenciesSymbolProvider.getTopLevelFunctionSymbolsToWithoutDependencies(LLFirModuleWithDependenciesSymbolProvider.kt:90)
    at org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirModuleWithDependenciesSymbolProvider.getTopLevelFunctionSymbolsTo(LLFirModuleWithDependenciesSymbolProvider.kt:74)
    at org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider.getTopLevelFunctionSymbols(FirSymbolProvider.kt:45)
    at org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope.processFunctionsByName(FirPackageMemberScope.kt:54)
    at org.jetbrains.kotlin.analysis.api.fir.scopes.FirScopeUtilsKt$getCallableSymbols$1.invokeSuspend(firScopeUtils.kt:24)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlin.sequences.SequenceBuilderIterator.hasNext(SequenceBuilder.kt:129)
    at kotlin.collections.CollectionsKt__MutableCollectionsKt.addAll(MutableCollections.kt:129)
    at org.jetbrains.kotlin.analysis.api.fir.references.KDocReferenceResolver.getAllSymbolsFromScopeByShortName(KDocReferenceResolver.kt:217)
    at org.jetbrains.kotlin.analysis.api.fir.references.KDocReferenceResolver.getSymbolsFromMemberScope(KDocReferenceResolver.kt:211)
    at org.jetbrains.kotlin.analysis.api.fir.references.KDocReferenceResolver.getSymbolsFromPackageScope(KDocReferenceResolver.kt:185)
    at org.jetbrains.kotlin.analysis.api.fir.references.KDocReferenceResolver.getSymbolsFromScopes(KDocReferenceResolver.kt:107)
    at org.jetbrains.kotlin.analysis.api.fir.references.KDocReferenceResolver.resolveKdocFqName(KDocReferenceResolver.kt:84)
    at org.jetbrains.kotlin.analysis.api.fir.references.KDocReferenceResolver.resolveKdocFqName$analysis_api_fir(KDocReferenceResolver.kt:47)
    at org.jetbrains.kotlin.analysis.api.fir.references.KtFirKDocReference.resolveToSymbols(KtFirKDocReference.kt:19)
    at org.jetbrains.kotlin.analysis.api.fir.components.KtFirReferenceResolveProvider.resolveToSymbols(KtFirReferenceResolveProvider.kt:23)
    at org.jetbrains.kotlin.analysis.api.components.KtReferenceResolveMixIn.resolveToSymbols(KtReferenceResolveMixIn.kt:14)
    at org.jetbrains.dokka.analysis.kotlin.symbols.kdoc.ResolveKDocLinkKt.resolveToSymbol(ResolveKDocLink.kt:81)
    at org.jetbrains.dokka.analysis.kotlin.symbols.kdoc.ResolveKDocLinkKt.resolveKDocTextLinkToSymbol(ResolveKDocLink.kt:51)
    at org.jetbrains.dokka.analysis.kotlin.symbols.kdoc.ResolveKDocLinkKt.resolveKDocTextLinkToSymbol$default(ResolveKDocLink.kt:49)
    at org.jetbrains.dokka.analysis.kotlin.symbols.services.SymbolSampleAnalysisEnvironment.findPsiElement(SymbolSampleAnalysisEnvironment.kt:114)
    at org.jetbrains.dokka.analysis.kotlin.symbols.services.SymbolSampleAnalysisEnvironment.findPsiElement(SymbolSampleAnalysisEnvironment.kt:107)
    at org.jetbrains.dokka.analysis.kotlin.symbols.services.SymbolSampleAnalysisEnvironment.resolveSample(SymbolSampleAnalysisEnvironment.kt:61)
    at org.jetbrains.dokka.base.transformers.pages.DefaultSamplesTransformer$invoke$1$1.invoke(DefaultSamplesTransformer.kt:37)
    at org.jetbrains.dokka.base.transformers.pages.DefaultSamplesTransformer$invoke$1$1.invoke(DefaultSamplesTransformer.kt:29)
    at org.jetbrains.dokka.pages.RootPageNode$transformContentPagesTree$1.invoke(PageNodes.kt:65)
    at org.jetbrains.dokka.pages.RootPageNode$transformContentPagesTree$1.invoke(PageNodes.kt:64)
    at org.jetbrains.dokka.pages.RootPageNode.transformNode(PageNodes.kt:69)
    at org.jetbrains.dokka.pages.RootPageNode.transformNode(PageNodes.kt:70)
    at org.jetbrains.dokka.pages.RootPageNode.transformNode(PageNodes.kt:70)
    at org.jetbrains.dokka.pages.RootPageNode.transformPageNodeTree(PageNodes.kt:62)
    at org.jetbrains.dokka.pages.RootPageNode.transformContentPagesTree(PageNodes.kt:64)
    at org.jetbrains.dokka.base.transformers.pages.DefaultSamplesTransformer$invoke$1.invoke(DefaultSamplesTransformer.kt:29)
    at org.jetbrains.dokka.base.transformers.pages.DefaultSamplesTransformer$invoke$1.invoke(DefaultSamplesTransformer.kt:28)
    at org.jetbrains.dokka.analysis.kotlin.symbols.services.SymbolSampleAnalysisEnvironmentCreator$use$1.invokeSuspend(SymbolSampleAnalysisEnvironment.kt:48)

Installation

Parent: https://github.com/Kotlin/dokka/issues/3328 Relates: #3239

dokka-repros.zip

IgnatBeresnev commented 2 months ago

Related:

IgnatBeresnev commented 1 month ago

Since it's not super clear how popular this use case is and/or if it should even be allowed, a warning can be added in the meantime to improve the user experience: #3610