Skip to content

Commit 2217b71

Browse files
committed
completion create module, template, UI
1 parent da2065d commit 2217b71

16 files changed

Lines changed: 474 additions & 153 deletions

resources/META-INF/plugin.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515

1616
<idea-version since-build="182.711"/>
1717

18-
<depends>com.intellij.java</depends>
18+
<depends>com.intellij.modules.java</depends>
19+
<depends>org.jetbrains.kotlin</depends>
1920

2021
<extensions defaultExtensionNs="com.intellij">
2122
<fileTemplateGroup implementation="com.dengzii.plugin.auc.template.FileTemplateFactory" order="first"/>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2+
package="${PACKAGE_NAME}.${MODULE_NAME}.pkg">
3+
4+
<application>
5+
<!-- <activity
6+
<!-- android:name=".main.MainActivity"
7+
<!-- android:configChanges="orientation|keyboardHidden|screenSize"
8+
<!-- android:screenOrientation="user"
9+
<!-- android:windowSoftInputMode="stateHidden" />
10+
</application>
11+
12+
13+
</manifest>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<html>
2+
<body>
3+
Auc Pkg manifest File
4+
</body>
5+
</html>

src/com/dengzii/plugin/auc/AucFrameGenAction.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.dengzii.plugin.auc
22

3+
import com.dengzii.plugin.auc.ui.CreateModuleDialog
4+
import com.dengzii.plugin.auc.utils.Logger
5+
import com.dengzii.plugin.auc.utils.PluginKit
36
import com.intellij.openapi.actionSystem.AnAction
47
import com.intellij.openapi.actionSystem.AnActionEvent
58

@@ -19,7 +22,9 @@ class AucFrameGenAction : AnAction() {
1922
Logger.d(AucFrameGenAction::class.java.simpleName, "Project is not valid.")
2023
return
2124
}
22-
FileWriteCommand.startAction(kit)
25+
CreateModuleDialog.createAndShow {
26+
FileWriteCommand.startAction(kit, it)
27+
}
2328
}
2429

2530
}

src/com/dengzii/plugin/auc/FileWriteCommand.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package com.dengzii.plugin.auc
22

