@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
2929import org.jetbrains.kotlin.name.ClassId
3030
3131public class KotlinPackagePartProvider (private val environment : KotlinCommonEnvironment ) : PackagePartProvider {
32- private data class ModuleMappingInfo (val root : VirtualFile , val mapping : ModuleMapping )
32+ private data class ModuleMappingInfo (val root : VirtualFile , val mapping : ModuleMapping , val name : String )
3333
3434 private val notLoadedRoots by lazy(LazyThreadSafetyMode .NONE ) {
3535 environment.getRoots()
@@ -42,15 +42,18 @@ public class KotlinPackagePartProvider(private val environment: KotlinCommonEnvi
4242
4343 private val deserializationConfiguration = CompilerDeserializationConfiguration (LanguageVersionSettingsImpl .DEFAULT )
4444
45- override fun getAnnotationsOnBinaryModule (moduleName : String ): List <ClassId > = emptyList()
45+ override fun getAnnotationsOnBinaryModule (moduleName : String ): List <ClassId > =
46+ loadedModules.mapNotNull { (_, mapping, name) ->
47+ mapping.moduleData.annotations.takeIf { name == moduleName }
48+ }.flatten()
4649
4750 override fun findPackageParts (packageFqName : String ): List <String > {
4851 val rootToPackageParts = getPackageParts(packageFqName)
4952 if (rootToPackageParts.isEmpty()) return emptyList()
5053
5154 val result = linkedSetOf<String >()
5255 val visitedMultifileFacades = linkedSetOf<String >()
53- for ((virtualFile , packageParts) in rootToPackageParts) {
56+ for ((_ , packageParts) in rootToPackageParts) {
5457 for (name in packageParts.parts) {
5558 val facadeName = packageParts.getMultifileFacadeName(name)
5659 if (facadeName == null || facadeName !in visitedMultifileFacades) {
@@ -96,15 +99,15 @@ public class KotlinPackagePartProvider(private val environment: KotlinCommonEnvi
9699 for (root in relevantRoots) {
97100 val metaInf = root.findChild(" META-INF" ) ? : continue
98101 val moduleFiles = metaInf.children.filter { it.name.endsWith(ModuleMapping .MAPPING_FILE_EXT ) }
99- for (moduleFile in moduleFiles) {
102+ for (moduleFile: VirtualFile in moduleFiles) {
100103 val mapping = try {
101104 ModuleMapping .create(moduleFile.contentsToByteArray(), moduleFile.toString(), deserializationConfiguration)
102105 }
103106 catch (e: EOFException ) {
104107 throw RuntimeException (" Error on reading package parts for '$packageFqName ' package in '$moduleFile ', " +
105108 " roots: $notLoadedRoots " , e)
106109 }
107- loadedModules.add(ModuleMappingInfo (root, mapping))
110+ loadedModules.add(ModuleMappingInfo (root, mapping, moduleFile.nameWithoutExtension ))
108111 }
109112 }
110113 }
0 commit comments