J2K: do not convert doc comments on WebDemo

#KT-7968 Fixed
This commit is contained in:
Natalia Ukhorskaya
2015-07-24 12:20:29 +03:00
parent ae277a0ad7
commit b54da25108
11 changed files with 32 additions and 44 deletions
@@ -36,9 +36,7 @@ import org.jetbrains.kotlin.idea.j2k.IdeaResolverForConverter
import org.jetbrains.kotlin.idea.j2k.J2kPostProcessor import org.jetbrains.kotlin.idea.j2k.J2kPostProcessor
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.j2k.ConverterSettings import org.jetbrains.kotlin.j2k.*
import org.jetbrains.kotlin.j2k.IdeaReferenceSearcher
import org.jetbrains.kotlin.j2k.JavaToKotlinConverter
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
import java.util.ArrayList import java.util.ArrayList
@@ -52,7 +50,7 @@ public class JavaToKotlinAction : AnAction() {
var converterResult: JavaToKotlinConverter.FilesResult? = null var converterResult: JavaToKotlinConverter.FilesResult? = null
fun convert() { fun convert() {
val converter = JavaToKotlinConverter(project, ConverterSettings.defaultSettings, IdeaReferenceSearcher, IdeaResolverForConverter) val converter = JavaToKotlinConverter(project, ConverterSettings.defaultSettings, IdeaReferenceSearcher, IdeaResolverForConverter, IdeaDocCommentConverter)
converterResult = converter.filesToKotlin(javaFiles, J2kPostProcessor(formatCode = true), ProgressManager.getInstance().getProgressIndicator()) converterResult = converter.filesToKotlin(javaFiles, J2kPostProcessor(formatCode = true), ProgressManager.getInstance().getProgressIndicator())
} }
@@ -160,7 +160,8 @@ public class ConvertJavaCopyPastePostProcessor : CopyPastePostProcessor<TextBloc
project, project,
ConverterSettings.defaultSettings, ConverterSettings.defaultSettings,
IdeaReferenceSearcher, IdeaReferenceSearcher,
IdeaResolverForConverter IdeaResolverForConverter,
IdeaDocCommentConverter
) )
val inputElements = elementsAndTexts.filterIsInstance<PsiElement>() val inputElements = elementsAndTexts.filterIsInstance<PsiElement>()
@@ -67,6 +67,7 @@ import org.jetbrains.kotlin.idea.j2k.IdeaResolverForConverter
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.idea.util.string.collapseSpaces import org.jetbrains.kotlin.idea.util.string.collapseSpaces
import org.jetbrains.kotlin.j2k.ConverterSettings import org.jetbrains.kotlin.j2k.ConverterSettings
import org.jetbrains.kotlin.j2k.IdeaDocCommentConverter
import org.jetbrains.kotlin.j2k.IdeaReferenceSearcher import org.jetbrains.kotlin.j2k.IdeaReferenceSearcher
import org.jetbrains.kotlin.j2k.JavaToKotlinConverter import org.jetbrains.kotlin.j2k.JavaToKotlinConverter
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
@@ -572,7 +573,8 @@ fun PsiExpression.j2k(): JetExpression? {
val j2kConverter = JavaToKotlinConverter(project, val j2kConverter = JavaToKotlinConverter(project,
ConverterSettings.defaultSettings, ConverterSettings.defaultSettings,
IdeaReferenceSearcher, IdeaReferenceSearcher,
IdeaResolverForConverter) IdeaResolverForConverter,
IdeaDocCommentConverter)
val text = j2kConverter.elementsToKotlin(listOf(this)).results.single()?.text ?: return null //TODO: insert imports val text = j2kConverter.elementsToKotlin(listOf(this)).results.single()?.text ?: return null //TODO: insert imports
return JetPsiFactory(getProject()).createExpression(text) return JetPsiFactory(getProject()).createExpression(text)
} }
@@ -53,7 +53,7 @@ fun CodeBuilder.append(elements: Collection<Element>, separator: String, prefix:
class ElementCreationStackTraceRequiredException : RuntimeException() class ElementCreationStackTraceRequiredException : RuntimeException()
class CodeBuilder(private val topElement: PsiElement?) { class CodeBuilder(private val topElement: PsiElement?, private var docConverter: DocCommentConverter) {
private val builder = StringBuilder() private val builder = StringBuilder()
private var endOfLineCommentAtEnd = false private var endOfLineCommentAtEnd = false
@@ -70,7 +70,7 @@ class CodeBuilder(private val topElement: PsiElement?) {
private fun appendCommentOrWhiteSpace(element: PsiElement) { private fun appendCommentOrWhiteSpace(element: PsiElement) {
if (element is PsiDocComment) { if (element is PsiDocComment) {
append(DocCommentConverter.convertDocComment(element), false) append(docConverter.convertDocComment(element), false)
} }
else { else {
append(element.getText()!!, element.isEndOfLineComment()) append(element.getText()!!, element.isEndOfLineComment())
@@ -41,6 +41,7 @@ class Converter private constructor(
val inConversionScope: (PsiElement) -> Boolean, val inConversionScope: (PsiElement) -> Boolean,
val referenceSearcher: ReferenceSearcher, val referenceSearcher: ReferenceSearcher,
val resolverForConverter: ResolverForConverter, val resolverForConverter: ResolverForConverter,
private val docCommentConverter: DocCommentConverter,
private val commonState: Converter.CommonState, private val commonState: Converter.CommonState,
private val personalState: Converter.PersonalState private val personalState: Converter.PersonalState
) { ) {
@@ -63,17 +64,17 @@ class Converter private constructor(
companion object { companion object {
public fun create(elementToConvert: PsiElement, settings: ConverterSettings, inConversionScope: (PsiElement) -> Boolean, public fun create(elementToConvert: PsiElement, settings: ConverterSettings, inConversionScope: (PsiElement) -> Boolean,
referenceSearcher: ReferenceSearcher, resolverForConverter: ResolverForConverter, referenceSearcher: ReferenceSearcher, resolverForConverter: ResolverForConverter,
usageProcessingsCollector: (UsageProcessing) -> Unit): Converter { docCommentConverter: DocCommentConverter, usageProcessingsCollector: (UsageProcessing) -> Unit): Converter {
return Converter(elementToConvert, settings, inConversionScope, return Converter(elementToConvert, settings, inConversionScope,
CachingReferenceSearcher(referenceSearcher), CachingReferenceSearcher(referenceSearcher),
resolverForConverter, CommonState(usageProcessingsCollector), PersonalState(null)) resolverForConverter, docCommentConverter, CommonState(usageProcessingsCollector), PersonalState(null))
} }
} }
public fun withSpecialContext(context: PsiElement): Converter = withState(PersonalState(context)) public fun withSpecialContext(context: PsiElement): Converter = withState(PersonalState(context))
private fun withState(state: PersonalState): Converter private fun withState(state: PersonalState): Converter
= Converter(elementToConvert, settings, inConversionScope, referenceSearcher, resolverForConverter, commonState, state) = Converter(elementToConvert, settings, inConversionScope, referenceSearcher, resolverForConverter, docCommentConverter, commonState, state)
private fun createDefaultCodeConverter() = CodeConverter(this, DefaultExpressionConverter(), DefaultStatementConverter(), null) private fun createDefaultCodeConverter() = CodeConverter(this, DefaultExpressionConverter(), DefaultStatementConverter(), null)
@@ -97,7 +98,7 @@ class Converter private constructor(
{ usageProcessings -> { usageProcessings ->
unfoldDeferredElements(usageProcessings) unfoldDeferredElements(usageProcessings)
val builder = CodeBuilder(elementToConvert) val builder = CodeBuilder(elementToConvert, docCommentConverter)
builder.append(element) builder.append(element)
Result(builder.resultText, builder.importsToAdd) Result(builder.resultText, builder.importsToAdd)
}, },
@@ -29,8 +29,16 @@ import com.intellij.psi.xml.XmlText
import com.intellij.psi.xml.XmlTokenType import com.intellij.psi.xml.XmlTokenType
import java.util.Stack import java.util.Stack
object DocCommentConverter { interface DocCommentConverter {
fun convertDocComment(docComment: PsiDocComment): String { fun convertDocComment(docComment: PsiDocComment): String
}
object EmptyDocCommentConverter: DocCommentConverter {
override fun convertDocComment(docComment: PsiDocComment) = docComment.text
}
object IdeaDocCommentConverter : DocCommentConverter {
override fun convertDocComment(docComment: PsiDocComment): String {
val html = StringBuilder { val html = StringBuilder {
appendJavadocElements(docComment.getDescriptionElements()) appendJavadocElements(docComment.getDescriptionElements())
@@ -84,7 +84,8 @@ public class JavaToKotlinConverter(
private val project: Project, private val project: Project,
private val settings: ConverterSettings, private val settings: ConverterSettings,
private val referenceSearcher: ReferenceSearcher, private val referenceSearcher: ReferenceSearcher,
private val resolverForConverter: ResolverForConverter private val resolverForConverter: ResolverForConverter,
private val docCommentConverter: DocCommentConverter
) { ) {
private val LOG = Logger.getInstance("#org.jetbrains.kotlin.j2k.JavaToKotlinConverter") private val LOG = Logger.getInstance("#org.jetbrains.kotlin.j2k.JavaToKotlinConverter")
@@ -142,7 +143,7 @@ public class JavaToKotlinConverter(
val intermediateResults = processor.processItems(0.25, inputElements) { inputElement -> val intermediateResults = processor.processItems(0.25, inputElements) { inputElement ->
Converter.create(inputElement, settings, ::inConversionScope, referenceSearcher, resolverForConverter, usageProcessingCollector).convert() Converter.create(inputElement, settings, ::inConversionScope, referenceSearcher, resolverForConverter, docCommentConverter, usageProcessingCollector).convert()
}.toArrayList() }.toArrayList()
val results = processor.processItems(0.25, intermediateResults.withIndex()) { pair -> val results = processor.processItems(0.25, intermediateResults.withIndex()) { pair ->
@@ -16,34 +16,11 @@
package org.jetbrains.kotlin.j2k package org.jetbrains.kotlin.j2k
import com.intellij.core.JavaCoreApplicationEnvironment
import com.intellij.core.JavaCoreProjectEnvironment
import com.intellij.lang.java.JavaLanguage import com.intellij.lang.java.JavaLanguage
import com.intellij.openapi.util.Disposer import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import com.intellij.psi.PsiFileFactory import com.intellij.psi.PsiFileFactory
import com.intellij.psi.PsiJavaFile import com.intellij.psi.PsiJavaFile
import org.jetbrains.kotlin.utils.PathUtil
import java.io.File
import java.net.URLClassLoader
import com.intellij.codeInsight.NullableNotNullManager
import com.intellij.psi.PsiModifierListOwner
import com.intellij.openapi.extensions.Extensions
import com.intellij.core.CoreApplicationEnvironment
import com.intellij.psi.augment.PsiAugmentProvider
import com.intellij.codeInsight.runner.JavaMainMethodProvider
import com.intellij.codeInsight.ContainerProvider
import com.intellij.openapi.fileTypes.FileTypeExtensionPoint
import com.intellij.psi.stubs.BinaryFileStubBuilders
import com.intellij.psi.FileContextProvider
import com.intellij.psi.meta.MetaDataContributor
import com.intellij.psi.impl.compiled.ClsCustomNavigationPolicy
import com.intellij.psi.compiled.ClassFileDecompilers
import com.intellij.psi.impl.PsiTreeChangePreprocessor
import com.intellij.psi.PsiElementFinder
import com.intellij.openapi.extensions.ExtensionsArea
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
public object JavaToKotlinTranslator { public object JavaToKotlinTranslator {
private fun createFile(text: String, project: Project): PsiFile? { private fun createFile(text: String, project: Project): PsiFile? {
@@ -68,7 +45,7 @@ public object JavaToKotlinTranslator {
public fun generateKotlinCode(javaCode: String, project: Project): String { public fun generateKotlinCode(javaCode: String, project: Project): String {
val file = createFile(javaCode, project) val file = createFile(javaCode, project)
if (file is PsiJavaFile) { if (file is PsiJavaFile) {
val converter = JavaToKotlinConverter(file.getProject(), ConverterSettings.defaultSettings, EmptyReferenceSearcher, EmptyResolverForConverter) val converter = JavaToKotlinConverter(file.getProject(), ConverterSettings.defaultSettings, EmptyReferenceSearcher, EmptyResolverForConverter, EmptyDocCommentConverter)
return prettify(converter.elementsToKotlin(listOf(file)).results.single()!!.text) //TODO: imports return prettify(converter.elementsToKotlin(listOf(file)).results.single()!!.text) //TODO: imports
} }
return "" return ""
@@ -62,7 +62,7 @@ data class CommentsAndSpacesInheritance(
} }
fun Element.canonicalCode(): String { fun Element.canonicalCode(): String {
val builder = CodeBuilder(null) val builder = CodeBuilder(null, EmptyDocCommentConverter)
builder.append(this) builder.append(this)
return builder.resultText return builder.resultText
} }
@@ -54,7 +54,7 @@ public abstract class AbstractJavaToKotlinConverterMultiFileTest : AbstractJavaT
assert(psiFile is PsiJavaFile || psiFile is JetFile) assert(psiFile is PsiJavaFile || psiFile is JetFile)
} }
val converter = JavaToKotlinConverter(project, ConverterSettings.defaultSettings, IdeaReferenceSearcher, IdeaResolverForConverter) val converter = JavaToKotlinConverter(project, ConverterSettings.defaultSettings, IdeaReferenceSearcher, IdeaResolverForConverter, EmptyDocCommentConverter)
val (results, externalCodeProcessor) = converter.filesToKotlin(psiFilesToConvert, J2kPostProcessor(formatCode = true)) val (results, externalCodeProcessor) = converter.filesToKotlin(psiFilesToConvert, J2kPostProcessor(formatCode = true))
val process = externalCodeProcessor?.prepareWriteOperation(EmptyProgressIndicator()) val process = externalCodeProcessor?.prepareWriteOperation(EmptyProgressIndicator())
@@ -108,7 +108,7 @@ public abstract class AbstractJavaToKotlinConverterSingleFileTest : AbstractJava
private fun fileToKotlin(text: String, settings: ConverterSettings, project: Project): String { private fun fileToKotlin(text: String, settings: ConverterSettings, project: Project): String {
val file = createJavaFile(text) val file = createJavaFile(text)
val converter = JavaToKotlinConverter(project, settings, val converter = JavaToKotlinConverter(project, settings,
IdeaReferenceSearcher, IdeaResolverForConverter) IdeaReferenceSearcher, IdeaResolverForConverter, IdeaDocCommentConverter)
return converter.filesToKotlin(listOf(file), J2kPostProcessor(formatCode = true)).results.single() return converter.filesToKotlin(listOf(file), J2kPostProcessor(formatCode = true)).results.single()
} }