FE 1.0: spread OptIn markers to children except fake override case
#KT-49001 Fixed
This commit is contained in:
committed by
TeamCityServer
parent
3045a5e920
commit
69e06a242a
+23
-7
@@ -169,18 +169,29 @@ class ExperimentalUsageChecker(project: Project) : CallChecker {
|
||||
moduleAnnotationsResolver: ModuleAnnotationsResolver,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
visited: MutableSet<DeclarationDescriptor> = mutableSetOf(),
|
||||
useFutureError: Boolean = false
|
||||
useFutureError: Boolean = false,
|
||||
useMarkersFromContainer: Boolean = true,
|
||||
): Set<Experimentality> {
|
||||
if (!visited.add(this)) return emptySet()
|
||||
val result = SmartSet.create<Experimentality>()
|
||||
if (this is CallableMemberDescriptor && kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
for (overridden in overriddenDescriptors) {
|
||||
result.addAll(overridden.loadExperimentalities(
|
||||
moduleAnnotationsResolver,
|
||||
languageVersionSettings,
|
||||
visited,
|
||||
useFutureError = !languageVersionSettings.supportsFeature(LanguageFeature.OptInContagiousSignatures)
|
||||
))
|
||||
result.addAll(
|
||||
overridden.loadExperimentalities(
|
||||
moduleAnnotationsResolver,
|
||||
languageVersionSettings,
|
||||
visited,
|
||||
useFutureError = !languageVersionSettings.supportsFeature(LanguageFeature.OptInContagiousSignatures),
|
||||
useMarkersFromContainer = false
|
||||
)
|
||||
)
|
||||
if (useMarkersFromContainer) {
|
||||
(containingDeclaration as? ClassDescriptor)?.let {
|
||||
result.addAll(
|
||||
it.loadExperimentalities(moduleAnnotationsResolver, languageVersionSettings, visited, useFutureError)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -220,6 +231,11 @@ class ExperimentalUsageChecker(project: Project) : CallChecker {
|
||||
}
|
||||
}
|
||||
|
||||
val container = containingDeclaration
|
||||
if (useMarkersFromContainer && container is ClassDescriptor && this !is ConstructorDescriptor) {
|
||||
result.addAll(container.loadExperimentalities(moduleAnnotationsResolver, languageVersionSettings, visited, useFutureError))
|
||||
}
|
||||
|
||||
for (moduleAnnotationClassId in moduleAnnotationsResolver.getAnnotationsOnContainingModule(this)) {
|
||||
val annotationClass = module.findClassAcrossModuleDependencies(moduleAnnotationClassId)
|
||||
result.addIfNotNull(annotationClass?.loadExperimentalityForMarkerAnnotation())
|
||||
|
||||
Reference in New Issue
Block a user