From efe891bb47f4d1b3e8eb1a536ba04c0ff174161c Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 20 Dec 2018 14:45:23 +0300 Subject: [PATCH] Remove duplicate of typealiases for javaslang collections --- .../cfg/variable/PseudocodeVariablesData.kt | 84 ++++++++----------- .../cfg/variable/VariableControlFlowInfo.kt | 2 - 2 files changed, 37 insertions(+), 49 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/variable/PseudocodeVariablesData.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/variable/PseudocodeVariablesData.kt index 0bd4c0d8d05..e4cd00f113c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/variable/PseudocodeVariablesData.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/variable/PseudocodeVariablesData.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.cfg.variable -import org.jetbrains.kotlin.cfg.* import org.jetbrains.kotlin.cfg.pseudocode.Pseudocode import org.jetbrains.kotlin.cfg.pseudocode.PseudocodeUtil import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction @@ -22,15 +21,9 @@ import org.jetbrains.kotlin.descriptors.VariableDescriptor import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContextUtils.variableDescriptorForDeclaration -import org.jetbrains.kotlin.util.javaslang.ImmutableHashMap -import org.jetbrains.kotlin.util.javaslang.ImmutableMap -import org.jetbrains.kotlin.util.javaslang.component1 -import org.jetbrains.kotlin.util.javaslang.component2 +import org.jetbrains.kotlin.util.javaslang.* import org.jetbrains.kotlin.utils.addToStdlib.safeAs -private typealias ImmutableSet = javaslang.collection.Set -private typealias ImmutableHashSet = javaslang.collection.HashSet - class PseudocodeVariablesData(val pseudocode: Pseudocode, private val bindingContext: BindingContext) { private val containsDoWhile = pseudocode.rootPseudocode.containsDoWhile private val pseudocodeVariableDataCollector = @@ -52,7 +45,7 @@ class PseudocodeVariablesData(val pseudocode: Pseudocode, private val bindingCon getAllDeclaredVariables(pseudocode, includeInsideLocalDeclarations = true) } - val variableInitializers: Map> by lazy { + val variableInitializers: Map> by lazy { computeVariableInitializers() } @@ -140,7 +133,7 @@ class PseudocodeVariablesData(val pseudocode: Pseudocode, private val bindingCon // variable initializers - private fun computeVariableInitializers(): Map> { + private fun computeVariableInitializers(): Map> { val blockScopeVariableInfo = pseudocodeVariableDataCollector.blockScopeVariableInfo @@ -150,8 +143,8 @@ class PseudocodeVariablesData(val pseudocode: Pseudocode, private val bindingCon return pseudocodeVariableDataCollector.collectData( TraversalOrder.FORWARD, - InitControlFlowInfo() - ) { instruction: Instruction, incomingEdgesData: Collection -> + InitVariableControlFlowInfo() + ) { instruction: Instruction, incomingEdgesData: Collection -> val enterInstructionData = mergeIncomingEdgesDataForInitializers( @@ -169,12 +162,12 @@ class PseudocodeVariablesData(val pseudocode: Pseudocode, private val bindingCon } } - private fun computeInitInfoForTrivialVals(): Map> { - val result = hashMapOf>() + private fun computeInitInfoForTrivialVals(): Map> { + val result = hashMapOf>() var declaredSet = ImmutableHashSet.empty() var initSet = ImmutableHashSet.empty() pseudocode.traverse(TraversalOrder.FORWARD) { instruction -> - val enterState = ReadOnlyInitControlFlowInfoImpl(declaredSet, initSet, null) + val enterState = ReadOnlyInitVariableControlFlowInfoImpl(declaredSet, initSet, null) when (instruction) { is VariableDeclarationInstruction -> extractValWithTrivialInitializer(instruction)?.let { variableDescriptor -> @@ -188,7 +181,7 @@ class PseudocodeVariablesData(val pseudocode: Pseudocode, private val bindingCon } } - val afterState = ReadOnlyInitControlFlowInfoImpl(declaredSet, initSet, null) + val afterState = ReadOnlyInitVariableControlFlowInfoImpl(declaredSet, initSet, null) result[instruction] = Edges(enterState, afterState) } @@ -201,26 +194,23 @@ class PseudocodeVariablesData(val pseudocode: Pseudocode, private val bindingCon // the variable (common variable/parameter/object) has been declared element is KtDeclaration - private inner class ReadOnlyInitControlFlowInfoImpl( + private inner class ReadOnlyInitVariableControlFlowInfoImpl( val declaredSet: ImmutableSet, val initSet: ImmutableSet, - private val delegate: ReadOnlyInitControlFlowInfo? - ) : ReadOnlyInitControlFlowInfo { - override fun getOrNull(variableDescriptor: VariableDescriptor): VariableControlFlowState? { - if (variableDescriptor in declaredSet) { - return VariableControlFlowState.create( - isInitialized = variableDescriptor in initSet, - isDeclared = true - ) + private val delegate: ReadOnlyInitVariableControlFlowInfo? + ) : ReadOnlyInitVariableControlFlowInfo { + override fun getOrNull(key: VariableDescriptor): VariableControlFlowState? { + if (key in declaredSet) { + return VariableControlFlowState.create(isInitialized = key in initSet, isDeclared = true) } - return delegate?.getOrNull(variableDescriptor) + return delegate?.getOrNull(key) } - override fun checkDefiniteInitializationInWhen(merge: ReadOnlyInitControlFlowInfo): Boolean = + override fun checkDefiniteInitializationInWhen(merge: ReadOnlyInitVariableControlFlowInfo): Boolean = delegate?.checkDefiniteInitializationInWhen(merge) ?: false - fun replaceDelegate(newDelegate: ReadOnlyInitControlFlowInfo): ReadOnlyInitControlFlowInfo = - ReadOnlyInitControlFlowInfoImpl(declaredSet, initSet, newDelegate) + fun replaceDelegate(newDelegate: ReadOnlyInitVariableControlFlowInfo): ReadOnlyInitVariableControlFlowInfo = + ReadOnlyInitVariableControlFlowInfoImpl(declaredSet, initSet, newDelegate) override fun asMap(): ImmutableMap { val initial = delegate?.asMap() ?: ImmutableHashMap.empty() @@ -234,7 +224,7 @@ class PseudocodeVariablesData(val pseudocode: Pseudocode, private val bindingCon if (this === other) return true if (javaClass != other?.javaClass) return false - other as ReadOnlyInitControlFlowInfoImpl + other as ReadOnlyInitVariableControlFlowInfoImpl if (declaredSet != other.declaredSet) return false if (initSet != other.initSet) return false @@ -253,9 +243,9 @@ class PseudocodeVariablesData(val pseudocode: Pseudocode, private val bindingCon private fun addVariableInitStateFromCurrentInstructionIfAny( instruction: Instruction, - enterInstructionData: InitControlFlowInfo, + enterInstructionData: InitVariableControlFlowInfo, blockScopeVariableInfo: BlockScopeVariableInfo - ): InitControlFlowInfo { + ): InitVariableControlFlowInfo { if (instruction is MagicInstruction) { if (instruction.kind === MagicKind.EXHAUSTIVE_WHEN_ELSE) { return enterInstructionData.iterator().fold(enterInstructionData) { result, (key, value) -> @@ -307,11 +297,11 @@ class PseudocodeVariablesData(val pseudocode: Pseudocode, private val bindingCon // variable use - val variableUseStatusData: Map> + val variableUseStatusData: Map> get() { val edgesForTrivialVals = computeUseInfoForTrivialVals() if (rootVariables.nonTrivialVariables.isEmpty()) { - return hashMapOf>().apply { + return hashMapOf>().apply { pseudocode.traverse(TraversalOrder.FORWARD) { instruction -> put(instruction, edgesForTrivialVals) } @@ -320,13 +310,13 @@ class PseudocodeVariablesData(val pseudocode: Pseudocode, private val bindingCon return pseudocodeVariableDataCollector.collectData( TraversalOrder.BACKWARD, - UseControlFlowInfo() - ) { instruction: Instruction, incomingEdgesData: Collection -> + UseVariableControlFlowInfo() + ) { instruction: Instruction, incomingEdgesData: Collection -> - val enterResult: UseControlFlowInfo = if (incomingEdgesData.size == 1) { + val enterResult: UseVariableControlFlowInfo = if (incomingEdgesData.size == 1) { incomingEdgesData.single() } else { - incomingEdgesData.fold(UseControlFlowInfo()) { result, edgeData -> + incomingEdgesData.fold(UseVariableControlFlowInfo()) { result, edgeData -> edgeData.iterator().fold(result) { subResult, (variableDescriptor, variableUseState) -> subResult.put(variableDescriptor, variableUseState.merge(subResult.getOrNull(variableDescriptor))) } @@ -387,14 +377,14 @@ class PseudocodeVariablesData(val pseudocode: Pseudocode, private val bindingCon private inner class ReadOnlyUseControlFlowInfoImpl( val used: Set, - val delegate: ReadOnlyUseControlFlowInfo? - ) : ReadOnlyUseControlFlowInfo { - override fun getOrNull(variableDescriptor: VariableDescriptor): VariableUseState? { - if (variableDescriptor in used) return VariableUseState.READ - return delegate?.getOrNull(variableDescriptor) + val delegate: ReadOnlyUseVariableControlFlowInfo? + ) : ReadOnlyUseVariableControlFlowInfo { + override fun getOrNull(key: VariableDescriptor): VariableUseState? { + if (key in used) return VariableUseState.READ + return delegate?.getOrNull(key) } - fun replaceDelegate(newDelegate: ReadOnlyUseControlFlowInfo): ReadOnlyUseControlFlowInfo = + fun replaceDelegate(newDelegate: ReadOnlyUseVariableControlFlowInfo): ReadOnlyUseVariableControlFlowInfo = ReadOnlyUseControlFlowInfoImpl(used, newDelegate) override fun asMap(): ImmutableMap { @@ -441,13 +431,13 @@ class PseudocodeVariablesData(val pseudocode: Pseudocode, private val bindingCon return VariableControlFlowState.create(isInitialized = declaredOutsideThisDeclaration) } - private val EMPTY_INIT_CONTROL_FLOW_INFO = InitControlFlowInfo() + private val EMPTY_INIT_CONTROL_FLOW_INFO = InitVariableControlFlowInfo() private fun mergeIncomingEdgesDataForInitializers( instruction: Instruction, - incomingEdgesData: Collection, + incomingEdgesData: Collection, blockScopeVariableInfo: BlockScopeVariableInfo - ): InitControlFlowInfo { + ): InitVariableControlFlowInfo { if (incomingEdgesData.size == 1) return incomingEdgesData.single() if (incomingEdgesData.isEmpty()) return EMPTY_INIT_CONTROL_FLOW_INFO val variablesInScope = linkedSetOf() diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/variable/VariableControlFlowInfo.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/variable/VariableControlFlowInfo.kt index e3c7ee80a13..c329c9f3d79 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/variable/VariableControlFlowInfo.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/variable/VariableControlFlowInfo.kt @@ -6,8 +6,6 @@ package org.jetbrains.kotlin.cfg.variable import org.jetbrains.kotlin.cfg.ControlFlowInfo -import org.jetbrains.kotlin.cfg.ImmutableHashMap -import org.jetbrains.kotlin.cfg.ImmutableMap import org.jetbrains.kotlin.cfg.ReadOnlyControlFlowInfo import org.jetbrains.kotlin.descriptors.VariableDescriptor import org.jetbrains.kotlin.util.javaslang.component1