From 2f226685d51d5ed27107040a2deee59815f2c6bc Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 21 Nov 2014 15:56:22 +0300 Subject: [PATCH] Compiler bug workaround --- .../resolve/lazy/PartialBodyResolveFilter.kt | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/PartialBodyResolveFilter.kt b/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/PartialBodyResolveFilter.kt index 3c26edec66e..442846df196 100644 --- a/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/PartialBodyResolveFilter.kt +++ b/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/PartialBodyResolveFilter.kt @@ -118,7 +118,7 @@ class PartialBodyResolveFilter( if (level > MarkLevel.TAKE) { // otherwise there are no statements inside that need processBlock which only works when reference resolve needed for (nestedBlock in statement.blocks()) { val childFilter = processBlock(nestedBlock) - nameFilter.addNames(childFilter) + nameFilter.addNamesFromFilter(childFilter) } } } @@ -424,7 +424,7 @@ class PartialBodyResolveFilter( } } - fun addNames(filter: NameFilter) { + fun addNamesFromFilter(filter: NameFilter) { if (names == null) return if (filter.names == null) { names = null @@ -446,45 +446,6 @@ class PartialBodyResolveFilter( NEED_COMPLETION } - private inner class StatementMarks { - private val statementMarks = HashMap() - private val blockLevels = HashMap() - - fun mark(element: PsiElement, level: MarkLevel) { - var e = element - while (e != declaration) { - if (e.isStatement()) { - markStatement(e as JetExpression, level) - } - e = e.getParent()!! - } - } - - private fun markStatement(statement: JetExpression, level: MarkLevel) { - val currentLevel = statementMark(statement) - if (currentLevel < level) { - statementMarks[statement] = level - - val block = statement.getParent() as JetBlockExpression - val currentBlockLevel = blockLevels[block] ?: MarkLevel.SKIP - if (currentBlockLevel < level) { - blockLevels[block] = level - } - } - } - - fun statementMark(statement: JetExpression): MarkLevel - = statementMarks[statement] ?: MarkLevel.SKIP - - fun lastMarkedStatement(block: JetBlockExpression, minLevel: MarkLevel): JetExpression? { - val level = blockLevels[block] ?: MarkLevel.SKIP - if (level < minLevel) return null // optimization - return block.getLastChild().siblings(forward = false) - .filterIsInstance() - .first { statementMark(it) >= minLevel } - } - } - class object { private fun JetElement.blocks(): Collection { val result = ArrayList(1) @@ -531,7 +492,46 @@ class PartialBodyResolveFilter( = getLastChild()?.siblings(forward = false)?.firstIsInstanceOrNull() private fun PsiElement.isStatement() = this is JetExpression && getParent() is JetBlockExpression - } + + private inner class StatementMarks { + private val statementMarks = HashMap() + private val blockLevels = HashMap() + + fun mark(element: PsiElement, level: MarkLevel) { + var e = element + while (e != declaration) { + if (e.isStatement()) { + markStatement(e as JetExpression, level) + } + e = e.getParent()!! + } + } + + private fun markStatement(statement: JetExpression, level: MarkLevel) { + val currentLevel = statementMark(statement) + if (currentLevel < level) { + statementMarks[statement] = level + + val block = statement.getParent() as JetBlockExpression + val currentBlockLevel = blockLevels[block] ?: MarkLevel.SKIP + if (currentBlockLevel < level) { + blockLevels[block] = level + } + } + } + + fun statementMark(statement: JetExpression): MarkLevel + = statementMarks[statement] ?: MarkLevel.SKIP + + fun lastMarkedStatement(block: JetBlockExpression, minLevel: MarkLevel): JetExpression? { + val level = blockLevels[block] ?: MarkLevel.SKIP + if (level < minLevel) return null // optimization + return block.getLastChild().siblings(forward = false) + .filterIsInstance() + .first { statementMark(it) >= minLevel } + } + } + }