Check feature dependencies targets before report diagnostics

For example, if inline classes feature would have state `ENABLED_WITH_WARNING`,
 then corresponding warning will be reported on inline functions too
This commit is contained in:
Mikhail Zarechenskiy
2018-06-15 16:29:22 +03:00
parent 423e8f9979
commit 6db07f71f3
@@ -338,25 +338,28 @@ object ModifierCheckerCore {
val dependencies = featureDependencies[modifier] ?: return true
for (dependency in dependencies) {
val restrictedTargets = featureDependenciesTargets[dependency]
if (restrictedTargets != null && actualTargets.intersect(restrictedTargets).isEmpty()) {
continue
}
val featureSupport = languageVersionSettings.getFeatureSupport(dependency)
val diagnosticData = dependency to languageVersionSettings
if (featureSupport == LanguageFeature.State.ENABLED_WITH_ERROR || featureSupport == LanguageFeature.State.DISABLED) {
val restrictedTargets = featureDependenciesTargets[dependency]
if (restrictedTargets != null && actualTargets.intersect(restrictedTargets).isEmpty()) {
continue
when (featureSupport) {
LanguageFeature.State.ENABLED_WITH_WARNING -> {
trace.report(Errors.EXPERIMENTAL_FEATURE_WARNING.on(node.psi, diagnosticData))
}
if (featureSupport == LanguageFeature.State.DISABLED) {
trace.report(Errors.UNSUPPORTED_FEATURE.on(node.psi, diagnosticData))
} else {
LanguageFeature.State.ENABLED_WITH_ERROR -> {
trace.report(Errors.EXPERIMENTAL_FEATURE_ERROR.on(node.psi, diagnosticData))
return false
}
LanguageFeature.State.DISABLED -> {
trace.report(Errors.UNSUPPORTED_FEATURE.on(node.psi, diagnosticData))
return false
}
LanguageFeature.State.ENABLED -> {
}
return false
}
if (featureSupport == LanguageFeature.State.ENABLED_WITH_WARNING) {
trace.report(Errors.EXPERIMENTAL_FEATURE_WARNING.on(node.psi, diagnosticData))
}
}