diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 65b0364f..00000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/ServiceStackIDEA/.idea/compiler.xml b/src/ServiceStackIDEA/.idea/compiler.xml deleted file mode 100644 index 983bb0aa..00000000 --- a/src/ServiceStackIDEA/.idea/compiler.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/ServiceStackIDEA/.idea/gradle.xml b/src/ServiceStackIDEA/.idea/gradle.xml deleted file mode 100644 index 965082d7..00000000 --- a/src/ServiceStackIDEA/.idea/gradle.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/ServiceStackIDEA/.idea/misc.xml b/src/ServiceStackIDEA/.idea/misc.xml deleted file mode 100644 index d5d79e0c..00000000 --- a/src/ServiceStackIDEA/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/ServiceStackIDEA/.idea/modules.xml b/src/ServiceStackIDEA/.idea/modules.xml deleted file mode 100644 index 63bfe941..00000000 --- a/src/ServiceStackIDEA/.idea/modules.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/ServiceStackIDEA/.idea/workspace.xml b/src/ServiceStackIDEA/.idea/workspace.xml deleted file mode 100644 index c6fb80f9..00000000 --- a/src/ServiceStackIDEA/.idea/workspace.xml +++ /dev/null @@ -1,690 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1443165621031 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No facets are configured - - - - - - - - ECLIPSE - - - - - - - - 1.6 - - - - - - - - ServiceStackIDEA - - - - - - - - Gradle: com.jetbrains:annotations:14.1.4 - - - - - - - - \ No newline at end of file diff --git a/src/ServiceStackIDEA/README.md b/src/ServiceStackIDEA/README.md index 2ad23e2e..efe61fef 100644 --- a/src/ServiceStackIDEA/README.md +++ b/src/ServiceStackIDEA/README.md @@ -36,4 +36,18 @@ The ServiceStack IDEA is now available to install directly from within a support 3. Search for **ServiceStack** and click **Install plugin** 4. Restart to load the installed ServiceStack IDEA plugin -![](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackidea/android-plugin-download.gif) \ No newline at end of file +![](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/servicestackidea/android-plugin-download.gif) + +### Development +Local development of the plugin requires: + - Java SDK 1.8 + - IntelliJ Ultimate/Community 2019.2+ (ideally 2020.3+) + +Once loaded into IntelliJ for the first time, `import gradle` project by right clicking on `build.gradle` in the Project menu. + +Once imported, run the `build` task, this should try to resolve the gradle version to use. + +#### Debugging +Use the gradle task `runIde` on Debug, this should launch 2019.2 of IntelliJ Community edition which is the ealiest version supported after ServiceStackIDEA 1.0.40. + +This breaking change came from 2019.2+ separation of Java lang features in the `com.intellij.psi.*` packages which SSIDEA uses for IntelliJ + Android studio Java support. diff --git a/src/ServiceStackIDEA/ServiceStackIDEA.iml b/src/ServiceStackIDEA/ServiceStackIDEA.iml index c5323fb7..9d0ffd93 100644 --- a/src/ServiceStackIDEA/ServiceStackIDEA.iml +++ b/src/ServiceStackIDEA/ServiceStackIDEA.iml @@ -1,6 +1,7 @@ - - + + + diff --git a/src/ServiceStackIDEA/build.gradle b/src/ServiceStackIDEA/build.gradle index 459428bf..de737d54 100644 --- a/src/ServiceStackIDEA/build.gradle +++ b/src/ServiceStackIDEA/build.gradle @@ -1,28 +1,33 @@ plugins { - id "org.jetbrains.intellij" version "0.4.15" + id "org.jetbrains.intellij" version "0.6.5" +} +version = '1.0.41' +repositories { + mavenCentral() +} +tasks.buildSearchableOptions { + enabled = false } -version = '1.0.40' - apply plugin: 'org.jetbrains.intellij' dependencies { } -Properties properties = System.properties; +Properties properties = System.properties if(System.env.BUILD_NUMBER != null && System.env.SERVICESTACKIDEA_PUBLISH_NIGHTLY != null) { // Append build number to version for a new nightly build version to be published. version = "${version}.$System.env.BUILD_NUMBER" } -String jbToken; +String jbToken if (properties.getProperty("jetbrains.plugins.user", null) == null) { properties.load(project.file('./local.properties').newDataInputStream()) } -jbToken = properties.getProperty("jetbrains.plugins.token"); +jbToken = properties.getProperty("jetbrains.plugins.token") intellij { - version 'IC-14.1.4' - plugins 'maven' + version '2019.2' + plugins = ['maven','java'] pluginName 'ServiceStackIDEA' updateSinceUntilBuild false diff --git a/src/ServiceStackIDEA/gradle/wrapper/gradle-wrapper.jar b/src/ServiceStackIDEA/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 2322723c..00000000 Binary files a/src/ServiceStackIDEA/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/src/ServiceStackIDEA/gradle/wrapper/gradle-wrapper.properties b/src/ServiceStackIDEA/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index ee69dd68..00000000 --- a/src/ServiceStackIDEA/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/src/ServiceStackIDEA/gradlew b/src/ServiceStackIDEA/gradlew deleted file mode 100644 index 91a7e269..00000000 --- a/src/ServiceStackIDEA/gradlew +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# 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 -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# 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\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - -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" ] ; 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, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # 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=$((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 - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/src/ServiceStackIDEA/gradlew.bat b/src/ServiceStackIDEA/gradlew.bat deleted file mode 100644 index 8a0b282a..00000000 --- a/src/ServiceStackIDEA/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@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 - -@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= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@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 Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_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=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -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/src/ServiceStackIDEA/src/main/java/net/servicestack/idea/AddRef.java b/src/ServiceStackIDEA/src/main/java/net/servicestack/idea/AddRef.java index c89d6722..49e18e03 100644 --- a/src/ServiceStackIDEA/src/main/java/net/servicestack/idea/AddRef.java +++ b/src/ServiceStackIDEA/src/main/java/net/servicestack/idea/AddRef.java @@ -6,6 +6,7 @@ import com.intellij.notification.Notification; import com.intellij.notification.NotificationType; import com.intellij.notification.Notifications; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.TextFieldWithBrowseButton; @@ -122,11 +123,10 @@ public void changedUpdate(DocumentEvent e) { } public void warn() { - if (nameTextField.getInputVerifier().verify(nameTextField) && addressUrlTextField.getInputVerifier().verify(addressUrlTextField)) { - buttonOK.setEnabled(true); - } else { - buttonOK.setEnabled(false); - } + buttonOK.setEnabled( + nameTextField.getInputVerifier().verify(nameTextField) && + addressUrlTextField.getInputVerifier().verify(addressUrlTextField) + ); } }); @@ -147,27 +147,18 @@ public void changedUpdate(DocumentEvent e) { } public void warn() { - if (nameTextField.getInputVerifier().verify(nameTextField) && addressUrlTextField.getInputVerifier().verify(addressUrlTextField)) { - buttonOK.setEnabled(true); - } else { - buttonOK.setEnabled(false); - } + buttonOK.setEnabled( + nameTextField.getInputVerifier().verify(nameTextField) && + addressUrlTextField.getInputVerifier().verify(addressUrlTextField) + ); } }); - buttonOK.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - processOK(); - } - }); + buttonOK.addActionListener(e -> processOK()); packageBrowse.addActionListener(new BrowsePackageListener(packageBrowse, module.getProject(), "Browse packages")); - buttonCancel.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - onCancel(); - } - }); + buttonCancel.addActionListener(e -> onCancel()); // call onCancel() when cross is clicked setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); @@ -178,11 +169,7 @@ public void windowClosing(WindowEvent e) { }); // call onCancel() on ESCAPE - contentPane.registerKeyboardAction(new ActionListener() { - public void actionPerformed(ActionEvent e) { - onCancel(); - } - }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + contentPane.registerKeyboardAction(e -> onCancel(), KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); } public void setSelectedPackage(@NotNull PsiPackage selectedPackage) { @@ -240,25 +227,21 @@ private void processOK() { Notifications.Bus.notify(notification); } - - Runnable r = new Runnable() { - public void run() { - try { - onOK(); - } catch (Exception e1) { - e1.printStackTrace(); - errorMessage = errorMessage != null ? errorMessage : "An error occurred adding reference - " + e1.getMessage(); - } - if (errorMessage != null) { - errorTextPane.setVisible(true); - errorTextPane.setText(errorMessage); - } - buttonOK.setEnabled(true); - buttonCancel.setEnabled(true); - + ApplicationManager.getApplication().invokeLater(() -> { + try { + onOK(); + } catch (Exception e1) { + e1.printStackTrace(); + errorMessage = errorMessage != null ? errorMessage : "An error occurred adding reference - " + e1.getMessage(); } - }; - SwingUtilities.invokeLater(r); + if (errorMessage != null) { + errorTextPane.setVisible(true); + errorTextPane.setText(errorMessage); + } + buttonOK.setEnabled(true); + buttonCancel.setEnabled(true); + }); + } private void setPackageBrowseText(String packageName) { @@ -375,7 +358,6 @@ private void onOK() { } /** - * @noinspection ALL */ public JComponent $$$getRootComponent$$$() { return contentPane; diff --git a/src/ServiceStackIDEA/src/main/java/net/servicestack/idea/DepConfig.java b/src/ServiceStackIDEA/src/main/java/net/servicestack/idea/DepConfig.java index 6229f94d..eeaeda2e 100644 --- a/src/ServiceStackIDEA/src/main/java/net/servicestack/idea/DepConfig.java +++ b/src/ServiceStackIDEA/src/main/java/net/servicestack/idea/DepConfig.java @@ -5,7 +5,7 @@ public class DepConfig { public static final String androidPackageId = "android"; //Fallback version of dependencies if GitHub tags can't be checked. public static final String clientPackageId = "client"; - public static String servicestackVersion = "1.0.40"; + public static String servicestackVersion = "1.0.43"; public static final String gsonGroupId = "com.google.code.gson"; public static final String gsonPackageId = "gson"; diff --git a/src/ServiceStackIDEA/src/main/java/net/servicestack/idea/PluginSettingsService.java b/src/ServiceStackIDEA/src/main/java/net/servicestack/idea/PluginSettingsService.java index f9a9d6b2..7e65c08b 100644 --- a/src/ServiceStackIDEA/src/main/java/net/servicestack/idea/PluginSettingsService.java +++ b/src/ServiceStackIDEA/src/main/java/net/servicestack/idea/PluginSettingsService.java @@ -2,12 +2,13 @@ import com.intellij.openapi.components.*; import com.intellij.util.xmlb.XmlSerializerUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * Created by Layoric on 27/05/2016. */ -@State(name = "PluginSettingsService", storages = @Storage(id = "default", file = StoragePathMacros.APP_CONFIG + "/servicestack-settings.xml")) +@State(name = "PluginSettingsService", storages = @Storage("servicestack-settings.xml")) public class PluginSettingsService implements PersistentStateComponent { public Boolean optOutOfStats = false; @@ -18,7 +19,7 @@ public PluginSettingsService getState() { } @Override - public void loadState(PluginSettingsService pluginSettingsService) { + public void loadState(@NotNull PluginSettingsService pluginSettingsService) { XmlSerializerUtil.copyBean(pluginSettingsService, this); } diff --git a/src/ServiceStackIDEA/src/main/resources/META-INF/plugin.xml b/src/ServiceStackIDEA/src/main/resources/META-INF/plugin.xml index 9e9c502b..2802b419 100644 --- a/src/ServiceStackIDEA/src/main/resources/META-INF/plugin.xml +++ b/src/ServiceStackIDEA/src/main/resources/META-INF/plugin.xml @@ -1,4 +1,4 @@ - + net.servicestack.ideaplugin ServiceStack @@ -30,7 +30,7 @@ - + @@ -44,13 +44,14 @@ + +