From 50f68257752c47ab7eca72f06b3e6fa9ec2efb3a Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 12 Jan 2022 16:49:36 +0300 Subject: [PATCH] [FE 1.0] Cleanup code of ControlFlowProcessor - Always pass not nullable language version settings - Fix warnings and style - Remove redundant pseudocode utils --- .../kotlin/cfg/ControlFlowProcessor.kt | 76 +++++++++---------- .../kotlin/cfg/pseudocode/PseudocodeUtil.java | 9 ++- .../kotlin/cfg/pseudocode/pseudocodeUtils.kt | 2 +- .../kotlin/cfg/AbstractPseudocodeTest.java | 11 ++- 4 files changed, 51 insertions(+), 47 deletions(-) diff --git a/compiler/frontend/cfg/src/org/jetbrains/kotlin/cfg/ControlFlowProcessor.kt b/compiler/frontend/cfg/src/org/jetbrains/kotlin/cfg/ControlFlowProcessor.kt index 47006fe18e0..e4c0d62210e 100644 --- a/compiler/frontend/cfg/src/org/jetbrains/kotlin/cfg/ControlFlowProcessor.kt +++ b/compiler/frontend/cfg/src/org/jetbrains/kotlin/cfg/ControlFlowProcessor.kt @@ -33,16 +33,13 @@ import org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.InstructionWithValu import org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.MagicKind import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange import org.jetbrains.kotlin.contracts.description.canBeRevisited import org.jetbrains.kotlin.contracts.description.isDefinitelyVisited import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor -import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.diagnostics.Errors.* import org.jetbrains.kotlin.lexer.KtToken -import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens.* import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* @@ -71,7 +68,7 @@ typealias DeferredGenerator = (ControlFlowBuilder) -> Unit class ControlFlowProcessor( private val trace: BindingTrace, - private val languageVersionSettings: LanguageVersionSettings? + private val languageVersionSettings: LanguageVersionSettings ) { private val builder: ControlFlowBuilder = ControlFlowInstructionsGenerator() @@ -169,7 +166,7 @@ class ControlFlowProcessor( } override fun visitKtElement(element: KtElement) { - throw UnsupportedOperationException("[ControlFlowProcessor] " + element.toString()) + throw UnsupportedOperationException("[ControlFlowProcessor] $element") } } @@ -310,7 +307,7 @@ class ControlFlowProcessor( deparenthesizedBaseExpression !is KtLoopExpression && deparenthesizedBaseExpression !is KtNamedFunction ) { - trace.report(Errors.REDUNDANT_LABEL_WARNING.on(labelNameExpression)) + trace.report(REDUNDANT_LABEL_WARNING.on(labelNameExpression)) } } } @@ -348,7 +345,7 @@ class ControlFlowProcessor( generateInstructions(right) builder.bindLabel(afterElvis) mergeValues(listOfNotNull(left, right), expression) - if (right != null && languageVersionSettings?.supportsFeature(LanguageFeature.ProhibitNonExhaustiveIfInRhsOfElvis) == true) { + if (right != null && languageVersionSettings.supportsFeature(LanguageFeature.ProhibitNonExhaustiveIfInRhsOfElvis)) { trace.record(USED_AS_EXPRESSION, right, true) } } else { @@ -373,12 +370,12 @@ class ControlFlowProcessor( generateInstructions(right) builder.bindLabel(resultLabel) val operation = if (operationType === ANDAND) ControlFlowBuilder.PredefinedOperation.AND else OR - builder.predefinedOperation(expression, operation, elementsToValues(listOf(left, right).filterNotNull())) + builder.predefinedOperation(expression, operation, elementsToValues(listOfNotNull(left, right))) } - private fun getValueAsFunction(value: PseudoValue?) = { value } + private fun getValueAsFunction(value: PseudoValue?): () -> PseudoValue? = { value } - private fun getDeferredValue(expression: KtExpression?) = { + private fun getDeferredValue(expression: KtExpression?): () -> PseudoValue? = { generateInstructions(expression) getBoundOrUnreachableValue(expression) } @@ -413,7 +410,7 @@ class ControlFlowProcessor( return } - var receiverValues: Map = SmartFMap.emptyMap() + var receiverValues: Map = SmartFMap.emptyMap() var accessTarget: AccessTarget = AccessTarget.BlackBox if (left is KtSimpleNameExpression || left is KtQualifiedExpression) { accessTarget = getResolvedCallAccessTarget(left.getQualifiedElementSelector()) @@ -444,7 +441,7 @@ class ControlFlowProcessor( if (setResolvedCall == null) { generateArrayAccess(lhs, null) - val arguments = listOf(getBoundOrUnreachableValue(lhs), rhsDeferredValue.invoke()).filterNotNull() + val arguments = listOfNotNull(getBoundOrUnreachableValue(lhs), rhsDeferredValue.invoke()) builder.magic(parentExpression, parentExpression, arguments, MagicKind.UNRESOLVED_CALL) return @@ -474,7 +471,7 @@ class ControlFlowProcessor( setResolvedCall: ResolvedCall ): SmartFMap { val valueArguments = setResolvedCall.resultingDescriptor.valueParameters.flatMapTo( - ArrayList() + ArrayList() ) { descriptor -> setResolvedCall.valueArguments[descriptor]?.arguments ?: emptyList() } val rhsArgument = valueArguments.lastOrNull() @@ -527,7 +524,7 @@ class ControlFlowProcessor( val operationSign = expression.operationReference val operationType = operationSign.getReferencedNameElementType() val baseExpression = expression.baseExpression ?: return - if (KtTokens.EXCLEXCL === operationType) { + if (EXCLEXCL === operationType) { generateInstructions(baseExpression) builder.predefinedOperation(expression, NOT_NULL_ASSERTION, elementsToValues(listOf(baseExpression))) return @@ -552,7 +549,7 @@ class ControlFlowProcessor( } private fun isIncrementOrDecrement(operationType: IElementType): Boolean = - operationType === KtTokens.PLUSPLUS || operationType === KtTokens.MINUSMINUS + operationType === PLUSPLUS || operationType === MINUSMINUS override fun visitIfExpression(expression: KtIfExpression) { mark(expression) @@ -656,7 +653,7 @@ class ControlFlowProcessor( // Returns label for 'finally' block private fun generateTryAndCatches(expression: KtTryExpression): Label? { val catchClauses = expression.catchClauses - val hasCatches = !catchClauses.isEmpty() + val hasCatches = catchClauses.isNotEmpty() var onException: Label? = null if (hasCatches) { @@ -684,7 +681,7 @@ class ControlFlowProcessor( val catchLabels = LinkedList