3+
import com.dengzii.plugin.auc.model.FileTreeNode
4+
import com.dengzii.plugin.auc.model.ModuleConfig
35
import com.dengzii.plugin.auc.template.AucTemplate
6+
import com.dengzii.plugin.auc.template.Placeholder
7+
import com.dengzii.plugin.auc.utils.Logger
8+
import com.dengzii.plugin.auc.utils.PluginKit
49
import com.intellij.openapi.command.UndoConfirmationPolicy
510
import com.intellij.openapi.command.WriteCommandAction
611
import com.intellij.openapi.vfs.VirtualFile
@@ -15,15 +20,15 @@ import com.intellij.util.ThrowableRunnable
1520
* desc :
1621
* </pre>
1722
*/
18-
class FileWriteCommand(private var kit: PluginKit) : ThrowableRunnable<Exception> {
23+
class FileWriteCommand(private var kit: PluginKit, private var moduleConfig: ModuleConfig) : ThrowableRunnable<Exception> {
1924

2025
companion object {
2126
private val TAG = FileWriteCommand::class.java.simpleName
22-
fun startAction(kit: PluginKit) {
27+
fun startAction(kit: PluginKit, moduleConfig: ModuleConfig) {
2328
WriteCommandAction.writeCommandAction(kit.project)
2429
.withGlobalUndo()
2530
.withUndoConfirmationPolicy(UndoConfirmationPolicy.REQUEST_CONFIRMATION)
26-
.run(FileWriteCommand(kit))
31+
.run(FileWriteCommand(kit, moduleConfig))
2732
}
2833
}
2934

@@ -34,7 +39,15 @@ class FileWriteCommand(private var kit: PluginKit) : ThrowableRunnable<Exception
3439
Logger.i(TAG, "Current target is not directory.")
3540
return
3641
}
37-
AucTemplate.APP.children.forEach {
42+
val app = moduleConfig.template
43+
if (app.placeHolderMap == null) {
44+
app.placeHolderMap = AucTemplate.DEFAULT_PLACEHOLDER.toMutableMap()
45+
}
46+
app.placeHolderMap?.set(Placeholder.PACKAGE_NAME, moduleConfig.packageName)
47+
app.placeHolderMap?.set(Placeholder.MODULE_NAME, moduleConfig.name)
48+
49+
Logger.d(TAG, app.placeHolderMap.toString())
50+
app.children.forEach {
3851
createFileTree(it, current)
3952
}
4053
}

src/com/dengzii/plugin/auc/FileTreeNode.kt renamed to src/com/dengzii/plugin/auc/model/FileTreeNode.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.dengzii.plugin.auc
1+
package com.dengzii.plugin.auc.model
22

3-
import com.dengzii.plugin.auc.template.AucTemplate
3+
import com.dengzii.plugin.auc.utils.Logger
44
import com.dengzii.plugin.auc.template.Placeholder
55
import com.dengzii.plugin.auc.template.replacePlaceholder
66
import java.io.File
@@ -105,7 +105,10 @@ open class FileTreeNode private constructor() {
105105
*/
106106
fun include(other: FileTreeNode) {
107107
if (!isDir) return
108-
children.addAll(other.children)
108+
other.children.forEach {
109+
it.parent = this
110+
children.add(it)
111+
}
109112
}
110113

111114
fun dir(name: String, block: FileTreeNode.() -> Unit = {}) {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.dengzii.plugin.auc.model
2+
3+
import com.dengzii.plugin.auc.template.AucFrame
4+
5+
data class ModuleConfig(
6+
var template: AucFrame,
7+
var name: String,
8+
var packageName: String,
9+
var language: String
10+
)

src/com/dengzii/plugin/auc/template/AucFrameTempExtensions.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
package com.dengzii.plugin.auc.template
44

5-
import com.dengzii.plugin.auc.FileTreeNode
5+
import com.dengzii.plugin.auc.model.FileTreeNode
66

77
/**
88
* <pre>
@@ -27,7 +27,10 @@ val Node.java: Node get() = dirNode("java")
2727
val Node.src: Node get() = dirNode("src")
2828
val Node.res: Node get() = dirNode("res")
2929
val Node.app: Node get() = dirNode("app")
30+
val Node.pkg: Node get() = dirNode("pkg")
31+
val Node.export: Node get() = dirNode("export")
3032
val Node.pkg_name: Node get() = dirNode(Placeholder.PACKAGE_NAME.getPlaceholder())
33+
val Node.module_name: Node get() = dirNode(Placeholder.MODULE_NAME.getPlaceholder())
3134
val Node.layout: Node get() = dirNode("layout")
3235
val Node.values: Node get() = dirNode("values")
3336
val Node.drawable: Node get() = dirNode("drawable")
@@ -37,7 +40,7 @@ val Node.AndroidManifest: FileNode get() = fileNode("MainActivity")
3740
val Node.proguard_rules: FileNode get() = fileNode("proguard-rules")
3841
val Node.gitignore: FileNode get() = fileNode(".gitignore")
3942
val Node.build: FileNode get() = fileNode("build")
40-
val Node.App: FileNode get() = fileNode("App")
43+
val Node.app_name: FileNode get() = fileNode(Placeholder.APPLICATION_NAME.getPlaceholder())
4144

4245
val FileNode.gradle: Unit get() = nodeSuffix(".gradle")
4346
val FileNode.java: Unit get() = nodeSuffix(".java")

src/com/dengzii/plugin/auc/template/AucTemplate.kt

Lines changed: 77 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,43 @@ package com.dengzii.plugin.auc.template
99
* desc :
1010
</pre> */
1111

12+
fun main() {
13+
AucTemplate.MODULE.traversal({ i, d ->
14+
println(i.getPath())
15+
})
16+
}
17+
1218
object AucTemplate {
1319

20+
private val res = AucFrame {
21+
res {
22+
drawable {}
23+
layout {}
24+
values {}
25+
}
26+
}
27+
28+
val DEFAULT_PLACEHOLDER = mapOf(
29+
Pair(Placeholder.APPLICATION_NAME, "App"),
30+
Pair(Placeholder.MODULE_NAME, "module"),
31+
Pair(Placeholder.PACKAGE_NAME, "com.example.app"),
32+
Pair(Placeholder.PROJECT_NAME, "Example")
33+
)
34+
1435
val APP = AucFrame {
1536
app {
1637
src {
1738
main {
1839
java {
1940
pkg_name {
20-
App.java
41+
module_name {
42+
app {
43+
app_name.java
44+
}
45+
}
2146
}
2247
}
23-
res {
24-
drawable {}
25-
layout {}
26-
values {}
27-
}
48+
include(res)
2849
AndroidManifest.xml
2950
}
3051
test {}
@@ -34,4 +55,54 @@ object AucTemplate {
3455
proguard_rules.pro
3556
}
3657
}
58+
59+
val PKG = AucFrame {
60+
pkg {
61+
src {
62+
main {
63+
java {
64+
pkg_name {
65+
module_name {
66+
pkg {
67+
main {}
68+
file("\${MODULE_NAME}ApiImpl.java")
69+
}
70+
71+
}
72+
}
73+
}
74+
include(res)
75+
AndroidManifest.xml
76+
}
77+
}
78+
gitignore
79+
build.gradle
80+
proguard_rules.pro
81+
}
82+
}
83+
84+
val EXPORT = AucFrame {
85+
export {
86+
src { main {
87+
java { pkg_name { module_name { export {
88+
dir("api") {
89+
file("\${MODULE_NAME}Api.java")
90+
}
91+
dir("bean")
92+
} } } }
93+
AndroidManifest.xml
94+
} }
95+
gitignore
96+
build.gradle
97+
proguard_rules.pro
98+
}
99+
}
100+
101+
val MODULE = AucFrame {
102+
module_name {
103+
include(APP)
104+
include(PKG)
105+
include(EXPORT)
106+
}
107+
}
37108
}

src/com/dengzii/plugin/auc/template/Placeholder.kt

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.dengzii.plugin.auc.template
22

3+
import com.dengzii.plugin.auc.utils.Logger
4+
35
/**
46
* <pre>
57
* author : dengzi
@@ -12,11 +14,21 @@ package com.dengzii.plugin.auc.template
1214

1315
enum class Placeholder {
1416

15-
PACKAGE_NAME, CLASS_NAME, FILE_NAME, PROJECT_NAME, BASE_APPLICATION;
17+
MODULE_NAME,
18+
PACKAGE_NAME,
19+
CLASS_NAME,
20+
FILE_NAME,
21+
APPLICATION_NAME,
22+
PROJECT_NAME,
23+
BASE_APPLICATION;
1624

1725
fun getPlaceholder(): String {
1826
return "\${$name}"
1927
}
28+
29+
override fun toString(): String {
30+
return name
31+
}
2032
}
2133

2234
fun String.findPlaceholder(): List<Placeholder> {
@@ -30,11 +42,15 @@ fun String.findPlaceholder(): List<Placeholder> {
3042
}
3143

3244
fun String.replacePlaceholder(placeholders: Map<Placeholder, String>?): String {
45+
var after = this
3346
if (placeholders.isNullOrEmpty()) {
3447
return this
3548
}
3649
placeholders.forEach { (k, v) ->
37-
replace(k.getPlaceholder(), v, true)
50+
after = after.replace(k.getPlaceholder(), v)
51+
}
52+
if (this != after) {
53+
Logger.d("String.replacePlaceholder", "before: $this => after: $after")
3854
}
39-
return this
55+
return after
4056
}

0 commit comments

Comments
 (0)