Skip to content

Commit 6018839

Browse files
committed
bugfix: fix #94
1 parent 5804593 commit 6018839

File tree

4 files changed

+26
-19
lines changed

4 files changed

+26
-19
lines changed

src/main/kotlin/wu/seal/jsontokotlin/classscodestruct/KotlinDataClass.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ data class KotlinDataClass(
2323
append(annotationsCode).append("\n")
2424
}
2525
}
26-
append("data class ").append(name).append("(").append("\n")
26+
if (properties.isEmpty()) {
27+
append("class ").append(name).append("(").append("\n")
28+
} else {
29+
append("data class ").append(name).append("(").append("\n")
30+
}
2731
properties.forEach {
2832
val code = it.getCode()
2933
val addIndentCode = code.split("\n").joinToString("\n") { indent + it }
@@ -99,4 +103,4 @@ data class KotlinDataClass(
99103

100104
}
101105

102-
}
106+
}

src/main/kotlin/wu/seal/jsontokotlin/utils/SimplifiedMethods.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import com.intellij.openapi.application.ApplicationManager
88
import com.intellij.openapi.command.CommandProcessor
99
import com.intellij.openapi.project.Project
1010
import wu.seal.jsontokotlin.ConfigManager
11+
import java.lang.IllegalStateException
12+
import java.util.regex.Pattern
1113

1214
/**
1315
* File contains functions which simply other functions's invoke
@@ -50,7 +52,12 @@ fun getClassesStringList(classesString: String): List<String> {
5052
* export the class name from class block string
5153
*/
5254
fun getClassNameFromClassBlockString(classBlockString: String): String {
53-
return classBlockString.substringAfter("data class").substringBefore("(").trim()
55+
val pattern = Pattern.compile("(data )?class (?<className>[^(]+).*")
56+
val matcher = pattern.matcher(classBlockString)
57+
if (matcher.find()) {
58+
return matcher.group("className").trim()
59+
}
60+
throw IllegalStateException("cannot find class name in classBlockString: $classBlockString")
5461
}
5562

5663
fun replaceClassNameToClassBlockString(classBlockString: String, newClassName: String): String {
@@ -88,4 +95,4 @@ fun <E> List<E>.firstIndexAfterSpecificIndex(element: E, afterIndex: Int): Int {
8895

8996
fun getCommentCode(comment: String): String {
9097
return comment.replace(Regex("[\n\r]"), "")
91-
}
98+
}

src/main/kotlin/wu/seal/jsontokotlin/utils/classblockparse/NestedClassModelClassesCodeParser.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class NestedClassModelClassesCodeParser(private val nestedClassCode: String) {
3131
var backParenthesesCount = 0
3232
var backBigParenthesesCount = 0
3333
lines.forEach {
34-
if (it.startsWith("data class")) {
34+
if (it.matches("^(data )?class.+".toRegex())) {
3535
classStringBuilder.append("\n")
3636
classStringBuilder.append(it)
3737
dataclassStringCount++
@@ -58,4 +58,4 @@ class NestedClassModelClassesCodeParser(private val nestedClassCode: String) {
5858
}
5959
return classStrings
6060
}
61-
}
61+
}
Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package wu.seal.jsontokotlin.regression
22

33
import com.winterbe.expekt.should
4-
import org.junit.Before
54
import org.junit.Test
6-
import wu.seal.jsontokotlin.KotlinCodeMaker
5+
import wu.seal.jsontokotlin.KotlinDataClassCodeMaker
76
import wu.seal.jsontokotlin.test.TestConfig
87

98
/**
@@ -15,22 +14,19 @@ class Issue094Test {
1514
private val testJson = """
1615
{ "test": {} }
1716
""".trimIndent()
18-
private val expected = """
19-
data class A(
20-
@SerializedName("test") val test: Test = Test()
17+
private val expected = """data class A(
18+
@SerializedName("test")
19+
val test: Test = Test()
2120
) {
22-
2321
class Test(
2422
)
2523
}"""
2624

27-
@Before
28-
fun setUp() {
29-
TestConfig.setToTestInitState()
30-
}
31-
3225
@Test
33-
fun testIssue087() {
34-
KotlinCodeMaker("A", testJson).makeKotlinData().should.be.equal(expected)
26+
fun testIssue094() {
27+
TestConfig.setToTestInitState()
28+
val generated = KotlinDataClassCodeMaker("A", testJson).makeKotlinDataClassCode()
29+
println("generated = ${generated}")
30+
generated.should.be.equal(expected)
3531
}
3632
}

0 commit comments

Comments
 (0)