diff --git a/.DS_Store b/.DS_Store
index 9cd4c22..9e0ce96 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/.gitignore b/.gitignore
index 35b7961..0996604 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,8 @@
.DS_Store
.idea/
out/
+*.iml
+build/
+.gradle/
+*.hprof
+
diff --git a/RestfulToolkit.iml b/RestfulToolkit.iml
index d7f73ce..78b2cc5 100644
--- a/RestfulToolkit.iml
+++ b/RestfulToolkit.iml
@@ -1,18 +1,2 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..fd861a5
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,62 @@
+plugins {
+ id 'java'
+ id "org.jetbrains.kotlin.jvm" version "1.3.72"
+ id 'org.jetbrains.intellij' version '0.4.14' //引入intellij的gradle插件
+}
+
+group 'com.zhaow.restful.toolkit'
+version '3.0.0' //定义jar包/zip包的版本号
+ext.kotlin_version = '1.3.72'
+
+sourceCompatibility = 1.8 // 限制jdk的使用版本号,这里限制到8,表示生成的idea插件只能运行在jdk8以上的环境中
+
+repositories {
+ maven {
+ url 'https://maven.aliyun.com/nexus/content/groups/public/'
+ }
+
+ maven {
+ url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'
+ }
+ maven {
+ url "https://plugins.gradle.org/m2/"
+ }
+ mavenCentral()
+}
+
+dependencies {
+ //这里引别的依赖包
+ implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
+ testImplementation 'junit:junit:4.12'
+ testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
+ //testCompile group: 'junit', name: 'junit', version: '4.12'
+}
+
+// See https://github.com/JetBrains/gradle-intellij-plugin/
+intellij {
+ // 这里是指打插件包的时候用idea什么版本的依赖包打
+ // 比如这里用2019.3打包,如果你的插件实现源码里用了2019.3不存在的依赖包或类,就会报错
+ // 一般就填当前IDEA的版本号即可
+ //version "2019.3" // 2019.3
+ type = 'IU' // 'IU' IntelliJ IDEA Ultimate Edition,默认值为 'IC' IntelliJ IDEA Community Edition
+ pluginName = 'WebDT' // 插件名,Web Development Toolkit
+ //localPath = '/Users/aborn/software/ideaIC-2020.1' // IC 版本 2020.1
+ localPath = '/Applications/IntelliJ IDEA.app' // 本地的 ieda路径 (与version属性互斥),这个为2020.1版本
+ //localPath = '/Applications/IntelliJ IDEA 2.app' // 2019.3版本
+ //downloadSources = false
+ plugins = ['java', 'Kotlin']
+}
+
+//patchPluginXml {
+
+ //changeNotes里的内容展示位置参考图14
+ //changeNotes """
+ // 1.0版本.
+
+ // 第1.0版本:初始化这个测试插件项目"""
+
+ // 这个意思是说当前定义的这个插件最早支持到什么版本的IDEA
+ // 这里配置sinceBuild=191,表示插件只能被版本号大于等于2019.1版本的IDEA安装,低于这个版本的将抛无法兼容的错误
+ // ↑上方参考这篇问答:https://intellij-support.jetbrains.com/hc/en-us/community/posts/360003338799-Build-compatible-plugin
+ // sinceBuild "192.5728.98" // 原 191
+//}
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..62d4c05
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..4ef311f
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Wed Jun 10 22:05:09 CST 2020
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-all.zip
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStorePath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..fbd7c51
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,185 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..a9f778a
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,104 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..92f1c8a
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,10 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ *
+ * The settings file is used to specify which projects to include in your build.
+ *
+ * Detailed information about configuring a multi-project build in Gradle can be found
+ * in the user manual at https://docs.gradle.org/6.4.1/userguide/multi_project_builds.html
+ */
+
+rootProject.name = 'RestfulToolkit'
diff --git a/src/java/com/zhaow/restful/common/IntellijUtils.java b/src/java/com/zhaow/restful/common/IntellijUtils.java
deleted file mode 100644
index 5b6f0db..0000000
--- a/src/java/com/zhaow/restful/common/IntellijUtils.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.zhaow.restful.common;
-
-
-public class IntellijUtils {
-
-}
diff --git a/src/java/com/zhaow/restful/common/ServiceHelper.java b/src/java/com/zhaow/restful/common/ServiceHelper.java
deleted file mode 100644
index 2195d27..0000000
--- a/src/java/com/zhaow/restful/common/ServiceHelper.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.zhaow.restful.common;
-
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleManager;
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.PsiMethod;
-import com.zhaow.restful.common.resolver.JaxrsResolver;
-import com.zhaow.restful.common.resolver.ServiceResolver;
-import com.zhaow.restful.common.resolver.SpringResolver;
-import com.zhaow.restful.navigation.action.RestServiceItem;
-import com.zhaow.restful.navigator.RestServiceProject;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 服务相关工具类
- */
-public class ServiceHelper {
- public static final Logger LOG = Logger.getInstance(ServiceHelper.class);
- PsiMethod psiMethod;
-
- public ServiceHelper(PsiMethod psiMethod) {
- this.psiMethod = psiMethod;
- }
-
- public static List buildRestServiceProjectListUsingResolver(Project project) {
-// System.out.println("buildRestServiceProjectList");
- List serviceProjectList = new ArrayList<>();
-
- Module[] modules = ModuleManager.getInstance(project).getModules();
- for (Module module : modules) {
- List restServices = buildRestServiceItemListUsingResolver(module);
- if (restServices.size() > 0) {
- serviceProjectList.add(new RestServiceProject(module, restServices));
- }
- }
-
- return serviceProjectList;
- }
-
- public static List buildRestServiceItemListUsingResolver(Module module) {
-
- List itemList = new ArrayList<>();
-
- SpringResolver springResolver = new SpringResolver(module);
- JaxrsResolver jaxrsResolver = new JaxrsResolver(module);
- ServiceResolver[] resolvers = {springResolver,jaxrsResolver};
-
- for (ServiceResolver resolver : resolvers) {
- List allSupportedServiceItemsInModule = resolver.findAllSupportedServiceItemsInModule();
-
- itemList.addAll(allSupportedServiceItemsInModule);
- }
-
- return itemList;
- }
-
- @NotNull
- public static List buildRestServiceItemListUsingResolver(Project project) {
- List itemList = new ArrayList<>();
-
- SpringResolver springResolver = new SpringResolver(project);
- JaxrsResolver jaxrsResolver = new JaxrsResolver(project);
-
- ServiceResolver[] resolvers = {springResolver,jaxrsResolver};
- for (ServiceResolver resolver : resolvers) {
- List allSupportedServiceItemsInProject = resolver.findAllSupportedServiceItemsInProject();
-
- itemList.addAll(allSupportedServiceItemsInProject);
- }
-
- return itemList;
- }
-}
diff --git a/src/java/com/zhaow/restful/common/resolver/BaseServiceResolver.java b/src/java/com/zhaow/restful/common/resolver/BaseServiceResolver.java
deleted file mode 100644
index 13a7105..0000000
--- a/src/java/com/zhaow/restful/common/resolver/BaseServiceResolver.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.zhaow.restful.common.resolver;
-
-
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.search.GlobalSearchScope;
-import com.zhaow.restful.method.RequestPath;
-import com.zhaow.restful.navigation.action.RestServiceItem;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public abstract class BaseServiceResolver implements ServiceResolver{
- Module myModule;
- Project myProject;
-
- @Override
- public List findAllSupportedServiceItemsInModule() {
- List itemList = new ArrayList<>();
- if (myModule == null) {
- return itemList;
- }
-
- GlobalSearchScope globalSearchScope = GlobalSearchScope.moduleScope(myModule);
-/*
-
- List psiMethodList = this.getServicePsiMethodList(myModule.getProject(), globalSearchScope);
-
- // 尴尬了,PsiMethod 不能直接获取到 Module,暂时通过传参的方式
- psiMethodList.forEach(psiMethod -> {
- List serviceItemList = getServiceItemList(psiMethod);
- itemList.addAll(serviceItemList);
- });
-*/
-
- itemList = getRestServiceItemList(myModule.getProject(), globalSearchScope);
- return itemList;
- }
-
-
- public abstract List getRestServiceItemList(Project project, GlobalSearchScope globalSearchScope) ;
-
- @Override
- public List findAllSupportedServiceItemsInProject() {
- List itemList = null;
- if(myProject == null && myModule != null){
- myProject = myModule.getProject();
- }
-
- if (myProject == null) {
- return new ArrayList<>();
- }
-
- GlobalSearchScope globalSearchScope = GlobalSearchScope.projectScope(myProject);
-
-/* List psiMethodList = this.getServicePsiMethodList(myProject, globalSearchScope);
-
- for (PsiMethod psiMethod : psiMethodList) {
- List singleMethodServices = getServiceItemList(psiMethod);
-
- itemList.addAll(singleMethodServices);
-
- }*/
-
- itemList = getRestServiceItemList(myProject, globalSearchScope);
-
- return itemList;
-
- }
-
- @NotNull
- protected RestServiceItem createRestServiceItem(PsiElement psiMethod, String classUriPath, RequestPath requestMapping) {
- if (!classUriPath.startsWith("/")) classUriPath = "/".concat(classUriPath);
- if (!classUriPath.endsWith("/")) classUriPath = classUriPath.concat("/");
-
- String methodPath = requestMapping.getPath();
-
- if (methodPath.startsWith("/")) methodPath = methodPath.substring(1, methodPath.length());
- String requestPath = classUriPath + methodPath;
-
- RestServiceItem item = new RestServiceItem(psiMethod, requestMapping.getMethod(), requestPath);
- if (myModule != null) {
- item.setModule(myModule);
- }
- return item;
- }
-
-/*
- protected abstract List getServiceItemList(PsiMethod psiMethod);
-
- protected abstract List getServicePsiMethodList(Project myProject, GlobalSearchScope globalSearchScope);*/
-}
diff --git a/src/java/com/zhaow/restful/common/resolver/JaxrsResolver.java b/src/java/com/zhaow/restful/common/resolver/JaxrsResolver.java
deleted file mode 100644
index e90c001..0000000
--- a/src/java/com/zhaow/restful/common/resolver/JaxrsResolver.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package com.zhaow.restful.common.resolver;
-
-
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.*;
-import com.intellij.psi.impl.java.stubs.index.JavaAnnotationIndex;
-import com.intellij.psi.search.GlobalSearchScope;
-import com.zhaow.restful.annotations.JaxrsPathAnnotation;
-import com.zhaow.restful.common.jaxrs.JaxrsAnnotationHelper;
-import com.zhaow.restful.method.RequestPath;
-import com.zhaow.restful.navigation.action.RestServiceItem;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-//import com.intellij.psi.impl.java.stubs.index.JavaAnnotationIndex;
-
-public class JaxrsResolver extends BaseServiceResolver {
-
- public JaxrsResolver(Module module) {
- myModule = module;
- }
-
- public JaxrsResolver(Project project) {
- myProject = project;
- }
-
- /*
- protected List getServiceItemList(PsiMethod psiMethod) {
- List itemList = new ArrayList<>();
-
- String classUriPath = JaxrsAnnotationHelper.getClassUriPath(psiMethod.getContainingClass());
-
- RequestPath[] methodUriPaths = JaxrsAnnotationHelper.getRequestPaths(psiMethod);
-
- for (RequestPath methodUriPath : methodUriPaths) {
- RestServiceItem item = createRestServiceItem(psiMethod, classUriPath, methodUriPath);
- itemList.add(item);
- }
-
- return itemList;
- }*/
-
- /*@NotNull
- public List getServicePsiMethodList(Project project, GlobalSearchScope globalSearchScope) {
- List psiMethodList = new ArrayList<>();
-
- for (PathMappingAnnotation supportedAnnotation : JaxrsPathAnnotation.values()) {
-
-// 标注了 jaxrs Path 注解的类
- Collection psiAnnotations = JavaAnnotationIndex.getInstance().get(supportedAnnotation.getShortName(), project, globalSearchScope);
-
- for (PsiAnnotation psiAnnotation : psiAnnotations) {
- PsiModifierList psiModifierList = (PsiModifierList) psiAnnotation.getParent();
- PsiElement psiElement = psiModifierList.getParent();
-// System.out.println("psiElement : "+ psiElement);
-
- if (!(psiElement instanceof PsiClass)) continue;
-
- PsiClass psiClass = (PsiClass) psiElement;
- PsiMethod[] psiMethods = psiClass.getMethods();
-
- if (psiMethods == null) {
- continue;
- }
-
- psiMethodList.addAll(Arrays.asList(psiMethods));
-
- }
- }
- return psiMethodList;
- }*/
-
-
- @Override
- public List getRestServiceItemList(Project project, GlobalSearchScope globalSearchScope) {
- List itemList = new ArrayList<>();
-
-// for (PathMappingAnnotation supportedAnnotation : JaxrsPathAnnotation.values()) {
-
-// 标注了 jaxrs Path 注解的类
-// Collection psiAnnotations = JavaAnnotationIndex.getInstance().get(supportedAnnotation.getShortName(), project, globalSearchScope);
- Collection psiAnnotations = JavaAnnotationIndex.getInstance().get(JaxrsPathAnnotation.PATH.getShortName(), project, globalSearchScope);
-
- for (PsiAnnotation psiAnnotation : psiAnnotations) {
- PsiModifierList psiModifierList = (PsiModifierList) psiAnnotation.getParent();
- PsiElement psiElement = psiModifierList.getParent();
-
- if (!(psiElement instanceof PsiClass)) continue;
-
- PsiClass psiClass = (PsiClass) psiElement;
- PsiMethod[] psiMethods = psiClass.getMethods();
-
- if (psiMethods == null) {
- continue;
- }
-
-// psiMethodList.addAll(Arrays.asList(psiMethods));
-
- String classUriPath = JaxrsAnnotationHelper.getClassUriPath(psiClass);
-
- for (PsiMethod psiMethod : psiMethods) {
- RequestPath[] methodUriPaths = JaxrsAnnotationHelper.getRequestPaths(psiMethod);
-
- for (RequestPath methodUriPath : methodUriPaths) {
- RestServiceItem item = createRestServiceItem(psiMethod, classUriPath, methodUriPath);
- itemList.add(item);
- }
- }
-
- }
-// }
-
-
- return itemList;
- }
-}
diff --git a/src/java/com/zhaow/restful/common/resolver/ServiceResolver.java b/src/java/com/zhaow/restful/common/resolver/ServiceResolver.java
deleted file mode 100644
index 44ba538..0000000
--- a/src/java/com/zhaow/restful/common/resolver/ServiceResolver.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.zhaow.restful.common.resolver;
-
-import com.zhaow.restful.navigation.action.RestServiceItem;
-
-import java.util.List;
-
-public interface ServiceResolver {
-
- /* 获取module 中所有的服务列表 */
- List findAllSupportedServiceItemsInModule();
-
- /* 获取project 中所有的服务列表 */
- List findAllSupportedServiceItemsInProject();
-}
diff --git a/src/java/com/zhaow/restful/common/resolver/SpringResolver.java b/src/java/com/zhaow/restful/common/resolver/SpringResolver.java
deleted file mode 100644
index dca668e..0000000
--- a/src/java/com/zhaow/restful/common/resolver/SpringResolver.java
+++ /dev/null
@@ -1,426 +0,0 @@
-package com.zhaow.restful.common.resolver;
-
-
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.*;
-import com.intellij.psi.impl.java.stubs.index.JavaAnnotationIndex;
-import com.intellij.psi.search.GlobalSearchScope;
-import com.zhaow.restful.annotations.PathMappingAnnotation;
-import com.zhaow.restful.annotations.SpringControllerAnnotation;
-import com.zhaow.restful.annotations.SpringRequestMethodAnnotation;
-import com.zhaow.restful.common.spring.RequestMappingAnnotationHelper;
-import com.zhaow.restful.method.RequestPath;
-import com.zhaow.restful.method.action.PropertiesHandler;
-import com.zhaow.restful.navigation.action.RestServiceItem;
-import org.jetbrains.kotlin.idea.stubindex.KotlinAnnotationsIndex;
-import org.jetbrains.kotlin.psi.*;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-public class SpringResolver extends BaseServiceResolver {
-/* Module myModule;
- Project myProject;*/
- PropertiesHandler propertiesHandler ;
- public SpringResolver(Module module) {
- myModule = module;
- propertiesHandler = new PropertiesHandler(module);
- }
-
- public SpringResolver(Project project) {
- myProject = project;
-
- }
-
-
- //Note: 当Controller 类上没有标记@RequestMapping 注解时,方法上的@RequestMapping 都是绝对路径。
- /*@Override
- public List getServiceItemList(PsiMethod psiMethod) {
- List itemList = new ArrayList<>();
-
- RequestPath[] methodRequestPaths = RequestMappingAnnotationHelper.getRequestPaths(psiMethod);
-
- //TODO: controller 没有设置requestMapping,默认“/”
- // TODO : controller 设置了(rest)controller 所有方法未指定 requestMapping,所有方法均匹配; 存在方法指定 requestMapping,则只解析这些方法;
-// String[] controllerPaths = RequestMappingAnnotationHelper.getRequestPaths(psiMethod.getContainingClass());
- List classRequestPaths = RequestMappingAnnotationHelper.getRequestPaths(psiMethod.getContainingClass());
- for (RequestPath classRequestPath : classRequestPaths) {
- for (RequestPath methodRequestPath : methodRequestPaths) {
- String path = classRequestPath.getPath();
-// String path = tryReplacePlaceholderValueInPath( classRequestPath.getPath() );
-
- RestServiceItem item = createRestServiceItem(psiMethod, path, methodRequestPath);
- itemList.add(item);
- }
- }
-
- return itemList;
- }*/
-
-
- /*
- private String tryReplacePlaceholderValueInPath(String path) {
- if (!path.contains("${")) return path;
-
- StringBuilder cleanerPath = new StringBuilder();
-
- for (String s : path.split("\\$\\{")) {
- if (s.contains("}")) {
- String placeholder = s.substring(0, s.indexOf("}"));
- String theOther = s.substring(s.indexOf("}")+1);
-
- String propertyValue = propertiesHandler.getProperty(placeholder);
-
- cleanerPath.append(StringUtils.isEmpty(propertyValue) ? s : propertyValue.trim()).append(theOther);
- } else {
- cleanerPath.append(s);
- }
- }
- return cleanerPath.toString();
- }*/
-
-
-/* @NotNull
-// @Override
- public List getServicePsiMethodList(Project project, GlobalSearchScope globalSearchScope) {
- List psiMethodList = new ArrayList<>();
- //TODO : 这块需要改写,支持更多注解方式。
- // TODO: 这种实现的局限了其他方式实现的url映射(xml(类似struts),webflux routers)
- SpringControllerAnnotation[] supportedAnnotations = SpringControllerAnnotation.values();
- // for (SpringControllerAnnotation controllerAnnotations : SpringControllerAnnotation.values()) {
- for (PathMappingAnnotation controllerAnnotation : supportedAnnotations) {
-
- // 标注了 (Rest)Controller 注解的类,即 Controller 类
- Collection psiAnnotations = JavaAnnotationIndex.getInstance().get(controllerAnnotation.getShortName(), project, globalSearchScope);
- for (PsiAnnotation psiAnnotation : psiAnnotations) {
- PsiModifierList psiModifierList = (PsiModifierList) psiAnnotation.getParent();
- PsiElement psiElement = psiModifierList.getParent();
-
- *//*if (!(psiElement instanceof PsiClass)) continue; // RestController annotation 只出现在class*//*
- PsiClass psiClass = (PsiClass) psiElement;
- PsiMethod[] psiMethods = psiClass.getMethods();
- // FIXME: 这里应该只包含 设置了,requstmapping的方法,除非所有方法都没标注 requstmapping
- if (psiMethods == null) {
- continue;
- }
-
- for (PsiMethod psiMethod : psiMethods) {
- // todo: 没有处理同时标注了 GET 和 POST 两种方法的方法,定义一个 RequestMapping 类{method,path}
- psiMethodList.add(psiMethod);
- }
- }
-
- }
- return psiMethodList;
- }*/
-
- @Override
- public List getRestServiceItemList(Project project, GlobalSearchScope globalSearchScope) {
- List itemList = new ArrayList<>();
-
- // TODO: 这种实现的局限了其他方式实现的url映射(xml(类似struts),webflux routers)
- SpringControllerAnnotation[] supportedAnnotations = SpringControllerAnnotation.values();
- for (PathMappingAnnotation controllerAnnotation : supportedAnnotations) {
-
- // java: 标注了 (Rest)Controller 注解的类,即 Controller 类
- Collection psiAnnotations = JavaAnnotationIndex.getInstance().get(controllerAnnotation.getShortName(), project, globalSearchScope);
- for (PsiAnnotation psiAnnotation : psiAnnotations) {
- PsiModifierList psiModifierList = (PsiModifierList) psiAnnotation.getParent();
- PsiElement psiElement = psiModifierList.getParent();
-
- /*if (!(psiElement instanceof PsiClass)) continue; // RestController annotation 只出现在 class*/
- PsiClass psiClass = (PsiClass) psiElement;
- List serviceItemList = getServiceItemList(psiClass);
- itemList.addAll(serviceItemList);
- }
-
-
- // kotlin:
- Collection ktAnnotationEntries = KotlinAnnotationsIndex.getInstance().get(controllerAnnotation.getShortName(), project, globalSearchScope);
- for (KtAnnotationEntry ktAnnotationEntry : ktAnnotationEntries) {
- KtClass ktClass = (KtClass) ktAnnotationEntry.getParent().getParent();
-
- List classRequestPaths = getRequestPaths(ktClass);
-
- List ktNamedFunctions = getKtNamedFunctions(ktClass);
- for (KtNamedFunction fun : ktNamedFunctions) {
- List requestPaths = getRequestPaths(fun);
-
- for (RequestPath classRequestPath : classRequestPaths) {
- for (RequestPath requestPath : requestPaths) {
- requestPath.concat(classRequestPath);
- itemList.add(createRestServiceItem(fun, "", requestPath));
- }
- }
- }
-/*
- PsiClass psiClass = LightClassUtilsKt.toLightClass(ktClass);
- itemList.addAll(getServiceItemList(psiClass));*/
-
- }
-
- }
-
- return itemList;
- }
-
- protected List getServiceItemList(PsiClass psiClass) {
-
- PsiMethod[] psiMethods = psiClass.getMethods();
- if (psiMethods == null) {
- return new ArrayList<>();
- }
-
- List itemList = new ArrayList<>();
- List classRequestPaths = RequestMappingAnnotationHelper.getRequestPaths(psiClass);
-
- for (PsiMethod psiMethod : psiMethods) {
- RequestPath[] methodRequestPaths = RequestMappingAnnotationHelper.getRequestPaths(psiMethod);
-
- for (RequestPath classRequestPath : classRequestPaths) {
- for (RequestPath methodRequestPath : methodRequestPaths) {
- String path = classRequestPath.getPath();
-// String path = tryReplacePlaceholderValueInPath( classRequestPath.getPath() );
-
- RestServiceItem item = createRestServiceItem(psiMethod, path, methodRequestPath);
- itemList.add(item);
- }
- }
-
- }
- return itemList;
- }
-
- private List getKtNamedFunctions(KtClass ktClass) {
- List ktNamedFunctions = new ArrayList<>();
- List declarations = ktClass.getDeclarations();
-
- for (KtDeclaration declaration : declarations) {
- if (declaration instanceof KtNamedFunction) {
- KtNamedFunction fun = (KtNamedFunction) declaration;
- ktNamedFunctions.add(fun);
-
- }
- }
- return ktNamedFunctions;
- }
-
- private List getRequestPaths(KtClass ktClass) {
- String defaultPath = "/";
- //方法注解
- List annotationEntries = ktClass.getModifierList().getAnnotationEntries();
-
- List requestPaths = getRequestMappings( defaultPath, annotationEntries);
- return requestPaths;
- }
-
- private List getRequestPaths(KtNamedFunction fun) {
-// String methodBody = fun.getBodyExpression().getText();// 方法体
-// String defaultPath = fun.getName();
- String defaultPath = "/";
- //方法注解
- List annotationEntries = fun.getModifierList().getAnnotationEntries();
- List requestPaths = getRequestMappings( defaultPath, annotationEntries);
- return requestPaths;
- }
-
- private List getRequestMappings(String defaultPath, List annotationEntries) {
- List requestPaths = new ArrayList<>();
- for (KtAnnotationEntry entry : annotationEntries) {
-// List requestMappings = getRequestMappings(defaultPath, entry);
- List requestMappings = getRequestMappings(defaultPath, entry);
- requestPaths.addAll(requestMappings);
- }
- return requestPaths;
- }
-
- /* private List getRequestMappings(String defaultPath, KtAnnotationEntry entry) {
- List requestPaths = new ArrayList<>();
- List methodList = new ArrayList<>();
- List pathList = new ArrayList<>();
-
- String annotationName = entry.getCalleeExpression().getText();
- SpringRequestMethodAnnotation requestMethodAnnotation = SpringRequestMethodAnnotation.getByShortName(annotationName);
- if (requestMethodAnnotation == null) {
- return new ArrayList<>();
- }
-
- if (requestMethodAnnotation.methodName() != null) {
- methodList.add(requestMethodAnnotation.methodName());
- } else {
- // 下面循环获取
- }
-
- //注解参数值
- KtValueArgumentList valueArgumentList = entry.getValueArgumentList();
- // 只有注解,没有参数
- if (valueArgumentList != null) {
- List arguments = valueArgumentList.getArguments();
-
-
- for (int i = 0; i < arguments.size(); i++) {
- KtValueArgument ktValueArgument = arguments.get(i);
- KtValueArgumentName argumentName = ktValueArgument.getArgumentName();
-
- KtExpression argumentExpression = ktValueArgument.getArgumentExpression();
- if (argumentName == null || argumentName.getText().equals("value") || argumentName.getText().equals("path")) {
- // array, kotlin 1.1-
- if (argumentExpression.getText().startsWith("arrayOf")) {
- List pathValueArguments = ((KtCallExpression) argumentExpression).getValueArguments();
- for (KtValueArgument pathValueArgument : pathValueArguments) {
- pathList.add(pathValueArgument.getText().replace("\"", ""));
- }
- // array, kotlin 1.2+
- } else if (argumentExpression.getText().startsWith("[")) {
- List innerExpressions = ((KtCollectionLiteralExpression) argumentExpression).getInnerExpressions();
- for (KtExpression ktExpression : innerExpressions) {
- pathList.add(ktExpression.getText().replace("\"", ""));
- }
- } else {
- // 有且仅有一个value
- PsiElement[] paths = ktValueArgument.getArgumentExpression().getChildren();
-// Arrays.stream(paths).forEach(p -> pathList.add(p.getText()));
- pathList.add(paths.length==0? "" : paths[0].getText());
- }
- //TODO
- continue;
- }
-
- String attribute = "method";
- if (argumentName.getText().equals(attribute)) {
-
- // array, kotlin 1.1-
- if (argumentExpression.getText().startsWith("arrayOf")) {
- List pathValueArguments = ((KtCallExpression) argumentExpression).getValueArguments();
- for (KtValueArgument pathValueArgument : pathValueArguments) {
- methodList.add(pathValueArgument.getText().replace("\"", ""));
- }
- // array, kotlin 1.2+
- } else if (argumentExpression.getText().startsWith("[")) {
- List innerExpressions = ((KtCollectionLiteralExpression) argumentExpression).getInnerExpressions();
- for (KtExpression ktExpression : innerExpressions) {
- methodList.add(ktExpression.getText().replace("\"", ""));
- }
- } else {
- // 有且仅有一个value
- PsiElement[] paths = ktValueArgument.getArgumentExpression().getChildren();
-// Arrays.stream(paths).forEach(p -> methodList.add(p.getText()));
- methodList.add(paths.length==0? "" : paths[0].getText());
- }
-
- }
- }
- } else {
- pathList.add(defaultPath);
- //method = "GET";
- }
-
- if (methodList.size() > 0) {
- for (String method : methodList) {
- for (String path : pathList) {
- requestPaths.add(new RequestPath(path, method));
- }
- }
- } else {
- for (String path : pathList) {
- requestPaths.add(new RequestPath(path, null));
- }
- }
-
- return requestPaths;
- }*/
-
-
-
- private List getRequestMappings(String defaultPath, KtAnnotationEntry entry) {
- List requestPaths = new ArrayList<>();
- List methodList = new ArrayList<>();
- List pathList = new ArrayList<>();
-
- String annotationName = entry.getCalleeExpression().getText();
- SpringRequestMethodAnnotation requestMethodAnnotation = SpringRequestMethodAnnotation.getByShortName(annotationName);
- if (requestMethodAnnotation == null) {
- return new ArrayList<>();
- }
-
- if (requestMethodAnnotation.methodName() != null) { // GetMapping PostMapping ...
- methodList.add(requestMethodAnnotation.methodName());
- } else {
- methodList.addAll(getAttributeValues( entry, "method") ); // RequestMapping
- }
-
- //注解参数值
-// KtValueArgumentList valueArgumentList = entry.getValueArgumentList();
- if (entry.getValueArgumentList() != null) {
- List mappingValues = getAttributeValues(entry, null);
- if(!mappingValues.isEmpty() )
- pathList.addAll(mappingValues);
- else
- pathList.addAll(getAttributeValues(entry, "value")); // path
-
- pathList.addAll(getAttributeValues(entry, "path")); // path
- }
-
- if(pathList.isEmpty()) pathList.add(defaultPath); //没指定参数
-
- if (methodList.size() > 0) {
- for (String method : methodList) {
- for (String path : pathList) {
- requestPaths.add(new RequestPath(path, method));
- }
- }
- } else {
- for (String path : pathList) {
- requestPaths.add(new RequestPath(path, null));
- }
- }
-
- return requestPaths;
- }
-
- private List getAttributeValues(KtAnnotationEntry entry, String attribute) {
- KtValueArgumentList valueArgumentList = entry.getValueArgumentList();
-
- if(valueArgumentList == null) return Collections.emptyList();
-
- List arguments = valueArgumentList.getArguments();
-
- for (int i = 0; i < arguments.size(); i++) {
- KtValueArgument ktValueArgument = arguments.get(i);
- KtValueArgumentName argumentName = ktValueArgument.getArgumentName();
-
- KtExpression argumentExpression = ktValueArgument.getArgumentExpression();
-
- if (( argumentName == null && attribute == null ) || (argumentName != null && argumentName.getText().equals(attribute) ) ) {
- List methodList = new ArrayList<>();
- // array, kotlin 1.1-
- if (argumentExpression.getText().startsWith("arrayOf")) {
- List pathValueArguments = ((KtCallExpression) argumentExpression).getValueArguments();
- for (KtValueArgument pathValueArgument : pathValueArguments) {
- methodList.add(pathValueArgument.getText().replace("\"", ""));
- }
- // array, kotlin 1.2+
- } else if (argumentExpression.getText().startsWith("[")) {
- List innerExpressions = ((KtCollectionLiteralExpression) argumentExpression).getInnerExpressions();
- for (KtExpression ktExpression : innerExpressions) {
- methodList.add(ktExpression.getText().replace("\"", ""));
- }
- } else {
- // 有且仅有一个value
- PsiElement[] paths = ktValueArgument.getArgumentExpression().getChildren();
-// Arrays.stream(paths).forEach(p -> methodList.add(p.getText()));
- methodList.add(paths.length==0? "" : paths[0].getText());
- }
-
- return methodList;
- }
- }
-
- return new ArrayList<>();
- }
-
-
-}
diff --git a/src/java/com/zhaow/restful/navigation/action/RestServiceChooseByNamePopup.java b/src/java/com/zhaow/restful/navigation/action/RestServiceChooseByNamePopup.java
deleted file mode 100644
index 0fcf663..0000000
--- a/src/java/com/zhaow/restful/navigation/action/RestServiceChooseByNamePopup.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2000-2017 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.zhaow.restful.navigation.action;
-
-import com.intellij.ide.util.gotoByName.ChooseByNameItemProvider;
-import com.intellij.ide.util.gotoByName.ChooseByNameModel;
-import com.intellij.ide.util.gotoByName.ChooseByNamePopup;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Key;
-import com.intellij.openapi.util.text.StringUtil;
-import com.zhaow.utils.ToolkitUtil;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-public class RestServiceChooseByNamePopup extends ChooseByNamePopup {
- public static final Key CHOOSE_BY_NAME_POPUP_IN_PROJECT_KEY = new Key<>("ChooseByNamePopup");
-
- protected RestServiceChooseByNamePopup(@Nullable Project project, @NotNull ChooseByNameModel model, @NotNull ChooseByNameItemProvider provider, @Nullable ChooseByNamePopup oldPopup, @Nullable String predefinedText, boolean mayRequestOpenInCurrentWindow, int initialIndex) {
- super(project, model, provider, oldPopup, predefinedText, mayRequestOpenInCurrentWindow, initialIndex);
- }
-
- public static RestServiceChooseByNamePopup createPopup(final Project project,
- @NotNull final ChooseByNameModel model,
- @NotNull ChooseByNameItemProvider provider,
- @Nullable final String predefinedText,
- boolean mayRequestOpenInCurrentWindow,
- final int initialIndex) {
- if (!StringUtil.isEmptyOrSpaces(predefinedText)) {
- return new RestServiceChooseByNamePopup(project, model, provider, null, predefinedText, mayRequestOpenInCurrentWindow, initialIndex);
- }
-
- final RestServiceChooseByNamePopup oldPopup = project == null ? null : project.getUserData(CHOOSE_BY_NAME_POPUP_IN_PROJECT_KEY);
- if (oldPopup != null) {
- oldPopup.close(false);
- }
- RestServiceChooseByNamePopup newPopup = new RestServiceChooseByNamePopup(project, model, provider, oldPopup, predefinedText, mayRequestOpenInCurrentWindow, initialIndex);
-
- if (project != null) {
- project.putUserData(CHOOSE_BY_NAME_POPUP_IN_PROJECT_KEY, newPopup);
- }
- return newPopup;
- }
-
- @Override
- public String transformPattern(String pattern) {
- final ChooseByNameModel model = getModel();
- return getTransformedPattern(pattern, model);
- }
-
-//TODO: resolve PathVariable
- public static String getTransformedPattern(String pattern, ChooseByNameModel model) {
- if (! (model instanceof GotoRequestMappingModel) ) {
- return pattern;
- }
-
- pattern = ToolkitUtil.removeRedundancyMarkup(pattern);;
- return pattern;
- }
-
-
- @Nullable
- public String getMemberPattern() {
- final String enteredText = getTrimmedText();
- final int index = enteredText.lastIndexOf('#');
- if (index == -1) {
- return null;
- }
-
- String name = enteredText.substring(index + 1).trim();
- return StringUtil.isEmptyOrSpaces(name) ? null : name;
- }
-
-/* public void repaintList() {
- myRepaintQueue.cancelAllUpdates();
- myRepaintQueue.queue(new Update(this) {
- @Override
- public void run() {
- RestServiceChooseByNamePopup.this.repaintListImmediate();
- }
- });
- }*/
-
-}
\ No newline at end of file
diff --git a/src/java/com/zhaow/restful/navigator/RestServiceProjectsManager.java b/src/java/com/zhaow/restful/navigator/RestServiceProjectsManager.java
deleted file mode 100644
index 8980057..0000000
--- a/src/java/com/zhaow/restful/navigator/RestServiceProjectsManager.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2000-2017 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.zhaow.restful.navigator;
-
-import com.intellij.openapi.Disposable;
-import com.intellij.openapi.components.AbstractProjectComponent;
-import com.intellij.openapi.components.PersistentStateComponent;
-import com.intellij.openapi.components.ProjectComponent;
-import com.intellij.openapi.components.State;
-import com.intellij.openapi.project.DumbService;
-import com.intellij.openapi.project.Project;
-import com.zhaow.restful.common.ServiceHelper;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.List;
-
-@State(name = "RestServiceProjectsManager")
-public class RestServiceProjectsManager extends AbstractProjectComponent
- implements PersistentStateComponent, Disposable, ProjectComponent {
- protected final Project myProject;
-
-
-
- private RestServicesNavigatorState myState = new RestServicesNavigatorState();
-
- public static RestServiceProjectsManager getInstance(Project p) {
- return p.getComponent(RestServiceProjectsManager.class);
- }
-
- public RestServiceProjectsManager(Project project) {
- super(project);
- myProject = project;
-// System.out.println("RestServiceProjectsManager");
- }
-
-
- @Override
- public void dispose() {
-
- }
-
- @Nullable
- @Override
- public RestServicesNavigatorState getState() {
- return null;
- }
-
- @Override
- public void loadState(RestServicesNavigatorState state) {
-
- }
-
- public List getServiceProjects() {
-// List list = DumbService.getInstance(myProject).runReadActionInSmartMode(() -> ServiceHelper.buildRestServiceProjectList(myProject));
- List list = DumbService.getInstance(myProject).runReadActionInSmartMode(() -> ServiceHelper.buildRestServiceProjectListUsingResolver(myProject));
- return list;
- }
-/*
- public boolean hasProjects() {
- if (! myProject.isInitialized()) {
- return false;
- }
- System.out.println("======hasProjects=====");
- return getServiceProjects().size() > 0;
- }*/
-
- public void forceUpdateAllProjects() {
-
- }
-}
diff --git a/src/main/java/com/github/aborn/wdt/core/RestServiceDataManager.java b/src/main/java/com/github/aborn/wdt/core/RestServiceDataManager.java
new file mode 100644
index 0000000..533c5db
--- /dev/null
+++ b/src/main/java/com/github/aborn/wdt/core/RestServiceDataManager.java
@@ -0,0 +1,74 @@
+package com.github.aborn.wdt.core;
+
+import com.github.aborn.wdt.core.resolver.IResolver;
+import com.github.aborn.wdt.core.resolver.JavaxrsResolver;
+import com.github.aborn.wdt.core.resolver.SpringResolver;
+import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModuleManager;
+import com.intellij.openapi.project.Project;
+import com.zhaow.restful.navigation.action.RestServiceItem;
+import com.zhaow.restful.navigator.RestServiceProject;
+import org.apache.commons.compress.utils.Lists;
+
+import java.util.List;
+
+/**
+ * @author aborn
+ * @date 2020/06/15 11:35 AM
+ */
+public class RestServiceDataManager {
+
+ public static final Logger LOG = Logger.getInstance(RestServiceDataManager.class);
+
+ public static List buildRestServiceData(Project project) {
+ List serviceProjectList = Lists.newArrayList();
+ Module[] modules = ModuleManager.getInstance(project).getModules();
+
+ if (modules.length > 0) {
+ for (Module module : modules) {
+ List restServices = buildRestServiceItemListFrom(project, module);
+ if (restServices.size() > 0) {
+ serviceProjectList.add(new RestServiceProject(module.getName() + "(" + restServices.size() +")", restServices));
+ }
+ }
+ } else {
+ List restServices = buildRestServiceItemListFrom(project);
+ if (restServices.size() > 0) {
+ serviceProjectList.add(new RestServiceProject(project.getName() + "(" + restServices.size() +")", restServices));
+ }
+ LOG.info("Not find any modules in project " + project.getName() + ".");
+ }
+
+ return serviceProjectList;
+ }
+
+ /**
+ * from module
+ * @param project
+ * @param module
+ * @return
+ */
+ public static List buildRestServiceItemListFrom(Project project, Module module) {
+ IResolver[] resolvers = {new SpringResolver(), new JavaxrsResolver()};
+ List restServices = Lists.newArrayList();
+ for (IResolver resolver : resolvers) {
+ restServices.addAll(resolver.getRestServiceItemList(project, module));
+ }
+ return restServices;
+ }
+
+ /**
+ * from project
+ * @param project
+ * @return
+ */
+ public static List buildRestServiceItemListFrom(Project project) {
+ IResolver[] resolvers = {new SpringResolver(), new JavaxrsResolver()};
+ List restServices = Lists.newArrayList();
+ for (IResolver resolver : resolvers) {
+ restServices.addAll(resolver.getRestServiceItemList(project));
+ }
+ return restServices;
+ }
+}
diff --git a/src/main/java/com/github/aborn/wdt/core/helper/AnnotationHelper.java b/src/main/java/com/github/aborn/wdt/core/helper/AnnotationHelper.java
new file mode 100644
index 0000000..78691c4
--- /dev/null
+++ b/src/main/java/com/github/aborn/wdt/core/helper/AnnotationHelper.java
@@ -0,0 +1,26 @@
+package com.github.aborn.wdt.core.helper;
+
+import com.intellij.psi.PsiClass;
+import com.intellij.psi.PsiMethod;
+import com.zhaow.restful.method.RequestPath;
+
+/**
+ * @author aborn
+ * @date 2020/06/15 12:02 PM
+ */
+public interface AnnotationHelper {
+
+ /**
+ * get class uri path
+ * @param psiClass
+ * @return
+ */
+ String getClassUriPath(PsiClass psiClass);
+
+ /**
+ *
+ * @param psiMethod
+ * @return
+ */
+ RequestPath[] getRequestPaths(PsiMethod psiMethod);
+}
diff --git a/src/main/java/com/github/aborn/wdt/core/helper/JavaxrsAnnotationHelper.java b/src/main/java/com/github/aborn/wdt/core/helper/JavaxrsAnnotationHelper.java
new file mode 100644
index 0000000..edc4050
--- /dev/null
+++ b/src/main/java/com/github/aborn/wdt/core/helper/JavaxrsAnnotationHelper.java
@@ -0,0 +1,55 @@
+package com.github.aborn.wdt.core.helper;
+
+import com.intellij.psi.PsiAnnotation;
+import com.intellij.psi.PsiClass;
+import com.intellij.psi.PsiMethod;
+import com.zhaow.restful.annotations.JaxrsHttpMethodAnnotation;
+import com.zhaow.restful.annotations.JaxrsPathAnnotation;
+import com.zhaow.restful.common.PsiAnnotationHelper;
+import com.zhaow.restful.method.RequestPath;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author aborn
+ * @date 2020/06/15 12:03 PM
+ */
+public class JavaxrsAnnotationHelper implements AnnotationHelper {
+
+ @Override
+ public String getClassUriPath(PsiClass psiClass) {
+ PsiAnnotation annotation = psiClass.getModifierList().findAnnotation(JaxrsPathAnnotation.PATH.getQualifiedName());
+ String path = PsiAnnotationHelper.getAnnotationAttributeValue(annotation, "value");
+ return path != null ? path : "";
+ }
+
+ @Override
+ public RequestPath[] getRequestPaths(PsiMethod psiMethod) {
+ PsiAnnotation[] annotations = psiMethod.getModifierList().getAnnotations();
+ if (annotations == null) {
+ return null;
+ }
+
+ List list = new ArrayList<>();
+
+ PsiAnnotation wsPathAnnotation = psiMethod.getModifierList().findAnnotation(JaxrsPathAnnotation.PATH.getQualifiedName());
+ String path = wsPathAnnotation == null ? psiMethod.getName() : getWsPathValue(wsPathAnnotation);
+ JaxrsHttpMethodAnnotation[] jaxrsHttpMethodAnnotations = JaxrsHttpMethodAnnotation.values();
+
+ Arrays.stream(annotations).forEach(a -> Arrays.stream(jaxrsHttpMethodAnnotations).forEach(methodAnnotation -> {
+ if (a.getQualifiedName().equals(methodAnnotation.getQualifiedName())) {
+ list.add(new RequestPath(path, methodAnnotation.getShortName()));
+ }
+ }));
+
+ return list.toArray(new RequestPath[list.size()]);
+ }
+
+ private String getWsPathValue(PsiAnnotation annotation) {
+ String value = PsiAnnotationHelper.getAnnotationAttributeValue(annotation, "value");
+
+ return value != null ? value : "";
+ }
+}
diff --git a/src/main/java/com/github/aborn/wdt/core/helper/SpringAnnotationHelper.java b/src/main/java/com/github/aborn/wdt/core/helper/SpringAnnotationHelper.java
new file mode 100644
index 0000000..b023ecc
--- /dev/null
+++ b/src/main/java/com/github/aborn/wdt/core/helper/SpringAnnotationHelper.java
@@ -0,0 +1,85 @@
+package com.github.aborn.wdt.core.helper;
+
+import com.intellij.psi.PsiAnnotation;
+import com.intellij.psi.PsiClass;
+import com.intellij.psi.PsiMethod;
+import com.zhaow.restful.annotations.SpringRequestMethodAnnotation;
+import com.zhaow.restful.common.PsiAnnotationHelper;
+import com.zhaow.restful.method.RequestPath;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author aborn
+ * @date 2020/06/15 1:54 PM
+ */
+public class SpringAnnotationHelper implements AnnotationHelper {
+
+ @Override
+ public String getClassUriPath(PsiClass psiClass) {
+ return null;
+ }
+
+ @Override
+ public RequestPath[] getRequestPaths(PsiMethod psiMethod) {
+ PsiAnnotation[] annotations = psiMethod.getModifierList().getAnnotations();
+
+ if (annotations == null) {
+ return null;
+ }
+ List list = new ArrayList<>();
+
+ for (PsiAnnotation annotation : annotations) {
+ for (SpringRequestMethodAnnotation mappingAnnotation : SpringRequestMethodAnnotation.values()) {
+// for (PathMappingAnnotation mappingAnnotation : PathMappingAnnotation.allPathMappingAnnotations) {
+ if (mappingAnnotation.getQualifiedName().endsWith(annotation.getQualifiedName())) {
+
+// String defaultValue = psiMethod.getName();
+ String defaultValue = "/";
+ List requestMappings = getRequestMappings(annotation, defaultValue);
+ if (requestMappings.size() > 0) {
+ list.addAll(requestMappings);
+ }
+ }
+ }
+ }
+
+ return list.toArray(new RequestPath[list.size()]);
+ }
+
+ private static List getRequestMappings(PsiAnnotation annotation, String defaultValue) {
+ List mappingList = new ArrayList<>();
+
+ List methodList = PsiAnnotationHelper.getAnnotationAttributeValues(annotation, "method");
+
+ List pathList = PsiAnnotationHelper.getAnnotationAttributeValues(annotation, "value");
+ if (pathList.size() == 0) {
+ pathList = PsiAnnotationHelper.getAnnotationAttributeValues(annotation, "path");
+ }
+
+ // 没有设置 value,默认方法名
+ if (pathList.size() == 0) {
+ pathList.add(defaultValue);
+ }
+
+ // todo: 处理没有设置 value 或 path 的 RequestMapping
+
+// List finalPathList = pathList;
+// methodList.forEach(method-> finalPathList.forEach(path->mappingList.add(new RequestMapping(path,method))));
+
+ if (methodList.size() > 0) {
+ for (String method : methodList) {
+ for (String path : pathList) {
+ mappingList.add(new RequestPath(path, method));
+ }
+ }
+ } else {
+ for (String path : pathList) {
+ mappingList.add(new RequestPath(path, null));
+ }
+ }
+
+ return mappingList;
+ }
+}
diff --git a/src/main/java/com/github/aborn/wdt/core/resolver/BaseResolver.java b/src/main/java/com/github/aborn/wdt/core/resolver/BaseResolver.java
new file mode 100644
index 0000000..7b89e37
--- /dev/null
+++ b/src/main/java/com/github/aborn/wdt/core/resolver/BaseResolver.java
@@ -0,0 +1,33 @@
+package com.github.aborn.wdt.core.resolver;
+
+import com.github.aborn.wdt.core.helper.AnnotationHelper;
+import com.intellij.psi.PsiElement;
+import com.zhaow.restful.method.RequestPath;
+import com.zhaow.restful.navigation.action.RestServiceItem;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * @author aborn
+ * @date 2020/06/15 11:41 AM
+ */
+public abstract class BaseResolver implements IResolver {
+ protected AnnotationHelper annotationHelper;
+
+ @NotNull
+ protected RestServiceItem buildRestServiceItem(PsiElement psiMethod, String classUriPath, RequestPath requestMapping) {
+ if (!classUriPath.startsWith("/")) {
+ classUriPath = "/".concat(classUriPath);
+ }
+ if (!classUriPath.endsWith("/")) {
+ classUriPath = classUriPath.concat("/");
+ }
+
+ String methodPath = requestMapping.getPath();
+
+ if (methodPath.startsWith("/")) {
+ methodPath = methodPath.substring(1, methodPath.length());
+ }
+ String requestPath = classUriPath + methodPath;
+ return new RestServiceItem(psiMethod, requestMapping.getMethod(), requestPath);
+ }
+}
diff --git a/src/main/java/com/github/aborn/wdt/core/resolver/IResolver.java b/src/main/java/com/github/aborn/wdt/core/resolver/IResolver.java
new file mode 100644
index 0000000..bbf5bbd
--- /dev/null
+++ b/src/main/java/com/github/aborn/wdt/core/resolver/IResolver.java
@@ -0,0 +1,28 @@
+package com.github.aborn.wdt.core.resolver;
+
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.project.Project;
+import com.zhaow.restful.navigation.action.RestServiceItem;
+
+import java.util.List;
+
+/**
+ * @author aborn
+ * @date 2020/06/15 11:26 AM
+ */
+public interface IResolver {
+ /**
+ * build data from module in project
+ * @param project
+ * @param module
+ * @return
+ */
+ List getRestServiceItemList(Project project, Module module);
+
+ /**
+ * build data from all project
+ * @param project
+ * @return
+ */
+ List getRestServiceItemList(Project project);
+}
diff --git a/src/main/java/com/github/aborn/wdt/core/resolver/JavaxrsResolver.java b/src/main/java/com/github/aborn/wdt/core/resolver/JavaxrsResolver.java
new file mode 100644
index 0000000..853d05b
--- /dev/null
+++ b/src/main/java/com/github/aborn/wdt/core/resolver/JavaxrsResolver.java
@@ -0,0 +1,69 @@
+package com.github.aborn.wdt.core.resolver;
+
+import com.github.aborn.wdt.core.helper.JavaxrsAnnotationHelper;
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.*;
+import com.intellij.psi.impl.java.stubs.index.JavaAnnotationIndex;
+import com.intellij.psi.search.GlobalSearchScope;
+import com.zhaow.restful.annotations.JaxrsPathAnnotation;
+import com.zhaow.restful.method.RequestPath;
+import com.zhaow.restful.navigation.action.RestServiceItem;
+import org.apache.commons.compress.utils.Lists;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author aborn
+ * @date 2020/06/15 11:44 AM
+ */
+public class JavaxrsResolver extends BaseResolver {
+
+ public JavaxrsResolver() {
+ annotationHelper = new JavaxrsAnnotationHelper();
+ }
+
+ @Override
+ public List getRestServiceItemList(Project project) {
+ Collection psiAnnotations = JavaAnnotationIndex.getInstance().get(JaxrsPathAnnotation.PATH.getShortName(), project, GlobalSearchScope.projectScope(project));
+ return build(psiAnnotations, null);
+ }
+
+ @Override
+ public List getRestServiceItemList(Project project, Module module) {
+ Collection psiAnnotations = JavaAnnotationIndex.getInstance().get(JaxrsPathAnnotation.PATH.getShortName(), project, GlobalSearchScope.moduleScope(module));
+ return build(psiAnnotations, module);
+ }
+
+ private List build(Collection psiAnnotations, Module module) {
+ List itemList = Lists.newArrayList();
+ psiAnnotations.forEach(psiAnnotation -> {
+ PsiModifierList psiModifierList = (PsiModifierList) psiAnnotation.getParent();
+ PsiElement psiElement = psiModifierList.getParent();
+
+ if (!(psiElement instanceof PsiClass)) {
+ return;
+ }
+
+ PsiClass psiClass = (PsiClass) psiElement;
+ PsiMethod[] psiMethods = psiClass.getMethods();
+
+ String classUriPath = annotationHelper.getClassUriPath(psiClass);
+ for (PsiMethod psiMethod : psiMethods) {
+ RequestPath[] methodUriPaths = annotationHelper.getRequestPaths(psiMethod);
+
+ for (RequestPath methodUriPath : methodUriPaths) {
+ RestServiceItem item = buildRestServiceItem(psiMethod, classUriPath, methodUriPath);
+ if (module != null) {
+ item.setModule(module);
+ }
+ itemList.add(item);
+ }
+ }
+
+ });
+
+ return itemList;
+ }
+}
diff --git a/src/main/java/com/github/aborn/wdt/core/resolver/SpringResolver.java b/src/main/java/com/github/aborn/wdt/core/resolver/SpringResolver.java
new file mode 100644
index 0000000..b08c865
--- /dev/null
+++ b/src/main/java/com/github/aborn/wdt/core/resolver/SpringResolver.java
@@ -0,0 +1,105 @@
+package com.github.aborn.wdt.core.resolver;
+
+import com.github.aborn.wdt.core.helper.SpringAnnotationHelper;
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.*;
+import com.intellij.psi.impl.java.stubs.index.JavaAnnotationIndex;
+import com.intellij.psi.search.GlobalSearchScope;
+import com.zhaow.restful.annotations.SpringControllerAnnotation;
+import com.zhaow.restful.common.spring.RequestMappingAnnotationHelper;
+import com.zhaow.restful.method.RequestPath;
+import com.zhaow.restful.navigation.action.RestServiceItem;
+import org.apache.commons.compress.utils.Lists;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author aborn
+ * @date 2020/06/15 11:50 AM
+ */
+public class SpringResolver extends BaseResolver {
+
+ public SpringResolver() {
+ annotationHelper = new SpringAnnotationHelper();
+ }
+
+ @Override
+ public List getRestServiceItemList(Project project) {
+ Collection psiAnnotations = new ArrayList<>();
+ for (SpringControllerAnnotation annotation : SpringControllerAnnotation.values()) {
+ psiAnnotations.addAll(JavaAnnotationIndex.getInstance().get(annotation.getShortName(), project, GlobalSearchScope.projectScope(project)));
+ }
+ return build(psiAnnotations, null);
+ }
+
+ @Override
+ public List getRestServiceItemList(Project project, Module module) {
+ Collection psiAnnotations = new ArrayList<>();
+ for (SpringControllerAnnotation annotation : SpringControllerAnnotation.values()) {
+ psiAnnotations.addAll(JavaAnnotationIndex.getInstance().get(annotation.getShortName(), project, GlobalSearchScope.moduleScope(module)));
+ }
+ return build(psiAnnotations, module);
+ }
+
+ private List build(Collection psiAnnotations, Module module) {
+
+ List itemList = Lists.newArrayList();
+
+ psiAnnotations.forEach(psiAnnotation -> {
+ PsiModifierList psiModifierList = (PsiModifierList) psiAnnotation.getParent();
+ PsiElement psiElement = psiModifierList.getParent();
+
+ if (!(psiElement instanceof PsiClass)) {
+ return;
+ }
+
+ PsiClass psiClass = (PsiClass) psiElement;
+ PsiMethod[] psiMethods = psiClass.getMethods();
+
+ if (psiMethods == null) {
+ return;
+ }
+
+ List restServiceItems = getServiceItemList(psiClass, module);
+
+ itemList.addAll(restServiceItems);
+
+ });
+
+ return itemList;
+ }
+
+ protected List getServiceItemList(PsiClass psiClass, Module module) {
+
+ PsiMethod[] psiMethods = psiClass.getMethods();
+ if (psiMethods == null) {
+ return new ArrayList<>();
+ }
+
+ List itemList = new ArrayList<>();
+ List classRequestPaths = RequestMappingAnnotationHelper.getRequestPaths(psiClass);
+
+ for (PsiMethod psiMethod : psiMethods) {
+ RequestPath[] methodRequestPaths = annotationHelper.getRequestPaths(psiMethod);
+
+ for (RequestPath classRequestPath : classRequestPaths) {
+ for (RequestPath methodRequestPath : methodRequestPaths) {
+ String path = classRequestPath.getPath();
+
+ RestServiceItem item = buildRestServiceItem(psiMethod, path, methodRequestPath);
+ if (module != null) {
+ item.setModule(module);
+ }
+ itemList.add(item);
+ }
+ }
+
+ }
+ return itemList;
+ }
+
+
+}
diff --git a/src/main/java/com/github/aborn/wdt/package-info.java b/src/main/java/com/github/aborn/wdt/package-info.java
new file mode 100644
index 0000000..108a5b3
--- /dev/null
+++ b/src/main/java/com/github/aborn/wdt/package-info.java
@@ -0,0 +1,3 @@
+package com.github.aborn.wdt;
+
+// web development toolkit
\ No newline at end of file
diff --git a/src/main/java/com/github/aborn/wdt/utils/FileUtils.java b/src/main/java/com/github/aborn/wdt/utils/FileUtils.java
new file mode 100644
index 0000000..06bf5cb
--- /dev/null
+++ b/src/main/java/com/github/aborn/wdt/utils/FileUtils.java
@@ -0,0 +1,41 @@
+package com.github.aborn.wdt.utils;
+
+import com.intellij.psi.PsiClass;
+import com.intellij.psi.PsiDirectory;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.impl.source.PsiJavaFileImpl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class FileUtils {
+
+ /**
+ * 提取java文件
+ *
+ * @param directory
+ * @return
+ */
+ public static List getJavaFilesFromDir(PsiDirectory directory) {
+ List psiClasses = new ArrayList<>();
+ if ( directory != null) {
+ for ( PsiFile file : directory.getFiles() ) {
+ if ( !file.getFileType().getName().equals("JAVA") ) {
+ continue;
+ }
+ PsiClass[] classes = ((PsiJavaFileImpl) file).getClasses();
+
+ if ( classes.length > 0) {
+ psiClasses.add( classes[0] );
+ }
+ }
+
+ if ( directory.getSubdirectories() != null && directory.getSubdirectories().length > 0 ) {
+ for ( PsiDirectory subDir : directory.getSubdirectories() ) {
+ psiClasses.addAll( getJavaFilesFromDir(subDir) );
+ }
+ }
+ }
+ return psiClasses;
+ }
+}
diff --git a/src/java/com/zhaow/livetemplate/RestToolkitTemplatesProvider.java b/src/main/java/com/zhaow/livetemplate/RestToolkitTemplatesProvider.java
similarity index 100%
rename from src/java/com/zhaow/livetemplate/RestToolkitTemplatesProvider.java
rename to src/main/java/com/zhaow/livetemplate/RestToolkitTemplatesProvider.java
diff --git a/src/java/com/zhaow/restful/action/AbstractBaseAction.java b/src/main/java/com/zhaow/restful/action/AbstractBaseAction.java
similarity index 100%
rename from src/java/com/zhaow/restful/action/AbstractBaseAction.java
rename to src/main/java/com/zhaow/restful/action/AbstractBaseAction.java
diff --git a/src/java/com/zhaow/restful/action/ConvertClassToJSONAction.java b/src/main/java/com/zhaow/restful/action/ConvertClassToJSONAction.java
similarity index 100%
rename from src/java/com/zhaow/restful/action/ConvertClassToJSONAction.java
rename to src/main/java/com/zhaow/restful/action/ConvertClassToJSONAction.java
diff --git a/src/java/com/zhaow/restful/action/ConvertClassToJSONCompressedAction.java b/src/main/java/com/zhaow/restful/action/ConvertClassToJSONCompressedAction.java
similarity index 100%
rename from src/java/com/zhaow/restful/action/ConvertClassToJSONCompressedAction.java
rename to src/main/java/com/zhaow/restful/action/ConvertClassToJSONCompressedAction.java
diff --git a/src/java/com/zhaow/restful/action/ConvertKtClassToJSONAction.java b/src/main/java/com/zhaow/restful/action/ConvertKtClassToJSONAction.java
similarity index 100%
rename from src/java/com/zhaow/restful/action/ConvertKtClassToJSONAction.java
rename to src/main/java/com/zhaow/restful/action/ConvertKtClassToJSONAction.java
diff --git a/src/java/com/zhaow/restful/annotations/BasePathMapping.java b/src/main/java/com/zhaow/restful/annotations/BasePathMapping.java
similarity index 100%
rename from src/java/com/zhaow/restful/annotations/BasePathMapping.java
rename to src/main/java/com/zhaow/restful/annotations/BasePathMapping.java
diff --git a/src/java/com/zhaow/restful/annotations/JaxrsHttpMethodAnnotation.java b/src/main/java/com/zhaow/restful/annotations/JaxrsHttpMethodAnnotation.java
similarity index 100%
rename from src/java/com/zhaow/restful/annotations/JaxrsHttpMethodAnnotation.java
rename to src/main/java/com/zhaow/restful/annotations/JaxrsHttpMethodAnnotation.java
diff --git a/src/java/com/zhaow/restful/annotations/JaxrsPathAnnotation.java b/src/main/java/com/zhaow/restful/annotations/JaxrsPathAnnotation.java
similarity index 100%
rename from src/java/com/zhaow/restful/annotations/JaxrsPathAnnotation.java
rename to src/main/java/com/zhaow/restful/annotations/JaxrsPathAnnotation.java
diff --git a/src/java/com/zhaow/restful/annotations/JaxrsRequestAnnotation.java b/src/main/java/com/zhaow/restful/annotations/JaxrsRequestAnnotation.java
similarity index 100%
rename from src/java/com/zhaow/restful/annotations/JaxrsRequestAnnotation.java
rename to src/main/java/com/zhaow/restful/annotations/JaxrsRequestAnnotation.java
diff --git a/src/java/com/zhaow/restful/annotations/JaxrsRequestParamAnnotation.java b/src/main/java/com/zhaow/restful/annotations/JaxrsRequestParamAnnotation.java
similarity index 100%
rename from src/java/com/zhaow/restful/annotations/JaxrsRequestParamAnnotation.java
rename to src/main/java/com/zhaow/restful/annotations/JaxrsRequestParamAnnotation.java
diff --git a/src/java/com/zhaow/restful/annotations/PathMappingAnnotation.java b/src/main/java/com/zhaow/restful/annotations/PathMappingAnnotation.java
similarity index 100%
rename from src/java/com/zhaow/restful/annotations/PathMappingAnnotation.java
rename to src/main/java/com/zhaow/restful/annotations/PathMappingAnnotation.java
diff --git a/src/java/com/zhaow/restful/annotations/SpringControllerAnnotation.java b/src/main/java/com/zhaow/restful/annotations/SpringControllerAnnotation.java
similarity index 100%
rename from src/java/com/zhaow/restful/annotations/SpringControllerAnnotation.java
rename to src/main/java/com/zhaow/restful/annotations/SpringControllerAnnotation.java
diff --git a/src/java/com/zhaow/restful/annotations/SpringRequestMethodAnnotation.java b/src/main/java/com/zhaow/restful/annotations/SpringRequestMethodAnnotation.java
similarity index 100%
rename from src/java/com/zhaow/restful/annotations/SpringRequestMethodAnnotation.java
rename to src/main/java/com/zhaow/restful/annotations/SpringRequestMethodAnnotation.java
diff --git a/src/java/com/zhaow/restful/annotations/SpringRequestParamAnnotations.java b/src/main/java/com/zhaow/restful/annotations/SpringRequestParamAnnotations.java
similarity index 100%
rename from src/java/com/zhaow/restful/annotations/SpringRequestParamAnnotations.java
rename to src/main/java/com/zhaow/restful/annotations/SpringRequestParamAnnotations.java
diff --git a/src/java/com/zhaow/restful/codegen/SpringBootGenerator.java b/src/main/java/com/zhaow/restful/codegen/SpringBootGenerator.java
similarity index 100%
rename from src/java/com/zhaow/restful/codegen/SpringBootGenerator.java
rename to src/main/java/com/zhaow/restful/codegen/SpringBootGenerator.java
diff --git a/src/java/com/zhaow/restful/common/ChineseUtill.java b/src/main/java/com/zhaow/restful/common/ChineseUtill.java
similarity index 100%
rename from src/java/com/zhaow/restful/common/ChineseUtill.java
rename to src/main/java/com/zhaow/restful/common/ChineseUtill.java
diff --git a/src/java/com/zhaow/restful/common/KtClassHelper.java b/src/main/java/com/zhaow/restful/common/KtClassHelper.java
similarity index 100%
rename from src/java/com/zhaow/restful/common/KtClassHelper.java
rename to src/main/java/com/zhaow/restful/common/KtClassHelper.java
diff --git a/src/java/com/zhaow/restful/common/KtFunctionHelper.java b/src/main/java/com/zhaow/restful/common/KtFunctionHelper.java
similarity index 100%
rename from src/java/com/zhaow/restful/common/KtFunctionHelper.java
rename to src/main/java/com/zhaow/restful/common/KtFunctionHelper.java
diff --git a/src/java/com/zhaow/restful/common/PsiAnnotationHelper.java b/src/main/java/com/zhaow/restful/common/PsiAnnotationHelper.java
similarity index 100%
rename from src/java/com/zhaow/restful/common/PsiAnnotationHelper.java
rename to src/main/java/com/zhaow/restful/common/PsiAnnotationHelper.java
diff --git a/src/java/com/zhaow/restful/common/PsiClassHelper.java b/src/main/java/com/zhaow/restful/common/PsiClassHelper.java
similarity index 100%
rename from src/java/com/zhaow/restful/common/PsiClassHelper.java
rename to src/main/java/com/zhaow/restful/common/PsiClassHelper.java
diff --git a/src/java/com/zhaow/restful/common/PsiMethodHelper.java b/src/main/java/com/zhaow/restful/common/PsiMethodHelper.java
similarity index 100%
rename from src/java/com/zhaow/restful/common/PsiMethodHelper.java
rename to src/main/java/com/zhaow/restful/common/PsiMethodHelper.java
diff --git a/src/java/com/zhaow/restful/common/RequestHelper.java b/src/main/java/com/zhaow/restful/common/RequestHelper.java
similarity index 100%
rename from src/java/com/zhaow/restful/common/RequestHelper.java
rename to src/main/java/com/zhaow/restful/common/RequestHelper.java
diff --git a/src/java/com/zhaow/restful/common/RestSupportedAnnotationHelper.java b/src/main/java/com/zhaow/restful/common/RestSupportedAnnotationHelper.java
similarity index 100%
rename from src/java/com/zhaow/restful/common/RestSupportedAnnotationHelper.java
rename to src/main/java/com/zhaow/restful/common/RestSupportedAnnotationHelper.java
diff --git a/src/java/com/zhaow/restful/common/ToolkitIcons.java b/src/main/java/com/zhaow/restful/common/ToolkitIcons.java
similarity index 96%
rename from src/java/com/zhaow/restful/common/ToolkitIcons.java
rename to src/main/java/com/zhaow/restful/common/ToolkitIcons.java
index 711125d..63ac3e3 100644
--- a/src/java/com/zhaow/restful/common/ToolkitIcons.java
+++ b/src/main/java/com/zhaow/restful/common/ToolkitIcons.java
@@ -36,7 +36,7 @@ public static Icon get(HttpMethod method) {
// OPTIONS HEAD
}
- public static final Icon MODULE = AllIcons.Modules.ModulesNode; // 16x16
+ public static final Icon MODULE = AllIcons.Nodes.ModuleGroup; // 16x16
public static final Icon Refresh = AllIcons.Actions.Refresh; // 16x16
// public static final Icon SERVICE = IconLoader.getIcon("/icons/service.png"); // 16x16
diff --git a/src/java/com/zhaow/restful/common/jaxrs/JaxrsAnnotationHelper.java b/src/main/java/com/zhaow/restful/common/jaxrs/JaxrsAnnotationHelper.java
similarity index 100%
rename from src/java/com/zhaow/restful/common/jaxrs/JaxrsAnnotationHelper.java
rename to src/main/java/com/zhaow/restful/common/jaxrs/JaxrsAnnotationHelper.java
diff --git a/src/java/com/zhaow/restful/common/spring/AntPathMatcher.java b/src/main/java/com/zhaow/restful/common/spring/AntPathMatcher.java
similarity index 100%
rename from src/java/com/zhaow/restful/common/spring/AntPathMatcher.java
rename to src/main/java/com/zhaow/restful/common/spring/AntPathMatcher.java
diff --git a/src/java/com/zhaow/restful/common/spring/RequestMappingAnnotationHelper.java b/src/main/java/com/zhaow/restful/common/spring/RequestMappingAnnotationHelper.java
similarity index 85%
rename from src/java/com/zhaow/restful/common/spring/RequestMappingAnnotationHelper.java
rename to src/main/java/com/zhaow/restful/common/spring/RequestMappingAnnotationHelper.java
index 707b551..74f1bc9 100644
--- a/src/java/com/zhaow/restful/common/spring/RequestMappingAnnotationHelper.java
+++ b/src/main/java/com/zhaow/restful/common/spring/RequestMappingAnnotationHelper.java
@@ -2,6 +2,7 @@
import com.intellij.psi.*;
+import com.zhaow.restful.annotations.PathMappingAnnotation;
import com.zhaow.restful.annotations.SpringRequestMethodAnnotation;
import com.zhaow.restful.common.PsiAnnotationHelper;
import com.zhaow.restful.common.RestSupportedAnnotationHelper;
@@ -23,13 +24,11 @@ public class RequestMappingAnnotationHelper implements RestSupportedAnnotationHe
*/
public static List getRequestPaths(PsiClass psiClass) {
PsiAnnotation[] annotations = psiClass.getModifierList().getAnnotations();
- if(annotations == null) return null;
PsiAnnotation requestMappingAnnotation = null;
List list = new ArrayList<>();
for (PsiAnnotation annotation : annotations) {
for (SpringRequestMethodAnnotation mappingAnnotation : SpringRequestMethodAnnotation.values()) {
-// for (PathMappingAnnotation mappingAnnotation : PathMappingAnnotation.allPathMappingAnnotations) {
if (annotation.getQualifiedName().equals(mappingAnnotation.getQualifiedName())) {
requestMappingAnnotation = annotation;
}
@@ -38,7 +37,7 @@ public static List getRequestPaths(PsiClass psiClass) {
if (requestMappingAnnotation != null) {
List requestMappings = getRequestMappings(requestMappingAnnotation, "");
- if (requestMappings.size()>0) {
+ if (requestMappings.size() > 0) {
list.addAll(requestMappings);
}
} else {
@@ -57,7 +56,7 @@ public static List getRequestPaths(PsiClass psiClass) {
public static String[] getRequestMappingValues(PsiClass psiClass) {
PsiAnnotation[] annotations = psiClass.getModifierList().getAnnotations();
- if(annotations == null) return null;
+ if (annotations == null) return null;
for (PsiAnnotation annotation : annotations) {
if (annotation.getQualifiedName().equals(SpringRequestMethodAnnotation.REQUEST_MAPPING.getQualifiedName())) {
@@ -80,18 +79,7 @@ public static String[] getRequestMappingValues(PsiClass psiClass) {
private static List getRequestMappings(PsiAnnotation annotation, String defaultValue) {
List mappingList = new ArrayList<>();
- SpringRequestMethodAnnotation requestAnnotation = SpringRequestMethodAnnotation.getByQualifiedName(annotation.getQualifiedName());
-
- if (requestAnnotation==null) {
- return new ArrayList<>();
- }
-
- List methodList ;
- if (requestAnnotation.methodName() != null) {
- methodList = Arrays.asList(requestAnnotation.methodName()) ;
- } else { // RequestMapping 如果没有指定具体method,不写的话,默认支持所有HTTP请求方法
- methodList = PsiAnnotationHelper.getAnnotationAttributeValues(annotation, "method");
- }
+ List methodList = PsiAnnotationHelper.getAnnotationAttributeValues(annotation, "method");
List pathList = PsiAnnotationHelper.getAnnotationAttributeValues(annotation, "value");
if (pathList.size() == 0) {
@@ -125,24 +113,25 @@ private static List getRequestMappings(PsiAnnotation annotation, St
/**
* 过滤所有注解
+ *
* @param psiMethod
* @return
*/
public static RequestPath[] getRequestPaths(PsiMethod psiMethod) {
PsiAnnotation[] annotations = psiMethod.getModifierList().getAnnotations();
- if(annotations == null) return null;
+ if (annotations == null) return null;
List list = new ArrayList<>();
for (PsiAnnotation annotation : annotations) {
for (SpringRequestMethodAnnotation mappingAnnotation : SpringRequestMethodAnnotation.values()) {
// for (PathMappingAnnotation mappingAnnotation : PathMappingAnnotation.allPathMappingAnnotations) {
- if (mappingAnnotation.getQualifiedName().equals(annotation.getQualifiedName())) {
+ if (mappingAnnotation.getQualifiedName().endsWith(annotation.getQualifiedName())) {
// String defaultValue = psiMethod.getName();
String defaultValue = "/";
List requestMappings = getRequestMappings(annotation, defaultValue);
- if (requestMappings.size()>0) {
+ if (requestMappings.size() > 0) {
list.addAll(requestMappings);
}
}
@@ -160,19 +149,19 @@ private static String getRequestMappingValue(PsiAnnotation annotation) {
// if(psiAnnotationMemberValue.)
if (StringUtils.isEmpty(value))
- value = PsiAnnotationHelper.getAnnotationAttributeValue(annotation,"path");
+ value = PsiAnnotationHelper.getAnnotationAttributeValue(annotation, "path");
return value;
}
public static String[] getRequestMappingValues(PsiAnnotation annotation) {
- String[] values ;
+ String[] values;
//一个value class com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl
//多个value class com.intellij.psi.impl.source.tree.java.PsiArrayInitializerMemberValueImpl
PsiAnnotationMemberValue attributeValue = annotation.findDeclaredAttributeValue("value");
if (attributeValue instanceof PsiLiteralExpression) {
- return new String[]{((PsiLiteralExpression) attributeValue).getValue().toString()};
+ return new String[]{((PsiLiteralExpression) attributeValue).getValue().toString()};
}
if (attributeValue instanceof PsiArrayInitializerMemberValue) {
PsiAnnotationMemberValue[] initializers = ((PsiArrayInitializerMemberValue) attributeValue).getInitializers();
@@ -183,7 +172,7 @@ public static String[] getRequestMappingValues(PsiAnnotation annotation) {
}
for (int i = 0; i < initializers.length; i++) {
- values[i] = ((PsiLiteralExpression)(initializers[i])).getValue().toString();
+ values[i] = ((PsiLiteralExpression) (initializers[i])).getValue().toString();
}
}
@@ -221,10 +210,10 @@ public static String getOneRequestMappingPath(PsiMethod psiMethod) {
}
String mappingPath;
- if(requestAnnotation != null){
+ if (requestAnnotation != null) {
PsiAnnotation annotation = psiMethod.getModifierList().findAnnotation(requestAnnotation.getQualifiedName());
mappingPath = RequestMappingAnnotationHelper.getRequestMappingValue(annotation);
- }else {
+ } else {
String methodName = psiMethod.getName();
mappingPath = StringUtils.uncapitalize(methodName);
}
@@ -233,5 +222,4 @@ public static String getOneRequestMappingPath(PsiMethod psiMethod) {
}
-
}
\ No newline at end of file
diff --git a/src/java/com/zhaow/restful/common/spring/StringUtils.java b/src/main/java/com/zhaow/restful/common/spring/StringUtils.java
similarity index 100%
rename from src/java/com/zhaow/restful/common/spring/StringUtils.java
rename to src/main/java/com/zhaow/restful/common/spring/StringUtils.java
diff --git a/src/java/com/zhaow/restful/highlight/JTextAreaHighlight.java b/src/main/java/com/zhaow/restful/highlight/JTextAreaHighlight.java
similarity index 100%
rename from src/java/com/zhaow/restful/highlight/JTextAreaHighlight.java
rename to src/main/java/com/zhaow/restful/highlight/JTextAreaHighlight.java
diff --git a/src/java/com/zhaow/restful/method/HttpMethod.java b/src/main/java/com/zhaow/restful/method/HttpMethod.java
similarity index 100%
rename from src/java/com/zhaow/restful/method/HttpMethod.java
rename to src/main/java/com/zhaow/restful/method/HttpMethod.java
diff --git a/src/java/com/zhaow/restful/method/Parameter.java b/src/main/java/com/zhaow/restful/method/Parameter.java
similarity index 100%
rename from src/java/com/zhaow/restful/method/Parameter.java
rename to src/main/java/com/zhaow/restful/method/Parameter.java
diff --git a/src/java/com/zhaow/restful/method/RequestPath.java b/src/main/java/com/zhaow/restful/method/RequestPath.java
similarity index 100%
rename from src/java/com/zhaow/restful/method/RequestPath.java
rename to src/main/java/com/zhaow/restful/method/RequestPath.java
diff --git a/src/java/com/zhaow/restful/method/action/GenerateFullUrlAction.java b/src/main/java/com/zhaow/restful/method/action/GenerateFullUrlAction.java
similarity index 100%
rename from src/java/com/zhaow/restful/method/action/GenerateFullUrlAction.java
rename to src/main/java/com/zhaow/restful/method/action/GenerateFullUrlAction.java
diff --git a/src/java/com/zhaow/restful/method/action/GenerateQueryParamAction.java b/src/main/java/com/zhaow/restful/method/action/GenerateQueryParamAction.java
similarity index 100%
rename from src/java/com/zhaow/restful/method/action/GenerateQueryParamAction.java
rename to src/main/java/com/zhaow/restful/method/action/GenerateQueryParamAction.java
diff --git a/src/java/com/zhaow/restful/method/action/GenerateQueryParamJsonAction.java b/src/main/java/com/zhaow/restful/method/action/GenerateQueryParamJsonAction.java
similarity index 100%
rename from src/java/com/zhaow/restful/method/action/GenerateQueryParamJsonAction.java
rename to src/main/java/com/zhaow/restful/method/action/GenerateQueryParamJsonAction.java
diff --git a/src/java/com/zhaow/restful/method/action/GenerateUrlAction.java b/src/main/java/com/zhaow/restful/method/action/GenerateUrlAction.java
similarity index 100%
rename from src/java/com/zhaow/restful/method/action/GenerateUrlAction.java
rename to src/main/java/com/zhaow/restful/method/action/GenerateUrlAction.java
diff --git a/src/java/com/zhaow/restful/method/action/ModuleHelper.java b/src/main/java/com/zhaow/restful/method/action/ModuleHelper.java
similarity index 100%
rename from src/java/com/zhaow/restful/method/action/ModuleHelper.java
rename to src/main/java/com/zhaow/restful/method/action/ModuleHelper.java
diff --git a/src/java/com/zhaow/restful/method/action/PropertiesHandler.java b/src/main/java/com/zhaow/restful/method/action/PropertiesHandler.java
similarity index 100%
rename from src/java/com/zhaow/restful/method/action/PropertiesHandler.java
rename to src/main/java/com/zhaow/restful/method/action/PropertiesHandler.java
diff --git a/src/java/com/zhaow/restful/method/action/SpringAnnotatedMethodAction.java b/src/main/java/com/zhaow/restful/method/action/SpringAnnotatedMethodAction.java
similarity index 100%
rename from src/java/com/zhaow/restful/method/action/SpringAnnotatedMethodAction.java
rename to src/main/java/com/zhaow/restful/method/action/SpringAnnotatedMethodAction.java
diff --git a/src/java/com/zhaow/restful/navigation/action/GotoRequestMappingAction.java b/src/main/java/com/zhaow/restful/navigation/action/GotoRequestMappingAction.java
similarity index 97%
rename from src/java/com/zhaow/restful/navigation/action/GotoRequestMappingAction.java
rename to src/main/java/com/zhaow/restful/navigation/action/GotoRequestMappingAction.java
index 2dfe3d7..51e7952 100644
--- a/src/java/com/zhaow/restful/navigation/action/GotoRequestMappingAction.java
+++ b/src/main/java/com/zhaow/restful/navigation/action/GotoRequestMappingAction.java
@@ -7,6 +7,7 @@
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataKeys;
+import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
import com.intellij.openapi.ide.CopyPasteManager;
import com.intellij.openapi.project.DumbAware;
@@ -31,12 +32,12 @@ public GotoRequestMappingAction() {
protected void gotoActionPerformed(AnActionEvent e) {
//进入导航
Project project = e.getProject();
- if (project == null) return;
+ if (project == null) { return ;};
FeatureUsageTracker.getInstance().triggerFeatureUsed("navigation.popup.service");
ChooseByNameContributor[] chooseByNameContributors = {
- new GotoRequestMappingContributor(e.getData(DataKeys.MODULE))/*,
+ new GotoRequestMappingContributor(e.getData(LangDataKeys.MODULE))/*,
new RequestMappingContributor()*/
};
@@ -68,8 +69,7 @@ public void elementChosen(ChooseByNamePopup chooseByNamePopup, Object element) {
}
-// TODO IDEA 2018 删了?
-// @Override
+ @Override
protected void showNavigationPopup(AnActionEvent e,
ChooseByNameModel model,
final GotoActionCallback callback,
diff --git a/src/java/com/zhaow/restful/navigation/action/GotoRequestMappingConfiguration.java b/src/main/java/com/zhaow/restful/navigation/action/GotoRequestMappingConfiguration.java
similarity index 100%
rename from src/java/com/zhaow/restful/navigation/action/GotoRequestMappingConfiguration.java
rename to src/main/java/com/zhaow/restful/navigation/action/GotoRequestMappingConfiguration.java
diff --git a/src/java/com/zhaow/restful/navigation/action/GotoRequestMappingContributor.java b/src/main/java/com/zhaow/restful/navigation/action/GotoRequestMappingContributor.java
similarity index 54%
rename from src/java/com/zhaow/restful/navigation/action/GotoRequestMappingContributor.java
rename to src/main/java/com/zhaow/restful/navigation/action/GotoRequestMappingContributor.java
index 6212c41..ac1fa0b 100644
--- a/src/java/com/zhaow/restful/navigation/action/GotoRequestMappingContributor.java
+++ b/src/main/java/com/zhaow/restful/navigation/action/GotoRequestMappingContributor.java
@@ -1,16 +1,15 @@
package com.zhaow.restful.navigation.action;
+import com.github.aborn.wdt.core.RestServiceDataManager;
import com.intellij.navigation.ChooseByNameContributor;
import com.intellij.navigation.NavigationItem;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
-import com.zhaow.restful.common.ServiceHelper;
import org.jetbrains.annotations.NotNull;
import java.util.List;
-//
public class GotoRequestMappingContributor implements ChooseByNameContributor {
Module myModule;
@@ -20,22 +19,24 @@ public GotoRequestMappingContributor(Module myModule) {
this.myModule = myModule;
}
- //Returns the list of names for the specified project to which it is possible to navigate by name. 所有该类型的文件列表
@NotNull
@Override
public String[] getNames(Project project, boolean onlyThisModuleChecked) {
String[] names = null;
List itemList;
- ///todo 查找 project 中所有符合 rest url 类型文件,包含 request 接口
+
+ // data source
if (onlyThisModuleChecked && myModule != null) {
- itemList = ServiceHelper.buildRestServiceItemListUsingResolver(myModule);
+ itemList = RestServiceDataManager.buildRestServiceItemListFrom(project, myModule);
} else {
- itemList = ServiceHelper.buildRestServiceItemListUsingResolver(project);
+ itemList = RestServiceDataManager.buildRestServiceItemListFrom(project);
}
navItem = itemList;
- if (itemList != null) names = new String[itemList.size()];
+ if (itemList != null) {
+ names = new String[itemList.size()];
+ }
for (int i = 0; i < itemList.size(); i++) {
RestServiceItem requestMappingNavigationItem = itemList.get(i);
@@ -44,26 +45,10 @@ public String[] getNames(Project project, boolean onlyThisModuleChecked) {
return names;
}
-/*
-
- private List findAllRestServiceItemList(Module myModule) {
-// List itemList = ServiceHelper.buildRestServiceItemList(myModule);
- return ServiceHelper.buildRestServiceItemListUsingResolver(myModule);
- }
-
- private List findAllRestServiceItemList(Project project) {
-// Arrays.stream(SpringRequestAnnotation.values()).flatMap(annotation -> )
- List itemList = ServiceHelper.buildRestServiceItemList(project);
-
- return itemList;
- }
-*/
- //Returns the list of navigation items matching the specified name. 匹配,对比
@NotNull
@Override
public NavigationItem[] getItemsByName(String name, String pattern, Project project, boolean onlyThisModuleChecked) {
-// AntPathMatcher
NavigationItem[] navigationItems = navItem.stream().filter(item -> item.getName().equals(name)).toArray(NavigationItem[]::new);
return navigationItems;
diff --git a/src/java/com/zhaow/restful/navigation/action/GotoRequestMappingModel.java b/src/main/java/com/zhaow/restful/navigation/action/GotoRequestMappingModel.java
similarity index 100%
rename from src/java/com/zhaow/restful/navigation/action/GotoRequestMappingModel.java
rename to src/main/java/com/zhaow/restful/navigation/action/GotoRequestMappingModel.java
diff --git a/src/java/com/zhaow/restful/navigation/action/GotoRequestMappingProvider.java b/src/main/java/com/zhaow/restful/navigation/action/GotoRequestMappingProvider.java
similarity index 100%
rename from src/java/com/zhaow/restful/navigation/action/GotoRequestMappingProvider.java
rename to src/main/java/com/zhaow/restful/navigation/action/GotoRequestMappingProvider.java
diff --git a/src/main/java/com/zhaow/restful/navigation/action/RestServiceChooseByNamePopup.java b/src/main/java/com/zhaow/restful/navigation/action/RestServiceChooseByNamePopup.java
new file mode 100644
index 0000000..a9a1553
--- /dev/null
+++ b/src/main/java/com/zhaow/restful/navigation/action/RestServiceChooseByNamePopup.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2000-2017 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.zhaow.restful.navigation.action;
+
+import com.intellij.ide.util.gotoByName.ChooseByNameItemProvider;
+import com.intellij.ide.util.gotoByName.ChooseByNameModel;
+import com.intellij.ide.util.gotoByName.ChooseByNamePopup;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Key;
+import com.intellij.openapi.util.text.StringUtil;
+import com.zhaow.utils.ToolkitUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class RestServiceChooseByNamePopup extends ChooseByNamePopup {
+ public static final Key CHOOSE_BY_NAME_POPUP_IN_PROJECT_KEY = new Key<>("ChooseByNamePopup");
+
+ protected RestServiceChooseByNamePopup(@Nullable Project project, @NotNull ChooseByNameModel model, @NotNull ChooseByNameItemProvider provider, @Nullable ChooseByNamePopup oldPopup, @Nullable String predefinedText, boolean mayRequestOpenInCurrentWindow, int initialIndex) {
+ super(project, model, provider, oldPopup, predefinedText, mayRequestOpenInCurrentWindow, initialIndex);
+ }
+
+ public static RestServiceChooseByNamePopup createPopup(final Project project,
+ @NotNull final ChooseByNameModel model,
+ @NotNull ChooseByNameItemProvider provider,
+ @Nullable final String predefinedText,
+ boolean mayRequestOpenInCurrentWindow,
+ final int initialIndex) {
+ if (!StringUtil.isEmptyOrSpaces(predefinedText)) {
+ return new RestServiceChooseByNamePopup(project, model, provider, null, predefinedText, mayRequestOpenInCurrentWindow, initialIndex);
+ }
+
+ final RestServiceChooseByNamePopup oldPopup = project == null ? null : project.getUserData(CHOOSE_BY_NAME_POPUP_IN_PROJECT_KEY);
+ if (oldPopup != null) {
+ oldPopup.close(false);
+ }
+ RestServiceChooseByNamePopup newPopup = new RestServiceChooseByNamePopup(project, model, provider, oldPopup, predefinedText, mayRequestOpenInCurrentWindow, initialIndex);
+
+ if (project != null) {
+ project.putUserData(CHOOSE_BY_NAME_POPUP_IN_PROJECT_KEY, newPopup);
+ }
+ return newPopup;
+ }
+
+ @Override
+ public String transformPattern(String pattern) {
+ final ChooseByNameModel model = getModel();
+ return getTransformedPattern(pattern, model);
+ }
+
+ //TODO: resolve PathVariable
+ public static String getTransformedPattern(String pattern, ChooseByNameModel model) {
+ if (!(model instanceof GotoRequestMappingModel)) {
+ return pattern;
+ }
+
+ pattern = ToolkitUtil.removeRedundancyMarkup(pattern);
+ return pattern;
+ }
+
+
+ @Nullable
+ public String getMemberPattern() {
+ final String enteredText = getTrimmedText();
+ final int index = enteredText.lastIndexOf('#');
+ if (index == -1) {
+ return null;
+ }
+
+ String name = enteredText.substring(index + 1).trim();
+ return StringUtil.isEmptyOrSpaces(name) ? null : name;
+ }
+
+}
\ No newline at end of file
diff --git a/src/java/com/zhaow/restful/navigation/action/RestServiceItem.java b/src/main/java/com/zhaow/restful/navigation/action/RestServiceItem.java
similarity index 100%
rename from src/java/com/zhaow/restful/navigation/action/RestServiceItem.java
rename to src/main/java/com/zhaow/restful/navigation/action/RestServiceItem.java
diff --git a/src/java/com/zhaow/restful/navigator/CopyFullUrlAction.java b/src/main/java/com/zhaow/restful/navigator/CopyFullUrlAction.java
similarity index 100%
rename from src/java/com/zhaow/restful/navigator/CopyFullUrlAction.java
rename to src/main/java/com/zhaow/restful/navigator/CopyFullUrlAction.java
diff --git a/src/java/com/zhaow/restful/navigator/EditSourceAction.java b/src/main/java/com/zhaow/restful/navigator/EditSourceAction.java
similarity index 100%
rename from src/java/com/zhaow/restful/navigator/EditSourceAction.java
rename to src/main/java/com/zhaow/restful/navigator/EditSourceAction.java
diff --git a/src/java/com/zhaow/restful/navigator/RefreshProjectAction.java b/src/main/java/com/zhaow/restful/navigator/RefreshProjectAction.java
similarity index 83%
rename from src/java/com/zhaow/restful/navigator/RefreshProjectAction.java
rename to src/main/java/com/zhaow/restful/navigator/RefreshProjectAction.java
index 99a00cd..abd2814 100644
--- a/src/java/com/zhaow/restful/navigator/RefreshProjectAction.java
+++ b/src/main/java/com/zhaow/restful/navigator/RefreshProjectAction.java
@@ -11,20 +11,17 @@
public class RefreshProjectAction extends AnAction {
protected void perform(@NotNull RestServiceProjectsManager manager) {
- manager.forceUpdateAllProjects();
+ manager.forceUpdateAllProjects(this);
}
@Override
public void actionPerformed(AnActionEvent e) {
final Project project = getProject(e.getDataContext());
- /*if(project == null) return ;
- RestServiceProjectsManager manager = RestServiceProjectsManager.getInstance(project);
- perform(manager);*/
-
RestServicesNavigator servicesNavigator = RestServicesNavigator.getInstance(project);
servicesNavigator.initComponent();
+ servicesNavigator.atachEvent(e);
servicesNavigator.scheduleStructureUpdate();
}
diff --git a/src/java/com/zhaow/restful/navigator/RestServiceDetail.form b/src/main/java/com/zhaow/restful/navigator/RestServiceDetail.form
similarity index 100%
rename from src/java/com/zhaow/restful/navigator/RestServiceDetail.form
rename to src/main/java/com/zhaow/restful/navigator/RestServiceDetail.form
diff --git a/src/java/com/zhaow/restful/navigator/RestServiceDetail.java b/src/main/java/com/zhaow/restful/navigator/RestServiceDetail.java
similarity index 100%
rename from src/java/com/zhaow/restful/navigator/RestServiceDetail.java
rename to src/main/java/com/zhaow/restful/navigator/RestServiceDetail.java
diff --git a/src/java/com/zhaow/restful/navigator/RestServiceProject.java b/src/main/java/com/zhaow/restful/navigator/RestServiceProject.java
similarity index 100%
rename from src/java/com/zhaow/restful/navigator/RestServiceProject.java
rename to src/main/java/com/zhaow/restful/navigator/RestServiceProject.java
diff --git a/src/main/java/com/zhaow/restful/navigator/RestServiceProjectsManager.java b/src/main/java/com/zhaow/restful/navigator/RestServiceProjectsManager.java
new file mode 100644
index 0000000..5b1e8f9
--- /dev/null
+++ b/src/main/java/com/zhaow/restful/navigator/RestServiceProjectsManager.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2000-2017 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.zhaow.restful.navigator;
+
+import com.github.aborn.wdt.core.RestServiceDataManager;
+import com.intellij.openapi.Disposable;
+import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.components.PersistentStateComponent;
+import com.intellij.openapi.components.ProjectComponent;
+import com.intellij.openapi.components.State;
+import com.intellij.openapi.project.DumbService;
+import com.intellij.openapi.project.Project;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+@State(name = "RestServiceProjectsManager")
+public class RestServiceProjectsManager implements PersistentStateComponent, Disposable, ProjectComponent {
+ protected final Project myProject;
+ private AnAction anAction;
+ private RestServicesNavigatorState myState = new RestServicesNavigatorState();
+
+ public static RestServiceProjectsManager getInstance(Project p) {
+ return p.getComponent(RestServiceProjectsManager.class);
+ }
+
+ public RestServiceProjectsManager(Project project) {
+ myProject = project;
+// System.out.println("RestServiceProjectsManager");
+ }
+
+
+ @Override
+ public void dispose() {
+
+ }
+
+ @Nullable
+ @Override
+ public RestServicesNavigatorState getState() {
+ return null;
+ }
+
+ @Override
+ public void loadState(RestServicesNavigatorState state) {
+
+ }
+
+ public List getServiceProjects(AnActionEvent anActionEvent) {
+ return DumbService.getInstance(myProject).runReadActionInSmartMode(() ->
+ RestServiceDataManager.buildRestServiceData(myProject)
+ );
+ }
+
+
+ public void forceUpdateAllProjects(AnAction anAction) {
+ this.anAction = anAction;
+ }
+}
diff --git a/src/java/com/zhaow/restful/navigator/RestServiceStructure.java b/src/main/java/com/zhaow/restful/navigator/RestServiceStructure.java
similarity index 70%
rename from src/java/com/zhaow/restful/navigator/RestServiceStructure.java
rename to src/main/java/com/zhaow/restful/navigator/RestServiceStructure.java
index ec31e14..e42c408 100644
--- a/src/java/com/zhaow/restful/navigator/RestServiceStructure.java
+++ b/src/main/java/com/zhaow/restful/navigator/RestServiceStructure.java
@@ -1,13 +1,15 @@
package com.zhaow.restful.navigator;
-
import com.intellij.icons.AllIcons;
import com.intellij.lang.java.JavaLanguage;
+import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
+import com.intellij.ui.tree.AsyncTreeModel;
+import com.intellij.ui.tree.StructureTreeModel;
import com.intellij.ui.treeStructure.*;
import com.intellij.util.OpenSourceUtil;
import com.zhaow.restful.common.KtFunctionHelper;
@@ -30,19 +32,23 @@
import java.util.List;
import java.util.Map;
-public class RestServiceStructure extends SimpleTreeStructure {
+public class RestServiceStructure extends SimpleTreeStructure {
public static final Logger LOG = Logger.getInstance(RestServiceStructure.class);
- private SimpleTreeBuilder myTreeBuilder;
+ private SimpleTreeBuilder myTreeBuilder;
+ private AsyncTreeModel asyncTreeModel;
+ private StructureTreeModel structureTreeModel;
+
private SimpleTree myTree;
private final Project myProject;
- private RootNode myRoot = new RootNode();
+ private RootNode myRoot = new RootNode();
private int serviceCount = 0;
+ private AnActionEvent anActionEvent;
private final RestServiceProjectsManager myProjectsManager;
- RestServiceDetail myRestServiceDetail ;
+ RestServiceDetail myRestServiceDetail;
private final Map myProjectToNodeMapping = new THashMap<>();
@@ -56,11 +62,14 @@ public RestServiceStructure(Project project,
configureTree(tree);
- myTreeBuilder = new SimpleTreeBuilder(tree, (DefaultTreeModel)tree.getModel(), this, null);
+ myTreeBuilder = new SimpleTreeBuilder(tree, (DefaultTreeModel) tree.getModel(), this, null);
Disposer.register(myProject, myTreeBuilder);
- myTreeBuilder.initRoot();
- myTreeBuilder.expand(myRoot, null);
+ //myTreeBuilder.initRoot();
+ //myTreeBuilder.expand(myRoot, null);
+
+ // structureTreeModel = new StructureTreeModel(this, Disposable ?);
+ //asyncTreeModel = new AsyncTreeModel()
}
@@ -74,51 +83,28 @@ public RootNode getRootElement() {
return myRoot;
}
- public void update() {
-// myTreeBuilder.setClearOnHideDelay(4);
-// myTreeBuilder.cleanUp();
-// myTreeBuilder.initRoot();
-// myTreeBuilder.expand(myRoot, null);
- // rest service controller
-/*
- SimpleTree tree1 = new SimpleTree();
- myRoot = new RootNode();
- myTreeBuilder = new SimpleTreeBuilder(tree1, (DefaultTreeModel)tree1.getModel(), this, null);
- Disposer.register(myProject, myTreeBuilder);
-
- myTreeBuilder.initRoot();
- myTreeBuilder.expand(myRoot, null);*/
-// List projects = myProjectsManager.getProjects();
-// List projects = RestServiceProjectsManager.getInstance(myProject).getProjects();
-/* if (!ModalityState.current().equals(ModalityState.any()) && myProject.isInitialized()) {
- PsiDocumentManager.getInstance(myProject).commitAllDocuments();
- }*/
-
- List projects = RestServiceProjectsManager.getInstance(myProject).getServiceProjects();
-
+ public void update(AnActionEvent event) {
+ RestServiceProjectsManager restServiceProjectsManager = RestServiceProjectsManager.getInstance(myProject);
+ if (structureTreeModel == null) {
+ structureTreeModel = new StructureTreeModel(this, restServiceProjectsManager);
+ }
-// Set deleted = new HashSet<>(myProjectToNodeMapping.keySet());
-// deleted.removeAll(projects);
+ List projects = restServiceProjectsManager.getServiceProjects(event);
updateProjects(projects);
}
public void updateProjects(List projects) {
serviceCount = 0;
-// DefaultMutableTreeNode rootTreeNode = createTreeNode("REST Services");
-// myTreeBuilder.addSubtreeToUpdate(rootTreeNode);
for (RestServiceProject each : projects) {
serviceCount += each.serviceItems.size();
ProjectNode node = findNodeFor(each);
if (node == null) {
- node = new ProjectNode(myRoot,each);
+ node = new ProjectNode(myRoot, each);
myProjectToNodeMapping.put(each, node);
}
}
- myTreeBuilder.getUi().doUpdateFromRoot();
-// ((CachingSimpleNode) myRoot.getParent()).cleanUpCache();
-// myRoot.childrenChanged();
myRoot.updateProjectNodes(projects);
}
@@ -127,16 +113,15 @@ private ProjectNode findNodeFor(RestServiceProject project) {
}
public void updateFrom(SimpleNode node) {
- myTreeBuilder.addSubtreeToUpdateByElement(node);
+ if (node != null) {
+ //structureTreeModel.expand(node, myTree, );
+ myTreeBuilder.addSubtreeToUpdateByElement(node);
+ }
}
private void updateUpTo(SimpleNode node) {
SimpleNode each = node;
while (each != null) {
- SimpleNode parent = each.getParent();
- /*if (parent != null) {
- ((BaseSimpleNode)parent).cleanUpCache();
- }*/
updateFrom(each);
each = each.getParent();
}
@@ -149,8 +134,7 @@ public static List getSelectedNodes(SimpleTree tre
filtered.clear();
break;
}
- //noinspection unchecked
- filtered.add((T)node);
+ filtered.add((T) node);
}
return filtered;
}
@@ -167,7 +151,7 @@ private static List getSelectedNodes(SimpleTree tree) {
}
- public abstract class BaseSimpleNode extends CachingSimpleNode{
+ public abstract class BaseSimpleNode extends CachingSimpleNode {
protected BaseSimpleNode(SimpleNode aParent) {
super(aParent);
@@ -194,7 +178,7 @@ protected void childrenChanged() {
BaseSimpleNode each = this;
while (each != null) {
each.cleanUpCache();
- each = (BaseSimpleNode)each.getParent();
+ each = (BaseSimpleNode) each.getParent();
}
updateUpTo(this);
}
@@ -203,11 +187,12 @@ protected void childrenChanged() {
public class RootNode extends BaseSimpleNode {
- List projectNodes = new ArrayList<>();
+ List projectNodes = new ArrayList<>();
+
protected RootNode() {
super(null);
- getTemplatePresentation().setIcon(AllIcons.Actions.Module);
- setIcon(AllIcons.Actions.Module); //兼容 IDEA 2016
+ getTemplatePresentation().setIcon(AllIcons.Nodes.Module);
+ setIcon(AllIcons.Nodes.Module); //兼容 IDEA 2016
}
@Override
@@ -218,34 +203,24 @@ protected SimpleNode[] buildChildren() {
@Override
public String getName() {
String s = "Found %d services ";// in {controllerCount} Controllers";
- return serviceCount > 0 ? String.format(s,serviceCount) : null;
+ return serviceCount > 0 ? String.format(s, serviceCount) : null;
}
@Override
public void handleSelection(SimpleTree tree) {
-// System.out.println("ProjectNode handleSelection");
resetRestServiceDetail();
}
public void updateProjectNodes(List projects) {
-// cleanUpCache();
projectNodes.clear();
for (RestServiceProject project : projects) {
- ProjectNode projectNode = new ProjectNode(this,project);
+ ProjectNode projectNode = new ProjectNode(this, project);
projectNodes.add(projectNode);
}
-// projectNode.updateServiceNodes();
-
- /*SimpleNode parent = getParent();
- if (parent != null) {
- ((BaseSimpleNode)parent).cleanUpCache();
- }*/
updateFrom(getParent());
childrenChanged();
-// updateUpTo(this);
-
}
}
@@ -255,8 +230,7 @@ public class ProjectNode extends BaseSimpleNode {
RestServiceProject myProject;
- public ProjectNode(SimpleNode parent,/*,List serviceItems*/RestServiceProject project) {
-// super(parent);
+ public ProjectNode(SimpleNode parent, RestServiceProject project) {
super(parent);
myProject = project;
@@ -269,19 +243,14 @@ public ProjectNode(SimpleNode parent,/*,List serviceItems*/Rest
private void updateServiceNodes(List serviceItems) {
serviceNodes.clear();
for (RestServiceItem serviceItem : serviceItems) {
- serviceNodes.add(new ServiceNode(this,serviceItem));
+ serviceNodes.add(new ServiceNode(this, serviceItem));
}
- /* for (int i = 0; i < 4; i++) {
- serviceNodes.add(new ServiceNode(this));
- }*/
SimpleNode parent = getParent();
if (parent != null) {
- ((BaseSimpleNode)parent).cleanUpCache();
+ ((BaseSimpleNode) parent).cleanUpCache();
}
updateFrom(parent);
-// childrenChanged();
-// updateUpTo(this);
}
@Override
@@ -301,22 +270,14 @@ public String getName() {
protected String getActionId() {
return "Toolkit.RefreshServices";
}
-/*
- @Override
- @Nullable
- @NonNls
- protected String getMenuId() {
- return "Toolkit.ReimportServices";
- }*/
@Override
public void handleSelection(SimpleTree tree) {
-// System.out.println("ProjectNode handleSelection");
resetRestServiceDetail();
}
+
@Override
public void handleDoubleClickOrEnter(SimpleTree tree, InputEvent inputEvent) {
-// System.out.println("ProjectNode handleDoubleClickOrEnter");
}
}
@@ -342,9 +303,6 @@ protected SimpleNode[] buildChildren() {
@Override
public String getName() {
String name = myServiceItem.getName();
-/* if (ToolkitIcons.METHOD.get(myServiceItem.getMethod()) == null && myServiceItem.getMethod() != null) {
- name += " [" + myServiceItem.getMethod() + "]";
- }*/
return name;
}
@@ -356,29 +314,29 @@ public void handleSelection(SimpleTree tree) {
/**
* 显示服务详情,url
- * */
+ */
private void showServiceDetail(RestServiceItem serviceItem) {
myRestServiceDetail.resetRequestTabbedPane();
- String method = serviceItem.getMethod()!=null? String.valueOf(serviceItem.getMethod()) : HttpMethod.GET.name();
+ String method = serviceItem.getMethod() != null ? String.valueOf(serviceItem.getMethod()) : HttpMethod.GET.name();
myRestServiceDetail.setMethodValue(method);
myRestServiceDetail.setUrlValue(serviceItem.getFullUrl());
String requestParams = "";
String requestBodyJson = "";
PsiElement psiElement = serviceItem.getPsiElement();
- if (psiElement.getLanguage()== JavaLanguage.INSTANCE) {
+ if (psiElement.getLanguage() == JavaLanguage.INSTANCE) {
PsiMethodHelper psiMethodHelper = PsiMethodHelper.create(serviceItem.getPsiMethod()).withModule(serviceItem.getModule());
requestParams = psiMethodHelper.buildParamString();
requestBodyJson = psiMethodHelper.buildRequestBodyJson();
- }else if(psiElement.getLanguage()== KotlinLanguage.INSTANCE){
+ } else if (psiElement.getLanguage() == KotlinLanguage.INSTANCE) {
if (psiElement instanceof KtNamedFunction) {
KtNamedFunction ktNamedFunction = (KtNamedFunction) psiElement;
KtFunctionHelper ktFunctionHelper = KtFunctionHelper.create(ktNamedFunction).withModule(serviceItem.getModule());
requestParams = ktFunctionHelper.buildParamString();
- requestBodyJson =ktFunctionHelper.buildRequestBodyJson();
+ requestBodyJson = ktFunctionHelper.buildRequestBodyJson();
}
}
@@ -406,11 +364,11 @@ public void handleDoubleClickOrEnter(SimpleTree tree, InputEvent inputEvent) {
RestServicesNavigator.getInstance(myServiceItem.getModule().getProject()).scheduleStructureUpdate();
}
- if (psiElement.getLanguage()== JavaLanguage.INSTANCE) {
+ if (psiElement.getLanguage() == JavaLanguage.INSTANCE) {
PsiMethod psiMethod = myServiceItem.getPsiMethod();
OpenSourceUtil.navigate(psiMethod);
- }else if(psiElement.getLanguage()== KotlinLanguage.INSTANCE){
+ } else if (psiElement.getLanguage() == KotlinLanguage.INSTANCE) {
if (psiElement instanceof KtNamedFunction) {
KtNamedFunction ktNamedFunction = (KtNamedFunction) psiElement;
OpenSourceUtil.navigate(ktNamedFunction);
@@ -425,14 +383,6 @@ protected String getMenuId() {
return "Toolkit.NavigatorServiceMenu";
}
-/*
- @Override
- @Nullable
- @NonNls
- protected String getActionId() {
- return "Toolkit.Navigator";
- }*/
-
}
private void resetRestServiceDetail() {
diff --git a/src/java/com/zhaow/restful/navigator/RestServicesNavigator.java b/src/main/java/com/zhaow/restful/navigator/RestServicesNavigator.java
similarity index 72%
rename from src/java/com/zhaow/restful/navigator/RestServicesNavigator.java
rename to src/main/java/com/zhaow/restful/navigator/RestServicesNavigator.java
index 1af6c43..4b8cc9a 100644
--- a/src/java/com/zhaow/restful/navigator/RestServicesNavigator.java
+++ b/src/main/java/com/zhaow/restful/navigator/RestServicesNavigator.java
@@ -1,7 +1,7 @@
package com.zhaow.restful.navigator;
-
import com.intellij.ide.util.treeView.TreeState;
+import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.*;
import com.intellij.openapi.diagnostic.Logger;
@@ -27,7 +27,7 @@
import java.net.URL;
@State(name = "RestServicesNavigator", storages = {@Storage(StoragePathMacros.WORKSPACE_FILE)})
-public class RestServicesNavigator extends AbstractProjectComponent implements PersistentStateComponent, ProjectComponent {
+public class RestServicesNavigator implements PersistentStateComponent, ProjectComponent {
public static final Logger LOG = Logger.getInstance(RestServicesNavigator.class);
public static final String TOOL_WINDOW_ID = "RestServices";
@@ -39,14 +39,13 @@ public class RestServicesNavigator extends AbstractProjectComponent implements P
RestServicesNavigatorState myState = new RestServicesNavigatorState();
private SimpleTree myTree;
-// private JTree myTree;
protected RestServiceStructure myStructure;
private ToolWindowEx myToolWindow;
+ private AnActionEvent anActionEvent;
private RestServiceProjectsManager myProjectsManager;
- public RestServicesNavigator(Project myProject,RestServiceProjectsManager projectsManager) {
- super(myProject);
+ public RestServicesNavigator(Project myProject, RestServiceProjectsManager projectsManager) {
this.myProject = myProject;
myProjectsManager = projectsManager;
}
@@ -57,11 +56,9 @@ public static RestServicesNavigator getInstance(Project p) {
}
-
private void initTree() {
myTree = new SimpleTree() {
-
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
@@ -72,7 +69,6 @@ protected void paintComponent(Graphics g) {
if (myProject.isInitialized()) {
return;
}
-// if (myProjectsManager.hasProjects()) return;
myLabel.setFont(getFont());
myLabel.setBackground(getBackground());
@@ -85,8 +81,7 @@ protected void paintComponent(Graphics g) {
Graphics g2 = g.create(bounds.x + x, bounds.y + 20, bounds.width, bounds.height);
try {
myLabel.paint(g2);
- }
- finally {
+ } finally {
g2.dispose();
}
}
@@ -99,22 +94,29 @@ protected void paintComponent(Graphics g) {
@Override
public void initComponent() {
listenForProjectsChanges();
-// ToolkitUtil.runWhenInitialized(myProject, (DumbAwareRunnable)() -> {
ToolkitUtil.runWhenInitialized(myProject, () -> {
- if (myProject.isDisposed()) return;
+ if (myProject.isDisposed()) {
+ return;
+ }
initToolWindow();
});
}
+ public void atachEvent(AnActionEvent anActionEvent) {
+ this.anActionEvent = anActionEvent;
+ }
+
private void initToolWindow() {
final ToolWindowManagerEx manager = ToolWindowManagerEx.getInstanceEx(myProject);
- myToolWindow = (ToolWindowEx)manager.getToolWindow(TOOL_WINDOW_ID);
- if(myToolWindow != null) {return;}
+ myToolWindow = (ToolWindowEx) manager.getToolWindow(TOOL_WINDOW_ID);
+ if (myToolWindow != null) {
+ return;
+ }
initTree();
- myToolWindow = (ToolWindowEx)manager.registerToolWindow(TOOL_WINDOW_ID, false, ToolWindowAnchor.RIGHT, myProject, true);
+ myToolWindow = (ToolWindowEx) manager.registerToolWindow(TOOL_WINDOW_ID, false, ToolWindowAnchor.RIGHT, myProject, true);
myToolWindow.setIcon(ToolkitIcons.SERVICE);
JPanel panel = new RestServicesNavigatorPanel(myProject, myTree);
@@ -129,7 +131,9 @@ private void initToolWindow() {
@Override
public void stateChanged() {
- if (myToolWindow.isDisposed()) return;
+ if (myToolWindow.isDisposed()) {
+ return;
+ }
boolean visible = myToolWindow.isVisible();
if (!visible || wasVisible) {
return;
@@ -139,32 +143,24 @@ public void stateChanged() {
}
};
manager.addToolWindowManagerListener(listener, myProject);
-
- //todo: 扩展 toolWindows 右键
-/* ActionManager actionManager = ActionManager.getInstance();
- DefaultActionGroup group = new DefaultActionGroup();
- group.add(actionManager.getAction("Maven.GroupProjects"));
- group.add(actionManager.getAction("Maven.ShowIgnored"));
- group.add(actionManager.getAction("Maven.ShowBasicPhasesOnly"));
- group.add(actionManager.getAction("Maven.AlwaysShowArtifactId")); // 默认显示 app serviceName
- group.add(actionManager.getAction("Maven.ShowVersions")); //
- myToolWindow.setAdditionalGearActions(group);*/
-
}
public void scheduleStructureUpdate() {
- scheduleStructureRequest(() -> myStructure.update());
+ scheduleStructureRequest(() -> myStructure.update(anActionEvent));
}
+
private void scheduleStructureRequest(final Runnable r) {
- if (myToolWindow == null) return;
+ if (myToolWindow == null) {
+ return;
+ }
-// ToolkitUtil.invokeLater(myProject, () -> {
-// ToolkitUtil.runWhenInitialized(myProject, () -> {
ToolkitUtil.runWhenProjectIsReady(myProject, () -> {
- if (!myToolWindow.isVisible()) return;
+ if (!myToolWindow.isVisible()) {
+ return;
+ }
boolean shouldCreate = myStructure == null;
if (shouldCreate) {
@@ -172,23 +168,12 @@ private void scheduleStructureRequest(final Runnable r) {
}
r.run();
-// fixme: compat
-// if (shouldCreate) {
-// TreeState.createFrom(myState.treeState).applyTo(myTree);
-// }
- });
- // if (isUnitTestMode()) {
-/* if (myProject.isInitialized() *//* myProject.isDisposed() *//*) {
- if (myStructure != null) {
- r.run();
- }
- return;
- }*/
+ });
}
private void initStructure() {
- myStructure = new RestServiceStructure(myProject,myProjectsManager,myTree);
+ myStructure = new RestServiceStructure(myProject, myProjectsManager, myTree);
}
@@ -205,8 +190,7 @@ public RestServicesNavigatorState getState() {
try {
myState.treeState = new Element("root");
TreeState.createOn(myTree).writeExternal(myState.treeState);
- }
- catch (WriteExternalException e) {
+ } catch (WriteExternalException e) {
LOG.warn(e);
}
}
diff --git a/src/java/com/zhaow/restful/navigator/RestServicesNavigatorPanel.java b/src/main/java/com/zhaow/restful/navigator/RestServicesNavigatorPanel.java
similarity index 100%
rename from src/java/com/zhaow/restful/navigator/RestServicesNavigatorPanel.java
rename to src/main/java/com/zhaow/restful/navigator/RestServicesNavigatorPanel.java
diff --git a/src/java/com/zhaow/restful/navigator/RestServicesNavigatorState.java b/src/main/java/com/zhaow/restful/navigator/RestServicesNavigatorState.java
similarity index 100%
rename from src/java/com/zhaow/restful/navigator/RestServicesNavigatorState.java
rename to src/main/java/com/zhaow/restful/navigator/RestServicesNavigatorState.java
diff --git a/src/java/com/zhaow/restful/popup/action/PopupChoiceAction.java b/src/main/java/com/zhaow/restful/popup/action/PopupChoiceAction.java
similarity index 100%
rename from src/java/com/zhaow/restful/popup/action/PopupChoiceAction.java
rename to src/main/java/com/zhaow/restful/popup/action/PopupChoiceAction.java
diff --git a/src/java/com/zhaow/restful/statistics/RestfulToolkitFeaturesProvider.java b/src/main/java/com/zhaow/restful/statistics/RestfulToolkitFeaturesProvider.java
similarity index 85%
rename from src/java/com/zhaow/restful/statistics/RestfulToolkitFeaturesProvider.java
rename to src/main/java/com/zhaow/restful/statistics/RestfulToolkitFeaturesProvider.java
index bfc4588..98990f0 100644
--- a/src/java/com/zhaow/restful/statistics/RestfulToolkitFeaturesProvider.java
+++ b/src/main/java/com/zhaow/restful/statistics/RestfulToolkitFeaturesProvider.java
@@ -4,7 +4,6 @@
import com.intellij.featureStatistics.FeatureDescriptor;
import com.intellij.featureStatistics.GroupDescriptor;
import com.intellij.featureStatistics.ProductivityFeaturesProvider;
-import com.intellij.remoteServer.util.CloudBundle;
import java.util.Collections;
@@ -17,7 +16,7 @@ public FeatureDescriptor[] getFeatureDescriptors() {
return new FeatureDescriptor[]{new FeatureDescriptor(UPLOAD_SSH_KEY_FEATURE_ID,
CLOUDS_GROUP_ID,
"UploadSshKey.html",
- CloudBundle.getText("upload.ssh.key.display.name"),
+ "upload.ssh.key.display.name",
0,
0,
Collections.emptySet(),
@@ -29,7 +28,7 @@ public FeatureDescriptor[] getFeatureDescriptors() {
public GroupDescriptor[] getGroupDescriptors()
{
return new GroupDescriptor[] {
- new GroupDescriptor(CLOUDS_GROUP_ID, CloudBundle.getText("group.display.name"))
+ new GroupDescriptor(CLOUDS_GROUP_ID, "group.display.name")
};
}
diff --git a/src/java/com/zhaow/utils/JsonUtils.java b/src/main/java/com/zhaow/utils/JsonUtils.java
similarity index 100%
rename from src/java/com/zhaow/utils/JsonUtils.java
rename to src/main/java/com/zhaow/utils/JsonUtils.java
diff --git a/src/java/com/zhaow/utils/RestServiceDataKeys.java b/src/main/java/com/zhaow/utils/RestServiceDataKeys.java
similarity index 100%
rename from src/java/com/zhaow/utils/RestServiceDataKeys.java
rename to src/main/java/com/zhaow/utils/RestServiceDataKeys.java
diff --git a/src/java/com/zhaow/utils/RestfulToolkitBundle.java b/src/main/java/com/zhaow/utils/RestfulToolkitBundle.java
similarity index 100%
rename from src/java/com/zhaow/utils/RestfulToolkitBundle.java
rename to src/main/java/com/zhaow/utils/RestfulToolkitBundle.java
diff --git a/src/java/com/zhaow/utils/ToolkitUtil.java b/src/main/java/com/zhaow/utils/ToolkitUtil.java
similarity index 100%
rename from src/java/com/zhaow/utils/ToolkitUtil.java
rename to src/main/java/com/zhaow/utils/ToolkitUtil.java
diff --git a/src/java/com/zhaow/utils/ToolkitUtil.java.bak b/src/main/java/com/zhaow/utils/ToolkitUtil.java.bak
similarity index 100%
rename from src/java/com/zhaow/utils/ToolkitUtil.java.bak
rename to src/main/java/com/zhaow/utils/ToolkitUtil.java.bak
diff --git a/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
similarity index 98%
rename from resources/META-INF/plugin.xml
rename to src/main/resources/META-INF/plugin.xml
index da52735..e2613a0 100644
--- a/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -1,7 +1,7 @@
com.zhaow.restful.toolkit
- RestfulToolkit
- 2.0.5
+ WebDevelopmentKit (WDK)
+ 3.0.0
zhaow
-
+
diff --git a/resources/RestfulToolkitBundle.properties b/src/main/resources/RestfulToolkitBundle.properties
similarity index 100%
rename from resources/RestfulToolkitBundle.properties
rename to src/main/resources/RestfulToolkitBundle.properties
diff --git a/resources/icons/method/d.png b/src/main/resources/icons/method/d.png
similarity index 100%
rename from resources/icons/method/d.png
rename to src/main/resources/icons/method/d.png
diff --git a/resources/icons/method/g.png b/src/main/resources/icons/method/g.png
similarity index 100%
rename from resources/icons/method/g.png
rename to src/main/resources/icons/method/g.png
diff --git a/resources/icons/method/p.png b/src/main/resources/icons/method/p.png
similarity index 100%
rename from resources/icons/method/p.png
rename to src/main/resources/icons/method/p.png
diff --git a/resources/icons/method/p2.png b/src/main/resources/icons/method/p2.png
similarity index 100%
rename from resources/icons/method/p2.png
rename to src/main/resources/icons/method/p2.png
diff --git a/resources/icons/method/p3.png b/src/main/resources/icons/method/p3.png
similarity index 100%
rename from resources/icons/method/p3.png
rename to src/main/resources/icons/method/p3.png
diff --git a/resources/icons/method/undefined.png b/src/main/resources/icons/method/undefined.png
similarity index 100%
rename from resources/icons/method/undefined.png
rename to src/main/resources/icons/method/undefined.png
diff --git a/resources/icons/service.png b/src/main/resources/icons/service.png
similarity index 100%
rename from resources/icons/service.png
rename to src/main/resources/icons/service.png
diff --git a/resources/tips/GotoService.html b/src/main/resources/tips/GotoService.html
similarity index 100%
rename from resources/tips/GotoService.html
rename to src/main/resources/tips/GotoService.html
diff --git a/resources/tips/images/GotoService.png b/src/main/resources/tips/images/GotoService.png
similarity index 100%
rename from resources/tips/images/GotoService.png
rename to src/main/resources/tips/images/GotoService.png
diff --git a/resources/tips/images/SSHKeyUpload.png b/src/main/resources/tips/images/SSHKeyUpload.png
similarity index 100%
rename from resources/tips/images/SSHKeyUpload.png
rename to src/main/resources/tips/images/SSHKeyUpload.png