Shorten references: Do not process shortened elements since they become invalid (and can't be analyzed)

This commit is contained in:
Alexey Sedunov
2015-01-30 15:03:29 +03:00
committed by Valentin Kipyatkov
parent c915d2b0cd
commit baaabecaf9
@@ -119,8 +119,8 @@ public object ShortenReferences {
val descriptorsToImport1 = analyzeReferences(elementsToUse, visitor1) val descriptorsToImport1 = analyzeReferences(elementsToUse, visitor1)
val descriptorsToImport2 = analyzeReferences(elementsToUse, visitor2) val descriptorsToImport2 = analyzeReferences(elementsToUse, visitor2)
visitor1.shortenElements() elementsToUse.removeAll(visitor1.shortenElements())
visitor2.shortenElements() elementsToUse.removeAll(visitor2.shortenElements())
if (descriptorsToImport1.isEmpty() && descriptorsToImport2.isEmpty()) break if (descriptorsToImport1.isEmpty() && descriptorsToImport2.isEmpty()) break
@@ -141,10 +141,9 @@ public object ShortenReferences {
} }
} }
private fun dropNestedElements(elements: List<JetElement>): Iterable<JetElement> { private fun dropNestedElements(elements: List<JetElement>): LinkedHashSet<JetElement> {
if (elements.size() <= 1) return elements
val elementSet = elements.toSet() val elementSet = elements.toSet()
val newElements = ArrayList<JetElement>(elementSet.size()) val newElements = LinkedHashSet<JetElement>(elementSet.size())
for (element in elementSet) { for (element in elementSet) {
if (!element.parents(withItself = false).any { it in elementSet }) { if (!element.parents(withItself = false).any { it in elementSet }) {
newElements.add(element) newElements.add(element)
@@ -192,11 +191,12 @@ public object ShortenReferences {
} }
} }
public fun shortenElements() { public fun shortenElements(): Collection<T> {
for (element in elementsToShorten) { for (element in elementsToShorten) {
assert (element.isValid()) assert (element.isValid())
shortenElement(element) shortenElement(element)
} }
return elementsToShorten
} }
public fun getDescriptorsToImport(): Set<DeclarationDescriptor> = descriptorsToImport public fun getDescriptorsToImport(): Set<DeclarationDescriptor> = descriptorsToImport