From 9902bc672a2665f82b8521e855c311243255b7e9 Mon Sep 17 00:00:00 2001 From: Seal Date: Sun, 23 Dec 2018 22:17:32 +0800 Subject: [PATCH 1/2] Fix bug #83 (cherry picked from commit 79b22d7eeb4cb333899bd85e32cb3d6b416b497b) --- .../wu/seal/jsontokotlin/ImportClassWriter.kt | 16 ++++++++++++---- .../seal/jsontokotlin/MakeKotlinClassAction.kt | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/wu/seal/jsontokotlin/ImportClassWriter.kt b/src/main/kotlin/wu/seal/jsontokotlin/ImportClassWriter.kt index f214a705..9a0a0786 100644 --- a/src/main/kotlin/wu/seal/jsontokotlin/ImportClassWriter.kt +++ b/src/main/kotlin/wu/seal/jsontokotlin/ImportClassWriter.kt @@ -78,11 +78,19 @@ object ImportClassWriter : IImportClassWriter { if (importClassLineString !in text) { - val packageIndex = text.indexOf("package ") - val importIndex = Math.max(text.lastIndexOf("import"), packageIndex) + val packageIndex = try { + "^[\\s]*package".toRegex(RegexOption.MULTILINE).find(text)!!.range.endInclusive + } catch (e: Exception) { + -1 + } + val lastImportKeywordIndex = try { + "^[\\s]*import".toRegex(RegexOption.MULTILINE).findAll(text).last().range.endInclusive + } catch (e: Exception) { + -1 + } + val index = Math.max(lastImportKeywordIndex, packageIndex) val insertIndex = - if (importIndex == -1) 0 else editFile.getLineEndOffset(editFile.getLineNumber(importIndex)) - + if (index == -1) 0 else editFile.getLineEndOffset(editFile.getLineNumber(index)) executeCouldRollBackAction(project) { editFile.insertString(insertIndex, "\n" + importClassLineString + "\n") diff --git a/src/main/kotlin/wu/seal/jsontokotlin/MakeKotlinClassAction.kt b/src/main/kotlin/wu/seal/jsontokotlin/MakeKotlinClassAction.kt index 8eb3846f..cec249fa 100644 --- a/src/main/kotlin/wu/seal/jsontokotlin/MakeKotlinClassAction.kt +++ b/src/main/kotlin/wu/seal/jsontokotlin/MakeKotlinClassAction.kt @@ -16,6 +16,7 @@ import wu.seal.jsontokotlin.feedback.sendActionInfo import wu.seal.jsontokotlin.ui.JsonInputDialog import wu.seal.jsontokotlin.utils.ClassCodeFilter import wu.seal.jsontokotlin.utils.executeCouldRollBackAction +import java.awt.SystemColor.text import java.net.URL import java.util.* @@ -144,6 +145,23 @@ class MakeKotlinClassAction : AnAction("MakeKotlinClass") { if (offset == 0) { offset = document.textLength } + val lastPackageKeywordLineEndIndex = try { + "^[\\s]*package.+\n$".toRegex(RegexOption.MULTILINE).findAll(document.text).last().range.endInclusive + } catch (e: Exception) { + -1 + } + val lastImportKeywordLineEndIndex = try { + "^[\\s]*import.+\n$".toRegex(RegexOption.MULTILINE).findAll(document.text).last().range.endInclusive + } catch (e: Exception) { + -1 + } + if (offset < lastPackageKeywordLineEndIndex) { + offset = lastPackageKeywordLineEndIndex + 1 + } + if (offset < lastImportKeywordLineEndIndex) { + offset = lastImportKeywordLineEndIndex + 1 + } + } else { offset = document.textLength } From 649d98b059b8024ccf5b002a4880b85230e94d35 Mon Sep 17 00:00:00 2001 From: Seal Date: Sun, 23 Dec 2018 23:28:08 +0800 Subject: [PATCH 2/2] remove unused import add space into regex for `package and import declaration` matcher --- src/main/kotlin/wu/seal/jsontokotlin/ImportClassWriter.kt | 4 ++-- .../kotlin/wu/seal/jsontokotlin/MakeKotlinClassAction.kt | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/wu/seal/jsontokotlin/ImportClassWriter.kt b/src/main/kotlin/wu/seal/jsontokotlin/ImportClassWriter.kt index 9a0a0786..6538bdff 100644 --- a/src/main/kotlin/wu/seal/jsontokotlin/ImportClassWriter.kt +++ b/src/main/kotlin/wu/seal/jsontokotlin/ImportClassWriter.kt @@ -79,12 +79,12 @@ object ImportClassWriter : IImportClassWriter { if (importClassLineString !in text) { val packageIndex = try { - "^[\\s]*package".toRegex(RegexOption.MULTILINE).find(text)!!.range.endInclusive + "^[\\s]*package\\s.+\n$".toRegex(RegexOption.MULTILINE).find(text)!!.range.endInclusive } catch (e: Exception) { -1 } val lastImportKeywordIndex = try { - "^[\\s]*import".toRegex(RegexOption.MULTILINE).findAll(text).last().range.endInclusive + "^[\\s]*import\\s.+\n$".toRegex(RegexOption.MULTILINE).findAll(text).last().range.endInclusive } catch (e: Exception) { -1 } diff --git a/src/main/kotlin/wu/seal/jsontokotlin/MakeKotlinClassAction.kt b/src/main/kotlin/wu/seal/jsontokotlin/MakeKotlinClassAction.kt index cec249fa..f74598fa 100644 --- a/src/main/kotlin/wu/seal/jsontokotlin/MakeKotlinClassAction.kt +++ b/src/main/kotlin/wu/seal/jsontokotlin/MakeKotlinClassAction.kt @@ -16,7 +16,6 @@ import wu.seal.jsontokotlin.feedback.sendActionInfo import wu.seal.jsontokotlin.ui.JsonInputDialog import wu.seal.jsontokotlin.utils.ClassCodeFilter import wu.seal.jsontokotlin.utils.executeCouldRollBackAction -import java.awt.SystemColor.text import java.net.URL import java.util.* @@ -146,12 +145,12 @@ class MakeKotlinClassAction : AnAction("MakeKotlinClass") { offset = document.textLength } val lastPackageKeywordLineEndIndex = try { - "^[\\s]*package.+\n$".toRegex(RegexOption.MULTILINE).findAll(document.text).last().range.endInclusive + "^[\\s]*package\\s.+\n$".toRegex(RegexOption.MULTILINE).findAll(document.text).last().range.endInclusive } catch (e: Exception) { -1 } val lastImportKeywordLineEndIndex = try { - "^[\\s]*import.+\n$".toRegex(RegexOption.MULTILINE).findAll(document.text).last().range.endInclusive + "^[\\s]*import\\s.+\n$".toRegex(RegexOption.MULTILINE).findAll(document.text).last().range.endInclusive } catch (e: Exception) { -1 }