Skip to content

Commit da2065d

Browse files
author
dengzi
committed
add template
1 parent 40cdc41 commit da2065d

15 files changed

Lines changed: 374 additions & 44 deletions

resources/META-INF/plugin.xml

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,13 @@
1313
]]>
1414
</change-notes>
1515

16-
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
17-
<idea-version since-build="173.0"/>
16+
<idea-version since-build="182.711"/>
1817

19-
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
20-
on how to target different products -->
21-
<!-- uncomment to enable plugin in all products
22-
<depends>com.intellij.modules.lang</depends>
23-
-->
18+
<depends>com.intellij.java</depends>
2419

2520
<extensions defaultExtensionNs="com.intellij">
26-
<!-- Add your extensions here -->
21+
<fileTemplateGroup implementation="com.dengzii.plugin.auc.template.FileTemplateFactory" order="first"/>
22+
<internalFileTemplate name="AndroidManifest" id="com.dengzii.plugin.auc.ft.manifest"/>
2723
</extensions>
2824

2925
<actions>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
package="${PACKAGE_NAME}">
4+
5+
<application
6+
android:name="${PACKAGE_NAME}.App"
7+
android:allowBackup="false"
8+
android:icon="@mipmap/ic_launcher"
9+
android:label="@string/app_name"
10+
android:theme="@style/AppTheme">
11+
<activity android:name="${PACKAGE_NAME}.MainActivity">
12+
<intent-filter>
13+
<action android:name="android.intent.action.VIEW" />
14+
<action android:name="android.intent.action.MAIN" />
15+
16+
<category android:name="android.intent.category.LAUNCHER" />
17+
</intent-filter>
18+
</activity>
19+
</application>
20+
21+
</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 Android Manifest File
4+
</body>
5+
</html>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
${PACKAGE_NAME}
2+
3+
import ${BASE_APPLICATION}
4+
5+
public class App extends BaseApplication{
6+
7+
public void onCreate(){
8+
9+
}
10+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<html>
2+
<body>
3+
Auc Application File
4+
</body>
5+
</html>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class AucFrameGenAction : AnAction() {
1616
override fun actionPerformed(e: AnActionEvent) {
1717
val kit = PluginKit.get(e)
1818
if (!kit.isProjectValid()) {
19+
Logger.d(AucFrameGenAction::class.java.simpleName, "Project is not valid.")
1920
return
2021
}
2122
FileWriteCommand.startAction(kit)

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

Lines changed: 0 additions & 27 deletions
This file was deleted.
Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.dengzii.plugin.auc
22

3+
import com.dengzii.plugin.auc.template.AucTemplate
4+
import com.intellij.openapi.command.UndoConfirmationPolicy
35
import com.intellij.openapi.command.WriteCommandAction
6+
import com.intellij.openapi.vfs.VirtualFile
47
import com.intellij.util.ThrowableRunnable
58

69
/**
@@ -12,26 +15,43 @@ import com.intellij.util.ThrowableRunnable
1215
* desc :
1316
* </pre>
1417
*/
15-
class FileWriteCommand(private var kit: PluginKit) : ThrowableRunnable<RuntimeException> {
18+
class FileWriteCommand(private var kit: PluginKit) : ThrowableRunnable<Exception> {
1619

1720
companion object {
21+
private val TAG = FileWriteCommand::class.java.simpleName
1822
fun startAction(kit: PluginKit) {
19-
WriteCommandAction.writeCommandAction(kit.project).run(FileWriteCommand(kit))
23+
WriteCommandAction.writeCommandAction(kit.project)
24+
.withGlobalUndo()
25+
.withUndoConfirmationPolicy(UndoConfirmationPolicy.REQUEST_CONFIRMATION)
26+
.run(FileWriteCommand(kit))
2027
}
2128
}
2229

2330
override fun run() {
2431

2532
val current = kit.getVirtualFile() ?: return
2633
if (!current.isDirectory) {
34+
Logger.i(TAG, "Current target is not directory.")
2735
return
2836
}
29-
AucTemplate.APP.forEach {
30-
if (it.isDir) {
31-
kit.createDir(it.getPath())
32-
} else {
33-
kit.createFile(it.getPath())
37+
AucTemplate.APP.children.forEach {
38+
createFileTree(it, current)
39+
}
40+
}
41+
42+
private fun createFileTree(treeNode: FileTreeNode, current: VirtualFile?) {
43+
if (current == null) {
44+
Logger.e(TAG, "The parent of ${treeNode.getPath()} is null")
45+
return
46+
}
47+
Logger.i(TAG, "Create ${treeNode.getPath()}")
48+
if (treeNode.isDir) {
49+
kit.createDir(treeNode.name, current)
50+
treeNode.children.forEach {
51+
createFileTree(it, current.findChild(treeNode.name))
3452
}
53+
} else {
54+
kit.createFile(treeNode.name, current)
3555
}
3656
}
3757
}

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

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

3+
import com.intellij.debugger.requests.Requestor
34
import com.intellij.openapi.actionSystem.AnActionEvent
45
import com.intellij.openapi.actionSystem.PlatformDataKeys
56
import com.intellij.openapi.module.Module
@@ -45,14 +46,14 @@ class PluginKit private constructor(e: AnActionEvent) {
4546
}
4647

4748
fun createDir(name: String, vf: VirtualFile? = getVirtualFile()) {
48-
if (checkCreateFile(name, vf)) {
49+
if (!checkCreateFile(name, vf)) {
4950
return
5051
}
5152
vf!!.createChildDirectory(null, name)
5253
}
5354

5455
fun createFile(name: String, vf: VirtualFile? = getVirtualFile()) {
55-
if (checkCreateFile(name, vf)) {
56+
if (!checkCreateFile(name, vf)) {
5657
return
5758
}
5859
vf!!.createChildData(null, name)
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
@file:Suppress("unused", "SpellCheckingInspection")
2+
3+
package com.dengzii.plugin.auc.template
4+
5+
import com.dengzii.plugin.auc.FileTreeNode
6+
7+
/**
8+
* <pre>
9+
* author : dengzi
10+
* e-mail : denua@foxmail.com
11+
* github : https://github.com/MrDenua
12+
* time : 2020/1/2
13+
* desc :
14+
* </pre>
15+
*/
16+
class FileNode(parent: FileTreeNode?, name: String) : FileTreeNode(parent, name, false)
17+
18+
typealias AucFrame = FileTreeNode
19+
20+
typealias ChildNodeBlock = (parent: Node) -> Unit
21+
22+
typealias Node = FileTreeNode
23+
24+
val Node.test: Node get() = dirNode("test")
25+
val Node.main: Node get() = dirNode("main")
26+
val Node.java: Node get() = dirNode("java")
27+
val Node.src: Node get() = dirNode("src")
28+
val Node.res: Node get() = dirNode("res")
29+
val Node.app: Node get() = dirNode("app")
30+
val Node.pkg_name: Node get() = dirNode(Placeholder.PACKAGE_NAME.getPlaceholder())
31+
val Node.layout: Node get() = dirNode("layout")
32+
val Node.values: Node get() = dirNode("values")
33+
val Node.drawable: Node get() = dirNode("drawable")
34+
val Node.mipmap: Node get() = dirNode("mipmap")
35+
36+
val Node.AndroidManifest: FileNode get() = fileNode("MainActivity")
37+
val Node.proguard_rules: FileNode get() = fileNode("proguard-rules")
38+
val Node.gitignore: FileNode get() = fileNode(".gitignore")
39+
val Node.build: FileNode get() = fileNode("build")
40+
val Node.App: FileNode get() = fileNode("App")
41+
42+
val FileNode.gradle: Unit get() = nodeSuffix(".gradle")
43+
val FileNode.java: Unit get() = nodeSuffix(".java")
44+
val FileNode.pro: Unit get() = nodeSuffix(".pro")
45+
val FileNode.xml: Unit get() = nodeSuffix(".xml")
46+
val FileNode.kt: Unit get() = nodeSuffix(".kt")
47+
48+
private fun Node.dirNode(name: String): Node {
49+
val dirNode = Node(this, name, true)
50+
this.children.add(dirNode)
51+
return dirNode
52+
}
53+
54+
private fun Node.fileNode(name: String): FileNode {
55+
val node = FileNode(this, name)
56+
children.add(node)
57+
return node
58+
}
59+
60+
private fun FileNode.nodeSuffix(suffix: String) {
61+
this.name = this.name + suffix
62+
}

0 commit comments

Comments
 (0)