fix check for internal from another module in imports and file level annotations
This commit is contained in:
@@ -17,12 +17,14 @@
|
||||
package org.jetbrains.kotlin.cli.common
|
||||
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.cli.common.modules.ModuleXmlParser
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityManager
|
||||
import org.jetbrains.kotlin.load.kotlin.getSourceElement
|
||||
import org.jetbrains.kotlin.load.kotlin.isContainedByCompiledPartOfOurModule
|
||||
import org.jetbrains.kotlin.modules.Module
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor
|
||||
import org.jetbrains.kotlin.resolve.source.KotlinSourceElement
|
||||
import org.jetbrains.kotlin.util.ModuleVisibilityHelper
|
||||
import java.io.File
|
||||
@@ -31,13 +33,15 @@ class ModuleVisibilityHelperImpl : ModuleVisibilityHelper {
|
||||
|
||||
override fun isInFriendModule(what: DeclarationDescriptor, from: DeclarationDescriptor): Boolean {
|
||||
val fromSource = getSourceElement(from)
|
||||
// We only interested in case when fromSource is KotlinSourceElement,
|
||||
// because at this point
|
||||
// We should check accessibility of 'from' in current module (some set of source files, which are compiled together),
|
||||
// so we can assume that 'from' should have sources.
|
||||
if (fromSource !is KotlinSourceElement) return true
|
||||
// so we can assume that 'from' should have sources or is a LazyPackageDescriptor with some package files.
|
||||
val project: Project = if (fromSource is KotlinSourceElement) {
|
||||
fromSource.psi.project
|
||||
}
|
||||
else {
|
||||
(from as? LazyPackageDescriptor)?.declarationProvider?.getPackageFiles()?.firstOrNull()?.project ?: return true
|
||||
}
|
||||
|
||||
val project = fromSource.psi.project
|
||||
val moduleVisibilityManager = ModuleVisibilityManager.SERVICE.getInstance(project)
|
||||
|
||||
val whatSource = getSourceElement(what)
|
||||
|
||||
@@ -36,6 +36,7 @@ import org.jetbrains.jps.builders.logging.BuildLoggingManager
|
||||
import org.jetbrains.jps.incremental.BuilderRegistry
|
||||
import org.jetbrains.jps.incremental.IncProjectBuilder
|
||||
import org.jetbrains.jps.incremental.messages.BuildMessage
|
||||
import org.jetbrains.jps.incremental.messages.CompilerMessage
|
||||
import org.jetbrains.jps.model.java.JpsJavaDependencyScope
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||
import org.jetbrains.jps.model.module.JpsModule
|
||||
@@ -480,7 +481,8 @@ public class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() {
|
||||
result.assertFailed()
|
||||
|
||||
val actualErrors = result.getMessages(BuildMessage.Kind.ERROR)
|
||||
.map { it.messageText }.sorted().joinToString("\n")
|
||||
.map { it as CompilerMessage }
|
||||
.map { "${it.messageText} at line ${it.line}, column ${it.column}" }.sorted().joinToString("\n")
|
||||
val projectRoot = File(AbstractKotlinJpsBuildTestCase.TEST_DATA_PATH + "general/" + getTestName(false))
|
||||
val expectedFile = File(projectRoot, "errors.txt")
|
||||
JetTestUtils.assertEqualsToFile(expectedFile, actualErrors)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
'internal open val member: kotlin.Int defined in test.ClassBB1' has no access to 'internal abstract val member: kotlin.Int defined in test.ClassB1', so it cannot override it
|
||||
Cannot access 'InternalClass1': it is 'internal' in 'test'
|
||||
Cannot access 'member': it is 'invisible_fake' in 'ClassAA1'
|
||||
'internal open val member: kotlin.Int defined in test.ClassBB1' has no access to 'internal abstract val member: kotlin.Int defined in test.ClassB1', so it cannot override it at line 11, column 14
|
||||
Cannot access 'InternalClass1': it is 'internal' in 'test' at line 3, column 13
|
||||
Cannot access 'InternalClass1': it is 'internal' in 'test' at line 6, column 36
|
||||
Cannot access 'member': it is 'invisible_fake' in 'ClassAA1' at line 24, column 25
|
||||
@@ -1,5 +1,7 @@
|
||||
package test
|
||||
|
||||
import test.InternalClass1
|
||||
|
||||
// InternalClass1, ClassA1, ClassB1 are in module1
|
||||
class ClassInheritedFromInternal1: InternalClass1()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user