Minor, move loadWasExperimentalMarkerClasses closer to usage
This commit is contained in:
+2
-17
@@ -21,7 +21,6 @@ import com.intellij.psi.PsiElement
|
|||||||
import org.jetbrains.kotlin.config.AnalysisFlag
|
import org.jetbrains.kotlin.config.AnalysisFlag
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotated
|
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -64,9 +63,9 @@ class ExperimentalUsageChecker(project: Project) : CallChecker {
|
|||||||
companion object {
|
companion object {
|
||||||
val EXPERIMENTAL_FQ_NAME = FqName("kotlin.Experimental")
|
val EXPERIMENTAL_FQ_NAME = FqName("kotlin.Experimental")
|
||||||
internal val USE_EXPERIMENTAL_FQ_NAME = FqName("kotlin.UseExperimental")
|
internal val USE_EXPERIMENTAL_FQ_NAME = FqName("kotlin.UseExperimental")
|
||||||
private val WAS_EXPERIMENTAL_FQ_NAME = FqName("kotlin.WasExperimental")
|
internal val WAS_EXPERIMENTAL_FQ_NAME = FqName("kotlin.WasExperimental")
|
||||||
internal val USE_EXPERIMENTAL_ANNOTATION_CLASS = Name.identifier("markerClass")
|
internal val USE_EXPERIMENTAL_ANNOTATION_CLASS = Name.identifier("markerClass")
|
||||||
private val WAS_EXPERIMENTAL_ANNOTATION_CLASS = Name.identifier("markerClass")
|
internal val WAS_EXPERIMENTAL_ANNOTATION_CLASS = Name.identifier("markerClass")
|
||||||
|
|
||||||
private val LEVEL = Name.identifier("level")
|
private val LEVEL = Name.identifier("level")
|
||||||
private val WARNING_LEVEL = Name.identifier("WARNING")
|
private val WARNING_LEVEL = Name.identifier("WARNING")
|
||||||
@@ -178,20 +177,6 @@ class ExperimentalUsageChecker(project: Project) : CallChecker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun Annotated.loadWasExperimentalMarkerClasses(): List<ClassDescriptor> {
|
|
||||||
val wasExperimental = annotations.findAnnotation(WAS_EXPERIMENTAL_FQ_NAME)
|
|
||||||
if (wasExperimental != null) {
|
|
||||||
val annotationClasses = wasExperimental.allValueArguments[WAS_EXPERIMENTAL_ANNOTATION_CLASS]
|
|
||||||
if (annotationClasses is ArrayValue) {
|
|
||||||
return annotationClasses.value.mapNotNull { annotationClass ->
|
|
||||||
(annotationClass as? KClassValue)?.value?.constructor?.declarationDescriptor as? ClassDescriptor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return emptyList()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun checkCompilerArguments(
|
fun checkCompilerArguments(
|
||||||
module: ModuleDescriptor,
|
module: ModuleDescriptor,
|
||||||
languageVersionSettings: LanguageVersionSettings,
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
|
|||||||
@@ -8,9 +8,12 @@ package org.jetbrains.kotlin.resolve
|
|||||||
import org.jetbrains.kotlin.config.ApiVersion
|
import org.jetbrains.kotlin.config.ApiVersion
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.descriptors.annotations.Annotated
|
||||||
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor
|
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForTypeAliasObject
|
import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForTypeAliasObject
|
||||||
import org.jetbrains.kotlin.resolve.checkers.ExperimentalUsageChecker
|
import org.jetbrains.kotlin.resolve.checkers.ExperimentalUsageChecker
|
||||||
|
import org.jetbrains.kotlin.resolve.constants.ArrayValue
|
||||||
|
import org.jetbrains.kotlin.resolve.constants.KClassValue
|
||||||
|
|
||||||
sealed class SinceKotlinAccessibility {
|
sealed class SinceKotlinAccessibility {
|
||||||
object Accessible : SinceKotlinAccessibility()
|
object Accessible : SinceKotlinAccessibility()
|
||||||
@@ -74,10 +77,7 @@ private fun DeclarationDescriptor.getOwnSinceKotlinVersion(): SinceKotlinValue?
|
|||||||
if (apiVersion != null) {
|
if (apiVersion != null) {
|
||||||
// TODO: combine wasExperimentalMarkerClasses in case of several associated declarations with the same maximal API version
|
// TODO: combine wasExperimentalMarkerClasses in case of several associated declarations with the same maximal API version
|
||||||
if (result == null || apiVersion > result!!.apiVersion) {
|
if (result == null || apiVersion > result!!.apiVersion) {
|
||||||
result = SinceKotlinValue(
|
result = SinceKotlinValue(apiVersion, loadWasExperimentalMarkerClasses())
|
||||||
apiVersion,
|
|
||||||
with(ExperimentalUsageChecker) { loadWasExperimentalMarkerClasses() }
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -101,3 +101,17 @@ private fun DeclarationDescriptor.getOwnSinceKotlinVersion(): SinceKotlinValue?
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun Annotated.loadWasExperimentalMarkerClasses(): List<ClassDescriptor> {
|
||||||
|
val wasExperimental = annotations.findAnnotation(ExperimentalUsageChecker.WAS_EXPERIMENTAL_FQ_NAME)
|
||||||
|
if (wasExperimental != null) {
|
||||||
|
val annotationClasses = wasExperimental.allValueArguments[ExperimentalUsageChecker.WAS_EXPERIMENTAL_ANNOTATION_CLASS]
|
||||||
|
if (annotationClasses is ArrayValue) {
|
||||||
|
return annotationClasses.value.mapNotNull { annotationClass ->
|
||||||
|
(annotationClass as? KClassValue)?.value?.constructor?.declarationDescriptor as? ClassDescriptor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return emptyList()
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user