From 1a7c507cc5a031d22d2b7a6ad0b8227ffb156372 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Mon, 10 Oct 2016 20:32:37 +0300 Subject: [PATCH] Fix for KT-13818 Javadoc @code conversion --- .../idea/j2k/IdeaDocCommentConverter.kt | 19 ++++++++++++++++--- .../docComments/inlineTagsInDocComment.kt | 2 +- .../fileOrElement/docComments/quoted.java | 11 +++++++++++ .../fileOrElement/docComments/quoted.kt | 11 +++++++++++ ...otlinConverterForWebDemoTestGenerated.java | 6 ++++++ ...otlinConverterSingleFileTestGenerated.java | 6 ++++++ 6 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 j2k/testData/fileOrElement/docComments/quoted.java create mode 100644 j2k/testData/fileOrElement/docComments/quoted.kt diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/j2k/IdeaDocCommentConverter.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/j2k/IdeaDocCommentConverter.kt index d8a5881a116..96dd5fcf969 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/j2k/IdeaDocCommentConverter.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/j2k/IdeaDocCommentConverter.kt @@ -22,6 +22,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiFileFactory import com.intellij.psi.PsiWhiteSpace import com.intellij.psi.XmlRecursiveElementVisitor +import com.intellij.psi.html.HtmlTag import com.intellij.psi.javadoc.PsiDocComment import com.intellij.psi.javadoc.PsiDocTag import com.intellij.psi.javadoc.PsiDocToken @@ -132,10 +133,22 @@ object IdeaDocCommentConverter : DocCommentConverter { super.visitElement(element) val tokenType = element.node.elementType - if (tokenType == XmlTokenType.XML_DATA_CHARACTERS || tokenType == XmlTokenType.XML_CHAR_ENTITY_REF) { - appendPendingText() - markdownBuilder.append(element.text) + + when (tokenType) { + XmlTokenType.XML_DATA_CHARACTERS -> { + appendPendingText() + markdownBuilder.append(element.text) + } + XmlTokenType.XML_CHAR_ENTITY_REF -> { + appendPendingText() + val grandParent = element.parent.parent + if(grandParent is HtmlTag && (grandParent.name == "code" || grandParent.name == "literal")) + markdownBuilder.append(StringUtil.unescapeXml(element.text)) + else + markdownBuilder.append(element.text) + } } + } override fun visitXmlTag(tag: XmlTag) { diff --git a/j2k/testData/fileOrElement/docComments/inlineTagsInDocComment.kt b/j2k/testData/fileOrElement/docComments/inlineTagsInDocComment.kt index a96f652a35c..ea9883715aa 100644 --- a/j2k/testData/fileOrElement/docComments/inlineTagsInDocComment.kt +++ b/j2k/testData/fileOrElement/docComments/inlineTagsInDocComment.kt @@ -1,4 +1,4 @@ /** - * `A<B` + * `A b} + * String: {@code str = "String"} + * Generic: {@code List} + * End. + */ +public class Quote {} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/docComments/quoted.kt b/j2k/testData/fileOrElement/docComments/quoted.kt new file mode 100644 index 00000000000..6aff7d614e9 --- /dev/null +++ b/j2k/testData/fileOrElement/docComments/quoted.kt @@ -0,0 +1,11 @@ +/** + * Start. + * Plain quote: 'quoted' + * KT-13818: `'quoted'` + * Code: `someCode()` + * Operators: `a > b` + * String: `str = "String"` + * Generic: `List` + * End. + */ +class Quote \ No newline at end of file diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java index cb1e193c78a..ca225e36ed4 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -1711,6 +1711,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/docComments"), Pattern.compile("^(.+)\\.java$"), true); } + @TestMetadata("quoted.java") + public void testCodeQuote() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/docComments/quoted.java"); + doTest(fileName); + } + @TestMetadata("deprecatedDocTag.java") public void testDeprecatedDocTag() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/docComments/deprecatedDocTag.java"); diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java index 8061e1c4555..7d514c2c789 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java @@ -1711,6 +1711,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/docComments"), Pattern.compile("^(.+)\\.java$"), true); } + @TestMetadata("quoted.java") + public void testCodeQuote() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/docComments/quoted.java"); + doTest(fileName); + } + @TestMetadata("deprecatedDocTag.java") public void testDeprecatedDocTag() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/docComments/deprecatedDocTag.java");