From 596635270e717fe02ba8b13446fbeec52de66f2c Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 28 Sep 2015 23:05:11 +0300 Subject: [PATCH] J2K: more correct comment placement --- j2k/src/org/jetbrains/kotlin/j2k/Converter.kt | 7 ++- .../detectProperties/Comments.java | 46 +++++++++++++++++++ .../detectProperties/Comments.kt | 24 ++++++++++ ...otlinConverterForWebDemoTestGenerated.java | 6 +++ ...otlinConverterSingleFileTestGenerated.java | 6 +++ 5 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 j2k/testData/fileOrElement/detectProperties/Comments.java create mode 100644 j2k/testData/fileOrElement/detectProperties/Comments.kt diff --git a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt index 5779db26b22..7b507a81f1f 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt @@ -400,7 +400,12 @@ class Converter private constructor( setter, classKind == ClassKind.INTERFACE ) - return property.assignPrototype(field as PsiElement? ?: getMethod ?: setMethod) + + val placementElement = field ?: getMethod ?: setMethod + val prototypes = listOf(field, getMethod, setMethod) + .filterNotNull() + .map { PrototypeInfo(it, if (it == placementElement) CommentsAndSpacesInheritance.LINE_BREAKS else CommentsAndSpacesInheritance.NO_SPACES) } + return property.assignPrototypes(*prototypes.toTypedArray()) } } diff --git a/j2k/testData/fileOrElement/detectProperties/Comments.java b/j2k/testData/fileOrElement/detectProperties/Comments.java new file mode 100644 index 00000000000..e06929eb048 --- /dev/null +++ b/j2k/testData/fileOrElement/detectProperties/Comments.java @@ -0,0 +1,46 @@ +class A { + // Comment for field1 + private int field1 = 0; + private int field2; // comment for field2 + + // comment before field3 + private int field3; // comment for field3 + + public A(int field2) { + this.field2 = field2; + } + + // Comment for field1 getter + public int getField1() { + return field1; + } + + /** + * Comment for field1 setter + */ + public void setField1(int field1) { + this.field1 = field1; + } + + // comment for field2 getter + public int getField2() { + return field2; + } + + // comment for field2 setter + public void setField2(int field2) { + this.field2 = field2; + } + + public int getField3() { return field3; } // comment for field3 getter + public void setField3(int field3) { this.field3 = field3; } // comment for field3 setter + + // comment for getProperty + public int getProperty() { + return 1; + } // end of getProperty + + // comment for setProperty + public void setProperty(int value) { + } // end of setProperty +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/detectProperties/Comments.kt b/j2k/testData/fileOrElement/detectProperties/Comments.kt new file mode 100644 index 00000000000..969f76fca8c --- /dev/null +++ b/j2k/testData/fileOrElement/detectProperties/Comments.kt @@ -0,0 +1,24 @@ +internal class A(// comment for field2 getter + // comment for field2 setter + var field2: Int // comment for field2 +) { + // Comment for field1 + // Comment for field1 getter + /** + * Comment for field1 setter + */ + var field1 = 0 + + // comment before field3 + var field3: Int = 0 // comment for field3 + // comment for field3 getter + // comment for field3 setter + + // comment for getProperty + // comment for setProperty + var property: Int + get() = 1 + set(value: Int) { + } // end of getProperty + // end of setProperty +} \ 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 1f381aa9392..9ebbf0cabc7 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -1411,6 +1411,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("Comments.java") + public void testComments() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/detectProperties/Comments.java"); + doTest(fileName); + } + @TestMetadata("DataClass.java") public void testDataClass() throws Exception { String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/detectProperties/DataClass.java"); diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java index 78333dc5506..fd8d3474e85 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java @@ -1411,6 +1411,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("Comments.java") + public void testComments() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/detectProperties/Comments.java"); + doTest(fileName); + } + @TestMetadata("DataClass.java") public void testDataClass() throws Exception { String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/detectProperties/DataClass.java");