Fix USELESS_IS_CHECK warnings in compiler code

This commit is contained in:
Dmitriy Novozhilov
2021-07-12 10:27:49 +03:00
committed by teamcityserver
parent 968f823b72
commit f33f3c769f
10 changed files with 11 additions and 28 deletions
@@ -33,11 +33,7 @@ fun checkUpperBoundViolated(
isTypeAlias: Boolean = false, isTypeAlias: Boolean = false,
isIgnoreTypeParameters: Boolean = false isIgnoreTypeParameters: Boolean = false
) { ) {
val type = when (typeRef) { val type = typeRef?.coneTypeSafe<ConeKotlinType>() ?: return
is ConeKotlinType -> typeRef
is FirResolvedTypeRef -> typeRef.type
else -> return
}
val typeArgumentsCount = typeArguments?.size ?: type.typeArguments.size val typeArgumentsCount = typeArguments?.size ?: type.typeArguments.size
if (typeArgumentsCount == 0) { if (typeArgumentsCount == 0) {
@@ -24,9 +24,6 @@ import org.jetbrains.kotlin.fir.packageFqName
import org.jetbrains.kotlin.fir.resolve.fqName import org.jetbrains.kotlin.fir.resolve.fqName
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.psi.KtDestructuringDeclaration
import org.jetbrains.kotlin.psi.KtDestructuringDeclarationEntry
import org.jetbrains.kotlin.psi.KtLambdaExpression
import org.jetbrains.kotlin.resolve.AnnotationTargetList import org.jetbrains.kotlin.resolve.AnnotationTargetList
import org.jetbrains.kotlin.resolve.AnnotationTargetLists import org.jetbrains.kotlin.resolve.AnnotationTargetLists
@@ -212,7 +209,6 @@ object FirAnnotationChecker : FirAnnotatedDeclarationChecker() {
is FirEnumEntry -> AnnotationTargetList( is FirEnumEntry -> AnnotationTargetList(
KotlinTarget.classActualTargets(ClassKind.ENUM_ENTRY, annotated.isInner, isCompanionObject = false, isLocalClass = false) KotlinTarget.classActualTargets(ClassKind.ENUM_ENTRY, annotated.isInner, isCompanionObject = false, isLocalClass = false)
) )
is KtDestructuringDeclarationEntry -> TargetLists.T_LOCAL_VARIABLE
is FirProperty -> { is FirProperty -> {
when { when {
annotated.isLocal -> annotated.isLocal ->
@@ -248,8 +244,6 @@ object FirAnnotationChecker : FirAnnotatedDeclarationChecker() {
is FirFile -> TargetLists.T_FILE is FirFile -> TargetLists.T_FILE
is FirTypeParameter -> TargetLists.T_TYPE_PARAMETER is FirTypeParameter -> TargetLists.T_TYPE_PARAMETER
is FirAnonymousInitializer -> TargetLists.T_INITIALIZER is FirAnonymousInitializer -> TargetLists.T_INITIALIZER
is KtDestructuringDeclaration -> TargetLists.T_DESTRUCTURING_DECLARATION
is KtLambdaExpression -> TargetLists.T_FUNCTION_LITERAL
is FirAnonymousObject -> is FirAnonymousObject ->
if (annotated.source?.kind == FirFakeSourceElementKind.EnumInitializer) { if (annotated.source?.kind == FirFakeSourceElementKind.EnumInitializer) {
AnnotationTargetList( AnnotationTargetList(
@@ -263,6 +257,10 @@ object FirAnnotationChecker : FirAnnotatedDeclarationChecker() {
} else { } else {
TargetLists.T_OBJECT_LITERAL TargetLists.T_OBJECT_LITERAL
} }
// TODO: properly implement those cases
// is KtDestructuringDeclarationEntry -> TargetLists.T_LOCAL_VARIABLE
// is KtDestructuringDeclaration -> TargetLists.T_DESTRUCTURING_DECLARATION
// is KtLambdaExpression -> TargetLists.T_FUNCTION_LITERAL
else -> TargetLists.EMPTY else -> TargetLists.EMPTY
} }
} }
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
import org.jetbrains.kotlin.fir.expressions.FirGetClassCall
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
@@ -26,8 +25,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.*
object FirCallableReferenceChecker : FirQualifiedAccessExpressionChecker() { object FirCallableReferenceChecker : FirQualifiedAccessExpressionChecker() {
override fun check(expression: FirQualifiedAccessExpression, context: CheckerContext, reporter: DiagnosticReporter) { override fun check(expression: FirQualifiedAccessExpression, context: CheckerContext, reporter: DiagnosticReporter) {
if (expression !is FirCallableReferenceAccess) return if (expression !is FirCallableReferenceAccess) return
// [FirGetClassCallChecker] will check [FirGetClassCall].
if (expression is FirGetClassCall) return
checkReferenceIsToAllowedMember(expression, context, reporter) checkReferenceIsToAllowedMember(expression, context, reporter)
} }
@@ -13,13 +13,14 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.utils.isFun import org.jetbrains.kotlin.fir.declarations.utils.isFun
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
object FirFunInterfaceConstructorReferenceChecker : FirQualifiedAccessExpressionChecker() { object FirFunInterfaceConstructorReferenceChecker : FirQualifiedAccessExpressionChecker() {
override fun check(expression: FirQualifiedAccessExpression, context: CheckerContext, reporter: DiagnosticReporter) { override fun check(expression: FirQualifiedAccessExpression, context: CheckerContext, reporter: DiagnosticReporter) {
if (expression !is FirCallableReferenceAccess || expression is FirGetClassCall) return if (expression !is FirCallableReferenceAccess) return
val reference = expression.calleeReference as? FirResolvedNamedReference ?: return val reference = expression.calleeReference as? FirResolvedNamedReference ?: return
val referredSymbol = reference.resolvedSymbol val referredSymbol = reference.resolvedSymbol
@@ -13,9 +13,8 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -33,7 +32,7 @@ object RedundantExplicitTypeChecker : FirPropertyChecker() {
val type = declaration.returnTypeRef.coneType val type = declaration.returnTypeRef.coneType
if (typeReference is FirTypeAlias) return if (type.toSymbol(context.session) is FirTypeAliasSymbol) return
if (typeReference.annotations.isNotEmpty()) return if (typeReference.annotations.isNotEmpty()) return
when (initializer) { when (initializer) {
@@ -65,9 +64,6 @@ object RedundantExplicitTypeChecker : FirPropertyChecker() {
else -> return else -> return
} }
} }
is FirNamedReference -> {
if (!type.hasSameNameWithoutModifiers(initializer.name)) return
}
is FirFunctionCall -> { is FirFunctionCall -> {
if (!type.hasSameNameWithoutModifiers(initializer.calleeReference.name)) return if (!type.hasSameNameWithoutModifiers(initializer.calleeReference.name)) return
} }
@@ -1517,7 +1517,6 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
is FirAnonymousFunctionExpression -> generate(expression.anonymousFunction, isStatement = false) is FirAnonymousFunctionExpression -> generate(expression.anonymousFunction, isStatement = false)
is FirUnitExpression -> generate(expression) is FirUnitExpression -> generate(expression)
is FirStringConcatenationCall -> generate(expression) is FirStringConcatenationCall -> generate(expression)
is FirAnonymousFunction -> generate(expression, isStatement = false)
is FirThrowExpression -> generate(expression) is FirThrowExpression -> generate(expression)
is FirWhenSubjectExpression -> generate(expression) is FirWhenSubjectExpression -> generate(expression)
is FirElseIfTrueCondition -> generate(expression) is FirElseIfTrueCondition -> generate(expression)
@@ -1557,7 +1556,6 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
generate(expression.expression) generate(expression.expression)
} }
is FirTypeOperatorCall -> generate(expression) is FirTypeOperatorCall -> generate(expression)
is FirAssignmentOperatorStatement -> generateBinary(expression.leftArgument, expression.rightArgument, expression.operation)
is FirEqualityOperatorCall -> generate(expression) is FirEqualityOperatorCall -> generate(expression)
is FirBinaryLogicExpression -> generate(expression) is FirBinaryLogicExpression -> generate(expression)
is FirCheckNotNullCall -> generate(expression) is FirCheckNotNullCall -> generate(expression)
@@ -302,7 +302,7 @@ internal class FirLocalVariableAssignmentAnalyzer(
with(functionCall) { with(functionCall) {
setOfNotNull(explicitReceiver, dispatchReceiver, extensionReceiver).forEach { it.accept(visitor, data) } setOfNotNull(explicitReceiver, dispatchReceiver, extensionReceiver).forEach { it.accept(visitor, data) }
// Delay processing of lambda args because lambda body are evaluated after all arguments have been evaluated. // Delay processing of lambda args because lambda body are evaluated after all arguments have been evaluated.
val (postponedFunctionArgs, normalArgs) = argumentList.arguments.partition { it is FirAnonymousFunction } val (postponedFunctionArgs, normalArgs) = argumentList.arguments.partition { it is FirAnonymousFunctionExpression }
normalArgs.forEach { it.accept(visitor, data) } normalArgs.forEach { it.accept(visitor, data) }
postponedFunctionArgs.forEach { it.accept(visitor, data) } postponedFunctionArgs.forEach { it.accept(visitor, data) }
calleeReference.accept(visitor, data) calleeReference.accept(visitor, data)
@@ -113,7 +113,6 @@ class FirCallCompletionResultsWriterTransformer(
diagnostic = diagnostic =
when (declaration) { when (declaration) {
is FirTypeParameter -> ConeTypeParameterInQualifiedAccess(declaration.symbol) is FirTypeParameter -> ConeTypeParameterInQualifiedAccess(declaration.symbol)
is FirResolvedReifiedParameterReference -> ConeTypeParameterInQualifiedAccess(declaration.symbol)
else -> ConeSimpleDiagnostic("Callee reference to candidate without return type: ${declaration.render()}") else -> ConeSimpleDiagnostic("Callee reference to candidate without return type: ${declaration.render()}")
} }
} }
@@ -181,7 +181,6 @@ open class FirTypeResolveTransformer(
} }
override fun transformImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: Any?): FirTypeRef { override fun transformImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: Any?): FirTypeRef {
if (implicitTypeRef is FirImplicitBuiltinTypeRef) return transformTypeRef(implicitTypeRef, data)
return implicitTypeRef return implicitTypeRef
} }
@@ -264,7 +264,6 @@ class PatternMatchingTypingVisitor internal constructor(facade: ExpressionTyping
) )
} else { } else {
val illegalDeclarationString = when { val illegalDeclarationString = when {
subjectVariable is KtDestructuringDeclaration -> "destructuring declaration"
subjectVariable.isVar -> "var" subjectVariable.isVar -> "var"
subjectVariable.initializer == null -> "variable without initializer" subjectVariable.initializer == null -> "variable without initializer"
subjectVariable.hasDelegateExpression() -> "delegated property" subjectVariable.hasDelegateExpression() -> "delegated property"