FIR checker: report REDUNDANT_LABEL_WARNING

Since many labels are not present in the FIR tree, this checker is
implemented as a syntax checker. Comparing with FE1.0, this change
reports some REDUNDANT_LABEL_WARNING that FE1.0 has missed, especially
LHS of assignments.
This commit is contained in:
Tianyu Geng
2021-09-24 10:18:02 -07:00
committed by TeamCityServer
parent cbc9d08623
commit 363b25504d
48 changed files with 255 additions and 266 deletions
@@ -6,12 +6,7 @@
package org.jetbrains.kotlin.fir.declarations.utils
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.fir.FirRenderer
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
import org.jetbrains.kotlin.fir.render
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract
inline val FirMemberDeclaration.modality: Modality? get() = status.modality
inline val FirMemberDeclaration.isAbstract: Boolean get() = status.modality == Modality.ABSTRACT
@@ -24,9 +19,13 @@ inline val FirMemberDeclaration.isFinal: Boolean
}
inline val FirMemberDeclaration.visibility: Visibility get() = status.visibility
/**
* Gets the effective visibility. Note that it's assumed that the element or its non-local container has at least resolve phase
* [FirResolvePhase.STATUS], in which case, any declarations with unresolved status are effectively local.
*/
inline val FirMemberDeclaration.effectiveVisibility: EffectiveVisibility
get() = (status as? FirResolvedDeclarationStatus)?.effectiveVisibility
?: error("Effective visibility for ${render(FirRenderer.RenderMode.NoBodies)} must be resolved")
get() = (status as? FirResolvedDeclarationStatus)?.effectiveVisibility ?: EffectiveVisibility.Local
inline val FirMemberDeclaration.allowsToHaveFakeOverride: Boolean
get() = !Visibilities.isPrivate(visibility) && visibility != Visibilities.InvisibleFake