fix check for internal from another module in imports and file level annotations

This commit is contained in:
Michael Nedzelsky
2015-09-27 00:17:19 +03:00
parent 080dcf882e
commit 0035bbba7c
4 changed files with 18 additions and 9 deletions
@@ -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()