New J2K: pass converter context to postprocessing

This commit is contained in:
Ilya Kirillov
2019-04-18 12:42:01 +03:00
committed by Ilya Kirillov
parent c4a238cca4
commit 39b09b39ff
58 changed files with 202 additions and 150 deletions
@@ -21,7 +21,7 @@ import com.intellij.openapi.util.TextRange
import org.jetbrains.kotlin.psi.KtFile
class AfterConversionPass(val project: Project, val postProcessor: PostProcessor) {
fun run(kotlinFile: KtFile, range: TextRange?) {
fun run(kotlinFile: KtFile, converterContext: ConverterContext?, range: TextRange?) {
val rangeMarker = if (range != null) {
val document = kotlinFile.viewProvider.document!!
val marker = document.createRangeMarker(range.startOffset, range.endOffset)
@@ -32,6 +32,6 @@ class AfterConversionPass(val project: Project, val postProcessor: PostProcessor
null
}
postProcessor.doAdditionalProcessing(kotlinFile, rangeMarker)
postProcessor.doAdditionalProcessing(kotlinFile, converterContext, rangeMarker)
}
}
@@ -14,7 +14,7 @@ abstract class J2kConverterExtension : AbstractExtensionPointBean() {
services: JavaToKotlinConverterServices
): JavaToKotlinConverter
abstract fun createPostProcessor(formatCode: Boolean, settings: ConverterSettings = ConverterSettings.defaultSettings): PostProcessor
abstract fun createPostProcessor(formatCode: Boolean): PostProcessor
companion object {
@@ -40,7 +40,7 @@ import java.util.*
interface PostProcessor {
fun insertImport(file: KtFile, fqName: FqName)
fun doAdditionalProcessing(file: KtFile, rangeMarker: RangeMarker?)
fun doAdditionalProcessing(file: KtFile, converterContext: ConverterContext?, rangeMarker: RangeMarker?)
}
enum class ParseContext {
@@ -55,10 +55,15 @@ interface ExternalCodeProcessing {
data class ElementResult(val text: String, val importsToAdd: Set<FqName>, val parseContext: ParseContext)
data class Result(val results: List<ElementResult?>, val externalCodeProcessing: ExternalCodeProcessing?)
data class Result(
val results: List<ElementResult?>,
val externalCodeProcessing: ExternalCodeProcessing?,
val converterContext: ConverterContext?
)
data class FilesResult(val results: List<String>, val externalCodeProcessing: ExternalCodeProcessing?)
interface ConverterContext
abstract class JavaToKotlinConverter {
protected abstract fun elementsToKotlin(inputElements: List<PsiElement>, processor: WithProgressProcessor): Result
@@ -101,7 +106,7 @@ class OldJavaToKotlinConverter(
result!!.importsToAdd.forEach { postProcessor.insertImport(kotlinFile, it) }
AfterConversionPass(project, postProcessor).run(kotlinFile, range = null)
AfterConversionPass(project, postProcessor).run(kotlinFile, converterContext = null, range = null)
kotlinFile.text
} catch (e: ProcessCanceledException) {
@@ -140,7 +145,7 @@ class OldJavaToKotlinConverter(
val externalCodeProcessing = buildExternalCodeProcessing(usageProcessings, ::inConversionScope)
return Result(results, externalCodeProcessing)
return Result(results, externalCodeProcessing, null)
} catch (e: ElementCreationStackTraceRequiredException) {
// if we got this exception then we need to turn element creation stack traces on to get better diagnostic
Element.saveCreationStacktraces = true