mirror of
https://github.com/jlengrand/detekt.git
synced 2026-03-10 08:11:23 +00:00
Simplify where casts used unnecessarily (#4213)
This commit is contained in:
@@ -9,7 +9,6 @@ import io.gitlab.arturbosch.detekt.api.Rule
|
||||
import io.gitlab.arturbosch.detekt.api.Severity
|
||||
import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution
|
||||
import io.gitlab.arturbosch.detekt.rules.fqNameOrNull
|
||||
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
@@ -52,8 +51,7 @@ class DoubleMutabilityForCollection(config: Config = Config.empty) : Rule(config
|
||||
|
||||
if (bindingContext == BindingContext.EMPTY) return
|
||||
|
||||
val type =
|
||||
(bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, property] as? VariableDescriptor)?.type ?: return
|
||||
val type = (bindingContext[BindingContext.VARIABLE, property])?.type ?: return
|
||||
val standardType = type.fqNameOrNull()
|
||||
if (property.isVar && standardType in mutableTypes) {
|
||||
report(
|
||||
|
||||
@@ -13,7 +13,6 @@ import io.gitlab.arturbosch.detekt.api.configWithFallback
|
||||
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
|
||||
import io.gitlab.arturbosch.detekt.api.internal.Configuration
|
||||
import io.gitlab.arturbosch.detekt.rules.isOverride
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.psi.KtBlockExpression
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
@@ -115,8 +114,7 @@ class MemberNameEqualsClassName(config: Config = Config.empty) : Rule(config) {
|
||||
refName == klass.name
|
||||
}
|
||||
function.bodyExpression !is KtBlockExpression && bindingContext != BindingContext.EMPTY -> {
|
||||
val functionDescriptor =
|
||||
bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, function] as? FunctionDescriptor
|
||||
val functionDescriptor = bindingContext[BindingContext.FUNCTION, function]
|
||||
val classDescriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, klass]
|
||||
functionDescriptor?.returnType?.constructor?.declarationDescriptor == classDescriptor
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ import io.gitlab.arturbosch.detekt.api.Rule
|
||||
import io.gitlab.arturbosch.detekt.api.Severity
|
||||
import org.jetbrains.kotlin.KtNodeTypes
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
||||
import org.jetbrains.kotlin.psi.KtCallExpression
|
||||
import org.jetbrains.kotlin.psi.KtConstantExpression
|
||||
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
|
||||
@@ -59,7 +58,7 @@ class RedundantExplicitType(config: Config) : Rule(config) {
|
||||
if (!property.isLocal) return
|
||||
val typeReference = property.typeReference ?: return
|
||||
val type =
|
||||
(bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, property] as? VariableDescriptor)?.type ?: return
|
||||
(bindingContext[BindingContext.VARIABLE, property])?.type ?: return
|
||||
if (type is AbbreviatedType) return
|
||||
|
||||
when (val initializer = property.initializer) {
|
||||
|
||||
@@ -15,7 +15,6 @@ import io.gitlab.arturbosch.detekt.api.internal.Configuration
|
||||
import io.gitlab.arturbosch.detekt.rules.isAbstract
|
||||
import io.gitlab.arturbosch.detekt.rules.isInternal
|
||||
import io.gitlab.arturbosch.detekt.rules.isProtected
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.MemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
@@ -116,7 +115,7 @@ class UnnecessaryAbstractClass(config: Config = Config.empty) : Rule(config) {
|
||||
klass.superTypeListEntries.isEmpty() -> false
|
||||
bindingContext == BindingContext.EMPTY -> true
|
||||
else -> {
|
||||
val descriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, klass] as? ClassDescriptor
|
||||
val descriptor = bindingContext[BindingContext.CLASS, klass]
|
||||
descriptor?.unsubstitutedMemberScope?.getContributedDescriptors().orEmpty().any {
|
||||
(it as? MemberDescriptor)?.modality == Modality.ABSTRACT == isAbstract
|
||||
}
|
||||
|
||||
@@ -11,8 +11,6 @@ import io.gitlab.arturbosch.detekt.api.Severity
|
||||
import io.gitlab.arturbosch.detekt.api.config
|
||||
import io.gitlab.arturbosch.detekt.api.internal.Configuration
|
||||
import io.gitlab.arturbosch.detekt.rules.isOpen
|
||||
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||
@@ -85,8 +83,7 @@ class UseDataClass(config: Config = Config.empty) : Rule(config) {
|
||||
|
||||
val propertyParameters = klass.extractConstructorPropertyParameters()
|
||||
|
||||
val primaryConstructor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, klass.primaryConstructor]
|
||||
as? ClassConstructorDescriptor
|
||||
val primaryConstructor = bindingContext[BindingContext.CONSTRUCTOR, klass.primaryConstructor]
|
||||
val primaryConstructorParameterTypes = primaryConstructor?.valueParameters?.map { it.type }.orEmpty()
|
||||
val classType = primaryConstructor?.containingDeclaration?.defaultType
|
||||
val containsFunctions = functions.all { it.isDefaultFunction(classType, primaryConstructorParameterTypes) }
|
||||
@@ -149,8 +146,7 @@ class UseDataClass(config: Config = Config.empty) : Rule(config) {
|
||||
!in DEFAULT_FUNCTION_NAMES -> false
|
||||
"copy" -> {
|
||||
if (classType != null) {
|
||||
val descriptor =
|
||||
bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, this] as? FunctionDescriptor
|
||||
val descriptor = bindingContext[BindingContext.FUNCTION, this]
|
||||
val returnType = descriptor?.returnType
|
||||
val parameterTypes = descriptor?.valueParameters?.map { it.type }.orEmpty()
|
||||
returnType == classType &&
|
||||
|
||||
Reference in New Issue
Block a user