Do not load JvmPackageName-annotated parts on Kotlin < 1.2

This commit is contained in:
Alexander Udalov
2017-09-06 15:28:13 +03:00
parent 70ae1596fb
commit 2bb437b219
11 changed files with 32 additions and 6 deletions
@@ -25,4 +25,6 @@ class CompilerDeserializationConfiguration(languageVersionSettings: LanguageVers
override val typeAliasesAllowed = languageVersionSettings.supportsFeature(LanguageFeature.TypeAliases)
override val skipMetadataVersionCheck = languageVersionSettings.getFlag(AnalysisFlag.skipMetadataVersionCheck)
override val isJvmPackageNameSupported = languageVersionSettings.supportsFeature(LanguageFeature.JvmPackageName)
}
@@ -13,6 +13,7 @@ var v: Int = 1
inline fun i(block: () -> Unit) = block()
// FILE: B.kt
// LANGUAGE_VERSION: 1.2
import foo.*
@@ -10,6 +10,7 @@ fun f() = "OK"
var v: Int = 1
// FILE: B.kt
// LANGUAGE_VERSION: 1.2
fun box(): String {
v = 2
@@ -12,6 +12,7 @@ fun f() = "OK"
var v: Int = 1
// FILE: B.kt
// LANGUAGE_VERSION: 1.2
import foo.*
@@ -0,0 +1,3 @@
package foo
fun file1() {}
@@ -0,0 +1,5 @@
@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@file:JvmPackageName("j")
package foo
fun file2() {}
@@ -0,0 +1,2 @@
foo
foo/FooKt
@@ -86,4 +86,9 @@ class JvmPackageTableTest : KtUsefulTestCase() {
doTest("/jvmPackageTable/jvmPackageNameManyParts",
compileWith = LanguageVersion.KOTLIN_1_2, loadWith = LanguageVersion.KOTLIN_1_2)
}
fun testJvmPackageNameLanguageVersion11() {
doTest("/jvmPackageTable/jvmPackageNameLanguageVersion11",
compileWith = LanguageVersion.KOTLIN_1_2, loadWith = LanguageVersion.KOTLIN_1_1)
}
}
@@ -61,6 +61,7 @@ enum class LanguageFeature(
LateinitLocalVariables(KOTLIN_1_2),
InnerClassInEnumEntryClass(KOTLIN_1_2),
CallableReferencesToClassMembersWithEmptyLHS(KOTLIN_1_2),
JvmPackageName(KOTLIN_1_2),
RestrictionOfValReassignmentViaBackingField(KOTLIN_1_3),
NestedClassesInEnumEntryShouldBeInner(KOTLIN_1_3),
@@ -77,12 +77,14 @@ class ModuleMapping private constructor(val packageFqName2Parts: Map<String, Pac
packageParts.addPart(internalNameOf(packageFqName, partShortName), facadeInternalName)
}
for ((index, partShortName) in proto.classWithJvmPackageNameShortNameList.withIndex()) {
val packageId = proto.classWithJvmPackageNamePackageIdList.getOrNull(index)
?: proto.classWithJvmPackageNamePackageIdList.lastOrNull()
?: continue
val jvmPackageName = table.jvmPackageNameList.getOrNull(packageId) ?: continue
packageParts.addPart(internalNameOf(jvmPackageName, partShortName), null)
if (configuration.isJvmPackageNameSupported) {
for ((index, partShortName) in proto.classWithJvmPackageNameShortNameList.withIndex()) {
val packageId = proto.classWithJvmPackageNamePackageIdList.getOrNull(index)
?: proto.classWithJvmPackageNamePackageIdList.lastOrNull()
?: continue
val jvmPackageName = table.jvmPackageNameList.getOrNull(packageId) ?: continue
packageParts.addPart(internalNameOf(jvmPackageName, partShortName), null)
}
}
}
@@ -23,5 +23,8 @@ interface DeserializationConfiguration {
val typeAliasesAllowed: Boolean
get() = true
val isJvmPackageNameSupported: Boolean
get() = true
object Default : DeserializationConfiguration
}