浏览代码

add: add i2School directory check

hwh97 4 年之前
父节点
当前提交
4e2a893658

+ 31 - 0
src/main/kotlin/PageCreateAction.kt

@@ -0,0 +1,31 @@
+import com.intellij.openapi.actionSystem.*
+import com.intellij.openapi.actionSystem.LangDataKeys
+import com.intellij.psi.PsiElement
+
+import constant.Constants
+import util.NotifierType
+import util.NotifierUtil
+import util.FlutterUtil
+
+
+class PageCreateAction : AnAction() {
+    override fun actionPerformed(e: AnActionEvent) {
+        val project = e.getData(PlatformDataKeys.PROJECT)!!
+        val psiElement: PsiElement? = e.getData(LangDataKeys.PSI_ELEMENT)
+        val isValidAction = FlutterUtil.isValidAction(project, psiElement)
+
+        if (isValidAction) {
+            NotifierUtil.showNotifier(
+                project, "you did a correction action congratulations!",
+                type = NotifierType.INFO,
+            )
+//            val directory = PsiDirectoryFactory.getInstance(project).createDirectory(project.projectFile!!)
+        } else {
+            NotifierUtil.showNotifier(
+                project,
+                Constants.validFailedHint,
+                type = NotifierType.ERROR
+            )
+        }
+    }
+}

+ 5 - 1
src/main/kotlin/constant/Constants.kt

@@ -2,7 +2,11 @@ package constant
 
 object Constants {
     const val title: String = "i2 code generate"
-    const val projectName: String = "i2-school-app"
+    //    const val projectName: String = "i2-school-app"
+    const val projectName: String = "example"
     const val flutterTarget: String = "pubspec.yaml"
 
+    // failed hint
+    const val validFailedHint = "1.是否为${projectName}项目<br>" +
+            "2.是否选择在lib及子文件夹下创建"
 }

+ 19 - 2
src/main/kotlin/util/FlutterUtil.kt

@@ -1,12 +1,18 @@
 package util
 
+import com.intellij.openapi.module.Module
+import com.intellij.openapi.module.ModuleUtil
 import com.intellij.openapi.project.Project
+import com.intellij.openapi.roots.ModuleRootManager
+import com.intellij.psi.PsiDirectory
+import com.intellij.psi.PsiElement
 import com.intellij.psi.search.FilenameIndex
 import com.intellij.psi.search.GlobalSearchScope
 import constant.Constants
 
 object FlutterUtil {
-    fun isTargetProject(project: Project, ): Boolean {
+    fun isValidAction(project: Project, psiElement: PsiElement?): Boolean {
+        // 检查是否为Flutter应用
         var exist = false
         for (pubspec in FilenameIndex.getFilesByName(
             project,
@@ -15,9 +21,20 @@ object FlutterUtil {
         )) {
             if (pubspec.isValid) {
                 exist = true
+                break
             }
         }
+        // 检查是否在文件夹下操作及是否在lib子目录下执行
+        var inLib = false
+        if (psiElement != null && psiElement is PsiDirectory) {
+            val module: Module? = ModuleUtil.findModuleForFile(project.projectFile!!, project)
+            val moduleRootPath = ModuleRootManager.getInstance(module!!).contentRoots[0].path
 
-        return exist && project.name == Constants.projectName
+            if (psiElement.virtualFile.path.startsWith("${moduleRootPath}/lib")) {
+                inLib = true
+            }
+        }
+
+        return exist && project.name == Constants.projectName && inLib
     }
 }

+ 13 - 12
src/main/kotlin/util/NotifierUtil.kt

@@ -1,3 +1,5 @@
+package util
+
 import com.intellij.notification.NotificationType
 import com.intellij.openapi.project.Project
 import com.intellij.notification.NotificationDisplayType
@@ -5,23 +7,18 @@ import com.intellij.notification.NotificationDisplayType
 import com.intellij.notification.NotificationGroup
 import constant.Constants
 
-
-enum class NotifierType {
-    INFO, WARM, ERROR
-}
-
 object NotifierUtil {
     private val NOTIFICATION_GROUP =
-            NotificationGroup("Custom Notification Group", NotificationDisplayType.BALLOON, true)
+        NotificationGroup("Custom Notification Group", NotificationDisplayType.BALLOON, true)
 
     fun showNotifier(
-            project: Project,
-            content: String,
-            title: String = Constants.title,
-            type: NotifierType = NotifierType.INFO
+        project: Project,
+        content: String,
+        title: String? = null,
+        type: NotifierType = NotifierType.INFO
     ) = NOTIFICATION_GROUP
-            .createNotification(title, content, getNotifierByType(type))
-            .notify(project);
+        .createNotification(title.let { "${Constants.title} ${type.name}" }, content, getNotifierByType(type))
+        .notify(project);
 
     private fun getNotifierByType(type: NotifierType): NotificationType {
         return when (type) {
@@ -30,4 +27,8 @@ object NotifierUtil {
             NotifierType.ERROR -> NotificationType.ERROR
         }
     }
+}
+
+enum class NotifierType {
+    INFO, WARM, ERROR
 }

+ 10 - 4
src/main/resources/META-INF/plugin.xml

@@ -21,10 +21,16 @@
 
     <actions>
         <!-- Add your actions here -->
-        <action id="i2school.generate.route" class="RouterGenerateAction" text="GenerateRouter"
-                description="auto generate router">
-            <add-to-group group-id="BuildMenu" anchor="first"/>
-            <keyboard-shortcut keymap="$default" first-keystroke="alt R"/>
+<!--        <action id="i2school.generate.route" class="RouterGenerateAction" text="GenerateRouter"-->
+<!--                description="auto generate router">-->
+<!--            <add-to-group group-id="BuildMenu" anchor="first"/>-->
+<!--            <keyboard-shortcut keymap="$default" first-keystroke="alt R"/>-->
+<!--        </action>-->
+        <group id="i2 code generate" text="i2 code generate" popup="true">
+            <add-to-group group-id="ProjectViewPopupMenu" anchor="first"/>
+        </group>
+        <action id="i2 page create" class="PageCreateAction" text="i2 page create">
+            <add-to-group group-id="i2 code generate" anchor="first"/>
         </action>
     </actions>
 </idea-plugin>