Report error on pre-release top level members

This commit is contained in:
Alexander Udalov
2016-12-06 19:03:31 +03:00
parent 11f975fe89
commit 7de0cfde16
8 changed files with 70 additions and 14 deletions
@@ -60,7 +60,10 @@ class DeserializedDescriptorResolver(private val errorReporter: ErrorReporter) {
val (nameResolver, packageProto) = parseProto(kotlinClass) {
JvmProtoBufUtil.readPackageDataFrom(data, strings)
}
val source = JvmPackagePartSource(kotlinClass)
val source = JvmPackagePartSource(
kotlinClass,
isPreReleaseInvisible = !IS_PRE_RELEASE && kotlinClass.classHeader.isPreRelease
)
return DeserializedPackageMemberScope(descriptor, packageProto, nameResolver, source, components) {
// All classes are included into Java scope
emptyList()
@@ -18,20 +18,26 @@ package org.jetbrains.kotlin.load.kotlin
import org.jetbrains.kotlin.descriptors.SourceFile
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
class JvmPackagePartSource(val className: JvmClassName, val facadeClassName: JvmClassName?) : DeserializedContainerSource {
constructor(kotlinClass: KotlinJvmBinaryClass) : this(
class JvmPackagePartSource(
val className: JvmClassName,
val facadeClassName: JvmClassName?,
override val isPreReleaseInvisible: Boolean = false
) : DeserializedContainerSource {
constructor(kotlinClass: KotlinJvmBinaryClass, isPreReleaseInvisible: Boolean = false) : this(
JvmClassName.byClassId(kotlinClass.classId),
kotlinClass.classHeader.multifileClassName?.let {
if (it.isNotEmpty()) JvmClassName.byInternalName(it) else null
}
},
isPreReleaseInvisible
)
// TODO
override val isPreReleaseInvisible: Boolean get() = false
override val presentableFqName: FqName
get() = classId.asSingleFqName()
val simpleName: Name get() = Name.identifier(className.internalName.substringAfterLast('/'))
@@ -16,14 +16,17 @@
package org.jetbrains.kotlin.load.kotlin
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.descriptors.SourceFile
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
class KotlinJvmBinarySourceElement(
val binaryClass: KotlinJvmBinaryClass,
override val isPreReleaseInvisible: Boolean = false
) : DeserializedContainerSource {
override val presentableFqName: FqName
get() = binaryClass.classId.asSingleFqName()
override fun getContainingFile(): SourceFile = SourceFile.NO_SOURCE_FILE
override fun toString() = "${javaClass.simpleName}: $binaryClass"