J2K: replaced IntermediateResult with function

This commit is contained in:
Valentin Kipyatkov
2014-10-29 17:21:42 +03:00
committed by valentin
parent 2e0ccf6984
commit 448d444b2d
2 changed files with 8 additions and 14 deletions
+6 -12
View File
@@ -74,20 +74,14 @@ class Converter private(private val elementToConvert: PsiElement,
private fun createDefaultCodeConverter() = CodeConverter(this, DefaultExpressionConverter(), DefaultStatementConverter(), null)
public trait IntermediateResult {
fun finishConversion(usageProcessings: Map<PsiElement, UsageProcessing>): String
}
public fun convert(): IntermediateResult? {
public fun convert(): ((Map<PsiElement, UsageProcessing>) -> String)? {
val element = convertTopElement(elementToConvert) ?: return null
return object: IntermediateResult {
override fun finishConversion(usageProcessings: Map<PsiElement, UsageProcessing>): String {
unfoldDeferredElements(usageProcessings)
return { usageProcessings ->
unfoldDeferredElements(usageProcessings)
val builder = CodeBuilder(elementToConvert)
builder.append(element)
return builder.result
}
val builder = CodeBuilder(elementToConvert)
builder.append(element)
builder.result
}
}
@@ -53,7 +53,7 @@ public class JavaToKotlinConverter(private val project: Project,
public fun elementsToKotlin(psiElementsAndProcessors: List<Pair<PsiElement, PostProcessor?>>): List<String> {
try {
val intermediateResults = ArrayList<Converter.IntermediateResult?>(psiElementsAndProcessors.size)
val intermediateResults = ArrayList<((Map<PsiElement, UsageProcessing>) -> String)?>(psiElementsAndProcessors.size)
val usageProcessings = HashMap<PsiElement, UsageProcessing>()
val usageProcessingCollector: (UsageProcessing) -> Unit = { usageProcessing ->
assert(!usageProcessings.containsKey(usageProcessing.targetElement))
@@ -68,7 +68,7 @@ public class JavaToKotlinConverter(private val project: Project,
val results = ArrayList<String>(psiElementsAndProcessors.size)
for ((i, result) in intermediateResults.withIndices()) {
results.add(result?.finishConversion(usageProcessings) ?: "")
results.add(if (result != null) result(usageProcessings) else "")
intermediateResults[i] = null // to not hold unused objects in the heap
}