Cleanup: apply "cascade if..." inspection (+ some others)

This commit is contained in:
Mikhail Glukhikh
2017-06-28 15:19:20 +03:00
committed by Mikhail Glukhikh
parent 9c06739594
commit 1d2017b0fc
80 changed files with 1079 additions and 1190 deletions
@@ -276,12 +276,11 @@ class BasicLookupElementFactory(
appendTailText(" for $receiverPresentation")
val container = descriptor.containingDeclaration
val containerPresentation = if (container is ClassDescriptor)
DescriptorUtils.getFqNameFromTopLevelClass(container).toString()
else if (container is PackageFragmentDescriptor)
container.fqName.toString()
else
null
val containerPresentation = when (container) {
is ClassDescriptor -> DescriptorUtils.getFqNameFromTopLevelClass(container).toString()
is PackageFragmentDescriptor -> container.fqName.toString()
else -> null
}
if (containerPresentation != null) {
appendTailText(" in $containerPresentation")
}
@@ -96,32 +96,29 @@ class CompletionBindingContextProvider(project: Project) {
val psiElementsBeforeAndAfter = modificationScope?.let { collectPsiElementsBeforeAndAfter(modificationScope, inStatement) }
val prevCompletionData = prevCompletionDataCache.value.data
if (prevCompletionData == null) {
log("No up-to-date data from previous completion\n")
}
else if (block != prevCompletionData.block) {
log("Not in the same block\n")
}
else if (prevStatement != prevCompletionData.prevStatement) {
log("Previous statement is not the same\n")
}
else if (psiElementsBeforeAndAfter != prevCompletionData.psiElementsBeforeAndAfter) {
log("PSI-tree has changed inside current scope\n")
}
else if (inStatement.isTooComplex()) {
log("Current statement is too complex to use optimization\n")
}
else {
log("Statement position is the same - analyzing only one statement:\n${inStatement.text.prependIndent(" ")}\n")
LOG.debug("Reusing data from completion of \"${prevCompletionData.debugText}\"")
when {
prevCompletionData == null ->
log("No up-to-date data from previous completion\n")
block != prevCompletionData.block ->
log("Not in the same block\n")
prevStatement != prevCompletionData.prevStatement ->
log("Previous statement is not the same\n")
psiElementsBeforeAndAfter != prevCompletionData.psiElementsBeforeAndAfter ->
log("PSI-tree has changed inside current scope\n")
inStatement.isTooComplex() ->
log("Current statement is too complex to use optimization\n")
else -> {
log("Statement position is the same - analyzing only one statement:\n${inStatement.text.prependIndent(" ")}\n")
LOG.debug("Reusing data from completion of \"${prevCompletionData.debugText}\"")
//TODO: expected type?
val statementContext = inStatement.analyzeInContext(scope = prevCompletionData.statementResolutionScope,
contextExpression = block,
dataFlowInfo = prevCompletionData.statementDataFlowInfo,
isStatement = true)
// we do not update prevCompletionDataCache because the same data should work
return CompositeBindingContext.create(listOf(statementContext, prevCompletionData.bindingContext))
//TODO: expected type?
val statementContext = inStatement.analyzeInContext(scope = prevCompletionData.statementResolutionScope,
contextExpression = block,
dataFlowInfo = prevCompletionData.statementDataFlowInfo,
isStatement = true)
// we do not update prevCompletionDataCache because the same data should work
return CompositeBindingContext.create(listOf(statementContext, prevCompletionData.bindingContext))
}
}
val bindingContext = resolutionFacade.analyze(position.parentsWithSelf.firstIsInstance<KtElement>(), BodyResolveMode.PARTIAL_FOR_COMPLETION)
@@ -381,20 +381,17 @@ class LookupElementFactory(
return CallableWeight(bestWeight, receiverIndexToUse)
}
private fun CallableDescriptor.callableWeightForReceiverType(receiverType: KotlinType, receiverParameterType: KotlinType): CallableWeightEnum? {
if (TypeUtils.equalTypes(receiverType, receiverParameterType)) {
return when {
isExtensionForTypeParameter() -> CallableWeightEnum.typeParameterExtension
isExtension -> CallableWeightEnum.thisTypeExtension
else -> CallableWeightEnum.thisClassMember
}
}
else if (receiverType.isSubtypeOf(receiverParameterType)) {
return if (isExtension) CallableWeightEnum.baseTypeExtension else CallableWeightEnum.baseClassMember
}
else {
return null
private fun CallableDescriptor.callableWeightForReceiverType(
receiverType: KotlinType,
receiverParameterType: KotlinType
): CallableWeightEnum? = when {
TypeUtils.equalTypes(receiverType, receiverParameterType) -> when {
isExtensionForTypeParameter() -> CallableWeightEnum.typeParameterExtension
isExtension -> CallableWeightEnum.thisTypeExtension
else -> CallableWeightEnum.thisClassMember
}
receiverType.isSubtypeOf(receiverParameterType) -> if (isExtension) CallableWeightEnum.baseTypeExtension else CallableWeightEnum.baseClassMember
else -> null
}
private fun CallableDescriptor.isExtensionForTypeParameter(): Boolean {