diff --git a/.gitignore b/.gitignore
index d0179b6..5a20efa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+.intellijPlatform
signcerts/
distributions/
.gradle
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6391650..6524cf1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,17 @@
-## 0.5.2
+## 0.5.4 250624
+
+### Changed
+- Migrated build to IntelliJ Platform Gradle Plugin 2.x ([JetBrains docs](https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin.html#configuration.repositories))
+- Updated build for compatibility with IntelliJ IDEA 2025.1
+- Upgraded Gradle wrapper to 8.14.2
+- Modernized Gradle task registration for Gradle 9.0 compatibility
+
+## 0.5.3 230730
+
+### Fixes
+- updated and tested new version for later IDE
+
+## 0.5.2 230629
### Added
- Refactor - extract lambda to function
@@ -8,8 +21,6 @@
- Swank action - unintern symbol function
- Swank action - reevalute defvar
-### Changes
-
### Fixes
- Fixed indentation issues
- Fixed symbol parsing - |123| reported as number
@@ -154,4 +165,4 @@ Initial release
- Eval previous/next/current form
- Eval file of current editor
- Eval file action
-- Some basic `.cl`, `.lisp` and `.asdf` templates
\ No newline at end of file
+- Some basic `.cl`, `.lisp` and `.asdf` templates
diff --git a/build-distributions.sh b/build-distributions.sh
index f8c1b6a..7dfb6b6 100755
--- a/build-distributions.sh
+++ b/build-distributions.sh
@@ -1,5 +1,7 @@
#!/bin/bash
+export JAVA_HOME=/usr/lib/jvm/java-24-openjdk/
+
rm distributions/*
echo -n Private key password:
@@ -17,7 +19,7 @@ DISTRIBUTIONS="IC"
for TARGET_IDE in ${DISTRIBUTIONS}; do
echo Trying to build $TARGET_IDE
export TARGET_IDE=$TARGET_IDE
- ./gradlew clean signPlugin verifyPlugin buildPlugin || ./gradlew signPlugin verifyPlugin buildPlugin || exit
+ ./gradlew clean signPlugin buildPlugin || ./gradlew signPlugin buildPlugin || exit
FILE=$(expandedName)
NEW_FILE=$(basename ${FILE%.*}-$TARGET_IDE.zip)
cp "$FILE" distributions/$NEW_FILE
diff --git a/build.gradle.kts b/build.gradle.kts
index 0e235b5..a101584 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,11 +1,11 @@
plugins {
id("java")
- id("org.jetbrains.intellij") version "1.13.3"
+ id("org.jetbrains.intellij.platform") version "2.6.0"
id("idea")
}
group = "com.en_circle.slt"
-version = "0.5.2"
+version = "0.5.4"
idea {
module {
@@ -16,16 +16,24 @@ idea {
repositories {
mavenCentral()
+ intellijPlatform {
+ defaultRepositories()
+ }
}
dependencies {
+ intellijPlatform {
+ intellijIdeaCommunity("2025.1")
+ // Add plugin dependencies here if needed
+ }
implementation("org.awaitility:awaitility:4.2.0")
implementation("org.watertemplate:watertemplate-engine:1.2.2")
implementation("org.rauschig:jarchivelib:1.2.0")
implementation("org.jsoup:jsoup:1.16.1")
- testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.3")
- testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.9.3")
+ testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.0")
+ testImplementation("junit:junit:4.13.2")
+ testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.0")
}
sourceSets {
@@ -36,24 +44,8 @@ sourceSets {
}
}
-// Configure Gradle IntelliJ Plugin
-// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html
-intellij {
- version.set("2022.2")
- pluginName.set("slt")
- var ide = System.getenv("TARGET_IDE")
- if (ide == null || "" == ide)
- ide = extra["targetIDE"].toString()
- type.set(ide) // Target IDE Platform
-
- plugins.set(listOf(
-
- /* Plugin Dependencies */))
-}
-
-
tasks {
- val sltZip = task("sltZip", Zip::class) {
+ val sltZip by registering(Zip::class) {
from("src/main/lisp")
archiveFileName.set("slt.zip")
destinationDirectory.set(File("build/resources/main"))
@@ -73,7 +65,7 @@ tasks {
false
}
}
- sltZip.mustRunAfter(processResources)
+ sltZip.get().mustRunAfter(processResources)
instrumentedJar {
dependsOn(sltZip)
@@ -82,6 +74,11 @@ tasks {
dependsOn(sltZip)
}
+ // Fix for Gradle 8+ task dependency validation
+ named("compileTestJava") {
+ dependsOn(sltZip)
+ }
+
// Set the JVM compatibility versions
withType {
sourceCompatibility = "17"
@@ -89,8 +86,8 @@ tasks {
}
patchPluginXml {
- sinceBuild.set("222")
- untilBuild.set("231.*")
+ sinceBuild.set("251")
+ untilBuild.set("252.*")
}
signPlugin {
@@ -106,5 +103,10 @@ tasks {
publishPlugin {
token.set(System.getenv("PUBLISH_TOKEN"))
}
+
+ // Disable searchable options index build (not needed for this plugin)
+ buildSearchableOptions {
+ enabled = false
+ }
}
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 249e583..1b33c55 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index ae04661..ff23a68 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index 1b6c787..23d15a9 100755
--- a/gradlew
+++ b/gradlew
@@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+# SPDX-License-Identifier: Apache-2.0
+#
##############################################################################
#
@@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,13 +82,11 @@ do
esac
done
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
+# This is normally unused
+# shellcheck disable=SC2034
APP_BASE_NAME=${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"'
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -114,7 +114,7 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM.
@@ -133,22 +133,29 @@ 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.
+ if ! command -v java >/dev/null 2>&1
+ then
+ 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
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -193,18 +200,28 @@ if "$cygwin" || "$msys" ; then
done
fi
-# Collect all arguments for the java command;
-# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-# shell script including quotes and variable substitutions, so put them in
-# double quotes to make sure that they get re-expanded; and
-# * put everything else in single quotes, so that it's not re-expanded.
+
+# 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"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
+ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
diff --git a/gradlew.bat b/gradlew.bat
index 107acd3..db3a6ac 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -13,8 +13,10 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
-@if "%DEBUG%" == "" @echo off
+@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@@ -25,7 +27,8 @@
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@@ -40,13 +43,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
+if %ERRORLEVEL% equ 0 goto execute
-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.
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
@@ -56,32 +59,34 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
-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.
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
:execute
@rem Setup the command line
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+set CLASSPATH=
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
+if %ERRORLEVEL% equ 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
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
diff --git a/src/main/gen/com/en_circle/slt/plugin/lisp/impl/LispFunctionEnhancementImpl.java b/src/main/gen/com/en_circle/slt/plugin/lisp/impl/LispFunctionEnhancementImpl.java
new file mode 100644
index 0000000..1c436ed
--- /dev/null
+++ b/src/main/gen/com/en_circle/slt/plugin/lisp/impl/LispFunctionEnhancementImpl.java
@@ -0,0 +1,27 @@
+// This is a generated file. Not intended for manual editing.
+package com.en_circle.slt.plugin.lisp.impl;
+
+import com.en_circle.slt.plugin.lisp.psi.LispFunctionEnhancement;
+import com.en_circle.slt.plugin.lisp.psi.LispVisitor;
+import com.intellij.extapi.psi.ASTWrapperPsiElement;
+import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElementVisitor;
+import org.jetbrains.annotations.NotNull;
+
+public class LispFunctionEnhancementImpl extends ASTWrapperPsiElement implements LispFunctionEnhancement {
+
+ public LispFunctionEnhancementImpl(@NotNull ASTNode node) {
+ super(node);
+ }
+
+ public void accept(@NotNull LispVisitor visitor) {
+ visitor.visitFunctionEnhancement(this);
+ }
+
+ @Override
+ public void accept(@NotNull PsiElementVisitor visitor) {
+ if (visitor instanceof LispVisitor) accept((LispVisitor)visitor);
+ else super.accept(visitor);
+ }
+
+}
diff --git a/src/main/gen/com/en_circle/slt/plugin/lisp/psi/LispFunctionEnhancement.java b/src/main/gen/com/en_circle/slt/plugin/lisp/psi/LispFunctionEnhancement.java
new file mode 100644
index 0000000..1814b5f
--- /dev/null
+++ b/src/main/gen/com/en_circle/slt/plugin/lisp/psi/LispFunctionEnhancement.java
@@ -0,0 +1,8 @@
+// This is a generated file. Not intended for manual editing.
+package com.en_circle.slt.plugin.lisp.psi;
+
+import com.intellij.psi.PsiElement;
+
+public interface LispFunctionEnhancement extends PsiElement {
+
+}
diff --git a/src/main/java/com/en_circle/slt/plugin/SltDocumentationProvider.java b/src/main/java/com/en_circle/slt/plugin/SltDocumentationProvider.java
index bed54ec..9e35aee 100644
--- a/src/main/java/com/en_circle/slt/plugin/SltDocumentationProvider.java
+++ b/src/main/java/com/en_circle/slt/plugin/SltDocumentationProvider.java
@@ -4,12 +4,12 @@
import com.en_circle.slt.plugin.lisp.LispParserUtil;
import com.en_circle.slt.plugin.lisp.psi.LispSymbol;
import com.en_circle.slt.plugin.services.lisp.LispEnvironmentService;
+import com.en_circle.slt.tools.EscapeUtils;
import com.intellij.lang.documentation.AbstractDocumentationProvider;
import com.intellij.openapi.util.text.HtmlBuilder;
import com.intellij.openapi.util.text.HtmlChunk;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
-import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.Nullable;
@@ -95,6 +95,6 @@ private String asHtml(SymbolState state, PsiElement element) {
private String escape(String s) {
- return StringEscapeUtils.escapeHtml(s);
+ return EscapeUtils.escapeHtml4(s);
}
}
diff --git a/src/main/java/com/en_circle/slt/plugin/SltProjectActivity.java b/src/main/java/com/en_circle/slt/plugin/SltProjectActivity.java
new file mode 100644
index 0000000..3300276
--- /dev/null
+++ b/src/main/java/com/en_circle/slt/plugin/SltProjectActivity.java
@@ -0,0 +1,19 @@
+package com.en_circle.slt.plugin;
+
+import com.en_circle.slt.plugin.services.SltProjectService;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.startup.ProjectActivity;
+import kotlin.Unit;
+import kotlin.coroutines.Continuation;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class SltProjectActivity implements ProjectActivity {
+
+ @Nullable
+ @Override
+ public Object execute(@NotNull Project project, @NotNull Continuation super Unit> continuation) {
+ SltProjectService.getInstance(project);
+ return null;
+ }
+}
diff --git a/src/main/java/com/en_circle/slt/plugin/SltProjectListener.java b/src/main/java/com/en_circle/slt/plugin/SltProjectListener.java
deleted file mode 100644
index b28bf23..0000000
--- a/src/main/java/com/en_circle/slt/plugin/SltProjectListener.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.en_circle.slt.plugin;
-
-import com.en_circle.slt.plugin.services.SltProjectService;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.project.ProjectManagerListener;
-import org.jetbrains.annotations.NotNull;
-
-public class SltProjectListener implements ProjectManagerListener {
-
- @Override
- public void projectOpened(@NotNull Project project) {
- SltProjectService.getInstance(project);
- }
-
-}
diff --git a/src/main/java/com/en_circle/slt/plugin/actions/EvalFile.java b/src/main/java/com/en_circle/slt/plugin/actions/EvalFile.java
index 961af8d..49de03a 100644
--- a/src/main/java/com/en_circle/slt/plugin/actions/EvalFile.java
+++ b/src/main/java/com/en_circle/slt/plugin/actions/EvalFile.java
@@ -1,9 +1,10 @@
package com.en_circle.slt.plugin.actions;
import com.en_circle.slt.plugin.SltCommonLispFileType;
+import com.intellij.ide.SaveAndSyncHandler;
+import com.intellij.ide.SaveAndSyncHandler.SaveTask;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
-import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.FileContentUtilCore;
@@ -17,7 +18,7 @@ public class EvalFile extends EvalActionBase {
public void actionPerformed(@NotNull AnActionEvent event) {
VirtualFile vf = event.getData(CommonDataKeys.VIRTUAL_FILE);
if (vf != null) {
- ApplicationManager.getApplication().saveAll();
+ SaveAndSyncHandler.getInstance().scheduleSave(new SaveTask(Objects.requireNonNull(event.getProject())));
evaluateFile(event.getProject(), vf.getPath(), vf);
for (VirtualFile openedFiles : FileEditorManager.getInstance(Objects.requireNonNull(event.getProject()))
.getOpenFiles()) {
diff --git a/src/main/java/com/en_circle/slt/plugin/actions/MacroexpandActionBase.java b/src/main/java/com/en_circle/slt/plugin/actions/MacroexpandActionBase.java
index 5006fcf..feb626c 100644
--- a/src/main/java/com/en_circle/slt/plugin/actions/MacroexpandActionBase.java
+++ b/src/main/java/com/en_circle/slt/plugin/actions/MacroexpandActionBase.java
@@ -6,6 +6,7 @@
import com.en_circle.slt.plugin.lisp.LispParserUtil;
import com.en_circle.slt.plugin.lisp.psi.LispList;
import com.en_circle.slt.plugin.services.lisp.LispEnvironmentService;
+import com.en_circle.slt.tools.EscapeUtils;
import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
@@ -21,7 +22,6 @@
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
-import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
@@ -56,7 +56,7 @@ public void actionPerformed(@NotNull AnActionEvent event) {
String packageName = LispParserUtil.getPackage(psiFile, offset);
macroexpand(editor.getProject(), list, packageName, text -> SwingUtilities.invokeLater(() -> {
HtmlBuilder builder = new HtmlBuilder();
- String macroExpand = StringUtils.replace(StringUtils.replace(StringEscapeUtils.escapeHtml(text), " ", " "),
+ String macroExpand = StringUtils.replace(StringUtils.replace(EscapeUtils.escapeHtml4(text), " ", " "),
"\n", HtmlChunk.br().toString());
builder.append(HtmlChunk.raw(macroExpand));
diff --git a/src/main/java/com/en_circle/slt/plugin/highlights/SltBraceHighlighter.java b/src/main/java/com/en_circle/slt/plugin/highlights/SltBraceHighlighter.java
index ea8983f..68c8930 100644
--- a/src/main/java/com/en_circle/slt/plugin/highlights/SltBraceHighlighter.java
+++ b/src/main/java/com/en_circle/slt/plugin/highlights/SltBraceHighlighter.java
@@ -32,7 +32,7 @@
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypes;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.startup.StartupActivity;
+import com.intellij.openapi.startup.ProjectActivity;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiBinaryFile;
@@ -44,6 +44,8 @@
import com.intellij.util.Alarm;
import com.intellij.util.containers.Stack;
import com.intellij.util.text.CharArrayUtil;
+import kotlin.Unit;
+import kotlin.coroutines.Continuation;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -53,21 +55,23 @@
// Copied from IJ source to implement highlight WITHOUT smart insertion!
-public class SltBraceHighlighter implements StartupActivity.DumbAware {
+public class SltBraceHighlighter implements ProjectActivity {
private static final Key> BRACE_HIGHLIGHTERS_IN_EDITOR_VIEW_KEY = Key.create("BraceHighlighter.BRACE_HIGHLIGHTERS_IN_EDITOR_VIEW_KEY");
private static final Key LINE_MARKER_IN_EDITOR_KEY = Key.create("BraceHighlighter.LINE_MARKER_IN_EDITOR_KEY");
private final Alarm alarm = new Alarm();
+ @Nullable
@Override
- public void runActivity(@NotNull Project project) {
+ public Object execute(@NotNull Project project, @NotNull Continuation super Unit> continuation) {
if (ApplicationManager.getApplication().isHeadlessEnvironment() && !ApplicationManager.getApplication().isUnitTestMode() ||
!IdentifierHighlighterPassFactory.isEnabled()) {
- return;
+ return null;
}
Disposable activityDisposable = SltProjectService.getInstance(project);
registerListeners(project, activityDisposable);
+ return null;
}
private void registerListeners(@NotNull Project project, @NotNull Disposable parentDisposable) {
@@ -257,6 +261,7 @@ private void highlightRightBrace(Editor editor, @NotNull HighlighterIterator ite
highlightBraces(editor, brace2, brace1, matched, false, fileType);
}
+ @SuppressWarnings("SameParameterValue")
private void highlightLeftBrace(Editor editor, @NotNull HighlighterIterator iterator, boolean scopeHighlighting, @NotNull FileType fileType, Document document) {
TextRange brace1Start = TextRange.create(iterator.getStart(), iterator.getEnd());
boolean matched = matchBrace(document.getCharsSequence(), fileType, iterator, true);
@@ -479,6 +484,7 @@ private static synchronized boolean matchBrace(@NotNull CharSequence fileText,
}
+ @SuppressWarnings("BooleanMethodIsAlwaysInverted")
private static boolean isPairBraces(@NotNull IElementType tokenType1, @NotNull IElementType tokenType2, @NotNull FileType fileType) {
return (tokenType1.equals(LispTypes.LPAREN) && tokenType2.equals(LispTypes.RPAREN)) || (tokenType1.equals(LispTypes.RPAREN) && tokenType2.equals(LispTypes.LPAREN));
}
diff --git a/src/main/java/com/en_circle/slt/plugin/indentation/SltIndentator.java b/src/main/java/com/en_circle/slt/plugin/indentation/SltIndentator.java
index 41e2983..e0809f0 100644
--- a/src/main/java/com/en_circle/slt/plugin/indentation/SltIndentator.java
+++ b/src/main/java/com/en_circle/slt/plugin/indentation/SltIndentator.java
@@ -9,6 +9,7 @@
import com.intellij.openapi.editor.actionSystem.EditorActionHandler;
import com.intellij.openapi.editor.actionSystem.EditorActionManager;
import com.intellij.openapi.editor.ex.util.EditorUIUtil;
+import com.intellij.openapi.editor.ex.util.LexerEditorHighlighter.InvalidStateException;
import com.intellij.openapi.editor.textarea.TextComponentEditor;
import com.intellij.openapi.util.Ref;
import com.intellij.psi.PsiDocumentManager;
@@ -99,7 +100,11 @@ public void run() {
EditorModificationUtil.deleteSelectedText(editor);
int caretOffset = editor.getCaretModel().getOffset();
String s = "\n" + StringUtils.repeat(' ', additionalOffset);
- document.insertString(caretOffset, s);
+ try {
+ document.insertString(caretOffset, s);
+ } catch (InvalidStateException ignored) {
+ // lexer error is ignored
+ }
editor.getCaretModel().moveToOffset(caretOffset + s.length());
EditorModificationUtil.scrollToCaret(editor);
editor.getSelectionModel().removeSelection();
diff --git a/src/main/java/com/en_circle/slt/plugin/ui/SltCoreWindow.java b/src/main/java/com/en_circle/slt/plugin/ui/SltCoreWindow.java
index bf46298..6dc7600 100644
--- a/src/main/java/com/en_circle/slt/plugin/ui/SltCoreWindow.java
+++ b/src/main/java/com/en_circle/slt/plugin/ui/SltCoreWindow.java
@@ -16,11 +16,13 @@
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.wm.ToolWindow;
-import com.intellij.ui.tabs.impl.JBTabsImpl;
+import com.intellij.ui.tabs.JBTabs;
+import com.intellij.ui.tabs.JBTabsFactory;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
-import java.awt.*;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -30,7 +32,7 @@ public class SltCoreWindow implements LispEnvironmentListener, Disposable {
private final Project project;
private final JTextField process;
private final JPanel content;
- private final JBTabsImpl tabs;
+ private final JBTabs tabs;
private final List components = Collections.synchronizedList(new ArrayList<>());
@@ -67,7 +69,7 @@ public SltCoreWindow(ToolWindow toolWindow) {
content.add(processInfo, BorderLayout.NORTH);
- tabs = new JBTabsImpl(toolWindow.getProject());
+ tabs = JBTabsFactory.createTabs(toolWindow.getProject());
for (SltComponent component : components) {
tabs.addTab(component.create());
}
diff --git a/src/main/java/com/en_circle/slt/plugin/ui/SltPackageWidget.java b/src/main/java/com/en_circle/slt/plugin/ui/SltPackageWidget.java
index 7c7250e..4e42e7e 100644
--- a/src/main/java/com/en_circle/slt/plugin/ui/SltPackageWidget.java
+++ b/src/main/java/com/en_circle/slt/plugin/ui/SltPackageWidget.java
@@ -10,7 +10,6 @@
import com.intellij.openapi.editor.EditorFactory;
import com.intellij.openapi.editor.event.*;
import com.intellij.openapi.editor.ex.EditorEx;
-import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.NlsContexts.Label;
@@ -127,11 +126,6 @@ public void caretRemoved(@NotNull CaretEvent e) {
updatePosition(e.getEditor());
}
- @Override
- public void selectionChanged(@NotNull FileEditorManagerEvent event) {
- updatePosition(getEditor());
- }
-
@Override
public void afterDocumentChange(@NotNull Document document) {
EditorFactory.getInstance().editors(document)
diff --git a/src/main/java/com/en_circle/slt/plugin/ui/console/SltConsole.java b/src/main/java/com/en_circle/slt/plugin/ui/console/SltConsole.java
index 7f59e24..55a675e 100644
--- a/src/main/java/com/en_circle/slt/plugin/ui/console/SltConsole.java
+++ b/src/main/java/com/en_circle/slt/plugin/ui/console/SltConsole.java
@@ -109,7 +109,7 @@ private void openSymbolNavigator(Project project, String symbol) {
protected void eval(String data) {
try {
if (StringUtils.isNotBlank(data)) {
- String setToStar = String.format("(setf * %s)", data);
+ String setToStar = String.format("(cl::setf cl::* %s)", data);
LispEnvironmentService.getInstance(project).sendToLisp(Eval.eval(setToStar, currentPackage,
result -> {
resultData.clear();
diff --git a/src/main/java/com/en_circle/slt/plugin/ui/debug/SltDebuggerImpl.java b/src/main/java/com/en_circle/slt/plugin/ui/debug/SltDebuggerImpl.java
index f843fc9..3ca57f4 100644
--- a/src/main/java/com/en_circle/slt/plugin/ui/debug/SltDebuggerImpl.java
+++ b/src/main/java/com/en_circle/slt/plugin/ui/debug/SltDebuggerImpl.java
@@ -32,8 +32,9 @@
import com.intellij.ui.components.JBScrollPane;
import com.intellij.ui.components.JBTextArea;
import com.intellij.ui.components.JBTextField;
+import com.intellij.ui.tabs.JBTabs;
+import com.intellij.ui.tabs.JBTabsFactory;
import com.intellij.ui.tabs.TabInfo;
-import com.intellij.ui.tabs.impl.JBTabsImpl;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
@@ -263,9 +264,9 @@ public void mouseClicked(MouseEvent e) {
singleFrameComponent = new JPanel(new BorderLayout());
TabInfo singleFrame = new TabInfo(singleFrameComponent);
singleFrame.setText(SltBundle.message("slt.ui.debugger.frame"));
- JBTabsImpl singleFrameParent = new JBTabsImpl(parent.getProject());
+ JBTabs singleFrameParent = JBTabsFactory.createTabs(parent.getProject());
singleFrameParent.addTab(singleFrame);
- splitter.setSecondComponent(singleFrameParent);
+ splitter.setSecondComponent((JComponent) singleFrameParent);
}
private void enableStepping() {
diff --git a/src/main/java/com/en_circle/slt/plugin/ui/debug/SltDebuggers.java b/src/main/java/com/en_circle/slt/plugin/ui/debug/SltDebuggers.java
index f8edff6..d5f59af 100644
--- a/src/main/java/com/en_circle/slt/plugin/ui/debug/SltDebuggers.java
+++ b/src/main/java/com/en_circle/slt/plugin/ui/debug/SltDebuggers.java
@@ -9,10 +9,11 @@
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.ui.content.Content;
-import com.intellij.ui.tabs.impl.JBTabsImpl;
+import com.intellij.ui.tabs.JBTabs;
+import com.intellij.ui.tabs.JBTabsFactory;
import javax.swing.*;
-import java.awt.*;
+import java.awt.BorderLayout;
import java.math.BigInteger;
import java.util.*;
@@ -20,7 +21,7 @@ public class SltDebuggers implements DebugInterface, LispEnvironmentListener {
private final ToolWindow toolWindow;
private final JPanel content;
- private final JBTabsImpl tabs;
+ private final JBTabs tabs;
private final Map activeDebuggers = Collections.synchronizedMap(new HashMap<>());
private final Set toActivateDebuggers = Collections.synchronizedSet(new HashSet<>());
@@ -29,7 +30,7 @@ public class SltDebuggers implements DebugInterface, LispEnvironmentListener {
public SltDebuggers(ToolWindow toolWindow) {
this.toolWindow = toolWindow;
this.content = new JPanel(new BorderLayout());
- this.tabs = new JBTabsImpl(toolWindow.getProject());
+ this.tabs = JBTabsFactory.createTabs(toolWindow.getProject());
this.content.add(this.tabs.getComponent());
LispEnvironmentService.getInstance(toolWindow.getProject()).addServerListener(this);
@@ -65,7 +66,7 @@ public void onDebugActivate(BigInteger debugId, BigInteger level) {
if (activeDebuggers.containsKey(debugId)) {
activeDebuggers.get(debugId).activate();
tabs.select(activeDebuggers.get(debugId).getTab(), true);
- tabs.requestFocusInWindow();
+ ((JComponent) tabs).requestFocusInWindow();
toolWindow.getContentManager().setSelectedContent(self, true);
} else {
toActivateDebuggers.add(debugId);
diff --git a/src/main/java/com/en_circle/slt/plugin/ui/debug/SltFrameInfo.java b/src/main/java/com/en_circle/slt/plugin/ui/debug/SltFrameInfo.java
index 9dd91cd..bc43793 100644
--- a/src/main/java/com/en_circle/slt/plugin/ui/debug/SltFrameInfo.java
+++ b/src/main/java/com/en_circle/slt/plugin/ui/debug/SltFrameInfo.java
@@ -12,15 +12,17 @@
import com.intellij.ui.components.JBScrollPane;
import com.intellij.ui.table.JBTable;
import com.intellij.ui.tabs.JBTabs;
+import com.intellij.ui.tabs.JBTabsFactory;
import com.intellij.ui.tabs.TabInfo;
-import com.intellij.ui.tabs.impl.JBTabsImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
-import java.awt.*;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Cursor;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.font.TextAttribute;
@@ -55,7 +57,7 @@ public SltFrameInfo(Project project, BigInteger threadId, BigInteger frameId, St
}
private void create() {
- tabs = new JBTabsImpl(project);
+ tabs = JBTabsFactory.createTabs(project);
localsTable = new JBTable(new FrameListTableModel(new ArrayList<>()));
localsTable.setFillsViewportHeight(true);
diff --git a/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationABCLProcess.java b/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationABCLProcess.java
index 1014b1d..c981c5b 100644
--- a/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationABCLProcess.java
+++ b/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationABCLProcess.java
@@ -86,15 +86,15 @@ public SdkConfigurationABCLProcess(@NotNull Component parent, LispSdk instance,
quicklispPath.getField().setText(instance.quickLispPath);
TextFieldWithBrowseButton abclExecutablePicker = new TextFieldWithBrowseButton(jvmExecutable.getField());
- abclExecutablePicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.jvm.select"), "", null, descriptor);
+ abclExecutablePicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.jvm.select")).withDescription(""));
TextFieldWithBrowseButton abclJarPicker = new TextFieldWithBrowseButton(jar.getField());
- abclJarPicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.abcl.select"), "", null, descriptorJar);
+ abclJarPicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.abcl.select")).withDescription(""));
TextFieldWithBrowseButton quicklispPathPicker = new TextFieldWithBrowseButton(quicklispPath.getField());
//noinspection DialogTitleCapitalization
- quicklispPathPicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.quicklisp.select"), "", null, descriptor);
+ quicklispPathPicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.quicklisp.select")).withDescription(""));
return new FormBuilder()
.addLabeledComponent(SltBundle.message("slt.ui.settings.sdk.editor.name"), name, 1, false)
diff --git a/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationAllegroCLProcess.java b/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationAllegroCLProcess.java
index 3b8948f..8cad87b 100644
--- a/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationAllegroCLProcess.java
+++ b/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationAllegroCLProcess.java
@@ -80,15 +80,14 @@ public SdkConfigurationAllegroCLProcess(@NotNull Component parent, LispSdk insta
quicklispPath.getField().setText(instance.quickLispPath);
TextFieldWithBrowseButton cclExecutablePicker = new TextFieldWithBrowseButton(allegroExecutable.getField());
- cclExecutablePicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.allegro.executable.select"), "", null, descriptor);
+ cclExecutablePicker.addBrowseFolderListener(null, descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.allegro.executable.select")).withDescription(""));
TextFieldWithBrowseButton cclImagePicker = new TextFieldWithBrowseButton(allegroImage.getField());
- cclImagePicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.allegro.image.select"), "", null, descriptor);
+ cclImagePicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.allegro.image.select")).withDescription(""));
TextFieldWithBrowseButton quicklispPathPicker = new TextFieldWithBrowseButton(quicklispPath.getField());
//noinspection DialogTitleCapitalization
- quicklispPathPicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.quicklisp.select"), "", null, descriptor);
+ quicklispPathPicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.quicklisp.select")).withDescription(""));
return new FormBuilder()
.addLabeledComponent(SltBundle.message("slt.ui.settings.sdk.editor.name"), name, 1, false)
diff --git a/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationCCLProcess.java b/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationCCLProcess.java
index 46dd092..4eaec62 100644
--- a/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationCCLProcess.java
+++ b/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationCCLProcess.java
@@ -80,15 +80,15 @@ public SdkConfigurationCCLProcess(@NotNull Component parent, LispSdk instance, S
quicklispPath.getField().setText(instance.quickLispPath);
TextFieldWithBrowseButton cclExecutablePicker = new TextFieldWithBrowseButton(cclExecutable.getField());
- cclExecutablePicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.ccl.executable.select"), "", null, descriptor);
+ cclExecutablePicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.ccl.executable.select")).withDescription(""));
TextFieldWithBrowseButton cclImagePicker = new TextFieldWithBrowseButton(cclImage.getField());
- cclImagePicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.ccl.image.select"), "", null, descriptor);
+ cclImagePicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.ccl.image.select")).withDescription(""));
TextFieldWithBrowseButton quicklispPathPicker = new TextFieldWithBrowseButton(quicklispPath.getField());
//noinspection DialogTitleCapitalization
- quicklispPathPicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.quicklisp.select"), "", null, descriptor);
+ quicklispPathPicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.quicklisp.select")).withDescription(""));
return new FormBuilder()
.addLabeledComponent(SltBundle.message("slt.ui.settings.sdk.editor.name"), name, 1, false)
diff --git a/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationCMUCLProcess.java b/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationCMUCLProcess.java
index e5db99f..4aa5822 100644
--- a/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationCMUCLProcess.java
+++ b/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationCMUCLProcess.java
@@ -80,15 +80,15 @@ public SdkConfigurationCMUCLProcess(@NotNull Component parent, LispSdk instance,
quicklispPath.getField().setText(instance.quickLispPath);
TextFieldWithBrowseButton cmuclExecutablePicker = new TextFieldWithBrowseButton(cmuclExecutable.getField());
- cmuclExecutablePicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.cmucl.executable.select"), "", null, descriptor);
+ cmuclExecutablePicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.cmucl.executable.select")).withDescription(""));
TextFieldWithBrowseButton cmuclImagePicker = new TextFieldWithBrowseButton(cmuclImage.getField());
- cmuclImagePicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.cmucl.image.select"), "", null, descriptor);
+ cmuclImagePicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.cmucl.image.select")).withDescription(""));
TextFieldWithBrowseButton quicklispPathPicker = new TextFieldWithBrowseButton(quicklispPath.getField());
//noinspection DialogTitleCapitalization
- quicklispPathPicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.quicklisp.select"), "", null, descriptor);
+ quicklispPathPicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.quicklisp.select")).withDescription(""));
return new FormBuilder()
.addLabeledComponent(SltBundle.message("slt.ui.settings.sdk.editor.name"), name, 1, false)
diff --git a/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationSBCLProcess.java b/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationSBCLProcess.java
index 42cd968..673ac7d 100644
--- a/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationSBCLProcess.java
+++ b/src/main/java/com/en_circle/slt/plugin/ui/sdk/SdkConfigurationSBCLProcess.java
@@ -80,15 +80,15 @@ public SdkConfigurationSBCLProcess(@NotNull Component parent, LispSdk instance,
quicklispPath.getField().setText(instance.quickLispPath);
TextFieldWithBrowseButton sbclExecutablePicker = new TextFieldWithBrowseButton(sbclExecutable.getField());
- sbclExecutablePicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.sbcl.executable.select"), "", null, descriptor);
+ sbclExecutablePicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.sbcl.executable.select")).withDescription(""));
TextFieldWithBrowseButton sbclCorePicker = new TextFieldWithBrowseButton(sbclCore.getField());
- sbclCorePicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.sbcl.core.select"), "", null, descriptor);
+ sbclCorePicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.sbcl.core.select")).withDescription(""));
TextFieldWithBrowseButton quicklispPathPicker = new TextFieldWithBrowseButton(quicklispPath.getField());
//noinspection DialogTitleCapitalization
- quicklispPathPicker.addBrowseFolderListener(
- SltBundle.message("slt.ui.settings.sdk.editor.quicklisp.select"), "", null, descriptor);
+ quicklispPathPicker.addBrowseFolderListener(null,
+ descriptor.withTitle(SltBundle.message("slt.ui.settings.sdk.editor.quicklisp.select")).withDescription(""));
return new FormBuilder()
.addLabeledComponent(SltBundle.message("slt.ui.settings.sdk.editor.name"), name, 1, false)
diff --git a/src/main/java/com/en_circle/slt/tools/EscapeUtils.java b/src/main/java/com/en_circle/slt/tools/EscapeUtils.java
new file mode 100644
index 0000000..54654bf
--- /dev/null
+++ b/src/main/java/com/en_circle/slt/tools/EscapeUtils.java
@@ -0,0 +1,11 @@
+package com.en_circle.slt.tools;
+
+import com.google.common.html.HtmlEscapers;
+
+public class EscapeUtils {
+
+ public static String escapeHtml4(String html) {
+ return HtmlEscapers.htmlEscaper().escape(html);
+ }
+
+}
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index f1e0a76..b353e18 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -142,6 +142,8 @@
+
+
@@ -274,22 +276,26 @@
-
0.5.1 New features:
-Symbol inspection
-Rainbow braces option
-More CLHS browser options
-Evaluate top level action
+0.5.4 Changes and fixes:
+Fixed build for new version
+0.5.3 Changes and fixes:
+Fixed build for new version
+0.5.2 New features:
+Refactor - extract lambda to function
+Refactor - rename symbol
+Swank action - disassemble
+Swank action - undefine function
+Swank action - unintern symbol function
+Swank action - reevalute defvar
-0.5.1 Changes and fixes:
-Macroexpand is now action and menu, no longer automatic!
-Added symbols with no file into all search places
+0.5.2 Changes and fixes:
+Fixed indentation issues
+Fixed symbol parsing - |123| reported as number
+Fixed #88, #83
See CHANGELOG.md for more details
]]>
-
\ No newline at end of file