From 3447adfc9e71ba23fb408250929fa440571f17a7 Mon Sep 17 00:00:00 2001 From: aboyko Date: Tue, 17 Jan 2023 15:49:12 -0500 Subject: [PATCH] Boot LS console char limit. Extra VM args for Boot LS --- .../boot/ls/SpringBootLanguageServer.java | 1 + .../console/LanguageServerIOConsole.java | 47 ++++++++++++++++++- .../vscode-spring-boot/lib/Main.ts | 4 ++ 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/SpringBootLanguageServer.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/SpringBootLanguageServer.java index e17c26c70..9d3aeb983 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/SpringBootLanguageServer.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/SpringBootLanguageServer.java @@ -45,6 +45,7 @@ public class SpringBootLanguageServer extends STS4LanguageServerProcessStreamCon // args.add("-Xrunjdwp:server=y,transport=dt_socket,address=1044,suspend=n"); args.add("-Dlsp.completions.indentation.enable=true"); args.add("-Xmx1024m"); + args.add("-XX:+HeapDumpOnOutOfMemoryError"); args.add("-XX:TieredStopAtLevel=1"); addCustomJVMArgs(args); diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerIOConsole.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerIOConsole.java index a7ec79db2..eeda4f830 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerIOConsole.java +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerIOConsole.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018 Pivotal, Inc. + * Copyright (c) 2018, 2023 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -10,9 +10,15 @@ *******************************************************************************/ package org.springframework.tooling.ls.eclipse.commons.console; +import org.eclipse.debug.internal.ui.DebugUIPlugin; +import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.ui.console.IOConsole; -public class LanguageServerIOConsole extends IOConsole { +@SuppressWarnings("restriction") +public class LanguageServerIOConsole extends IOConsole implements IPropertyChangeListener { private static final String CONSOLE_TYPE = LanguageServerIOConsole.class.getName(); @@ -20,4 +26,41 @@ public class LanguageServerIOConsole extends IOConsole { super(title, CONSOLE_TYPE, null); } + @Override + protected void init() { + IPreferenceStore store = DebugUIPlugin.getDefault().getPreferenceStore(); + store.addPropertyChangeListener(this); + if (store.getBoolean(IDebugPreferenceConstants.CONSOLE_LIMIT_CONSOLE_OUTPUT)) { + int highWater = store.getInt(IDebugPreferenceConstants.CONSOLE_HIGH_WATER_MARK); + int lowWater = store.getInt(IDebugPreferenceConstants.CONSOLE_LOW_WATER_MARK); + setWaterMarks(lowWater, highWater); + } + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + String property = evt.getProperty(); + IPreferenceStore store = DebugUIPlugin.getDefault().getPreferenceStore(); + if (property.equals(IDebugPreferenceConstants.CONSOLE_LIMIT_CONSOLE_OUTPUT) + || property.equals(IDebugPreferenceConstants.CONSOLE_HIGH_WATER_MARK) + || property.equals(IDebugPreferenceConstants.CONSOLE_LOW_WATER_MARK)) { + boolean limitBufferSize = store.getBoolean(IDebugPreferenceConstants.CONSOLE_LIMIT_CONSOLE_OUTPUT); + if (limitBufferSize) { + int highWater = store.getInt(IDebugPreferenceConstants.CONSOLE_HIGH_WATER_MARK); + int lowWater = store.getInt(IDebugPreferenceConstants.CONSOLE_LOW_WATER_MARK); + if (highWater > lowWater) { + setWaterMarks(lowWater, highWater); + } + } else { + setWaterMarks(-1, -1); + } + } + } + + @Override + protected void dispose() { + super.dispose(); + DebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this); + } + } \ No newline at end of file diff --git a/vscode-extensions/vscode-spring-boot/lib/Main.ts b/vscode-extensions/vscode-spring-boot/lib/Main.ts index 977f66830..74a3c6862 100644 --- a/vscode-extensions/vscode-spring-boot/lib/Main.ts +++ b/vscode-extensions/vscode-spring-boot/lib/Main.ts @@ -35,6 +35,10 @@ export function activate(context: VSCode.ExtensionContext): Thenable { let version = jvm.getMajorVersion(); if (version < 17) {