Skip to content

Commit a683cbb

Browse files
Merge remote-tracking branch 'upstream/main'
2 parents 3d000f2 + d984a74 commit a683cbb

3 files changed

Lines changed: 24 additions & 14 deletions

File tree

editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/client/languageserver/wrapper/EventHandler.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
package io.github.rosemoe.sora.lsp.client.languageserver.wrapper
2626

2727
import io.github.rosemoe.sora.lsp.client.languageserver.ServerInitializeListener
28+
import io.github.rosemoe.sora.lsp.client.languageserver.ServerStatus
2829
import org.eclipse.lsp4j.InitializeResult
2930
import org.eclipse.lsp4j.MessageParams
3031
import org.eclipse.lsp4j.jsonrpc.MessageConsumer
@@ -62,6 +63,7 @@ class EventHandler internal constructor(
6263
// do nothing
6364
}
6465

66+
fun onStatusChange(newStatus: ServerStatus, oldStatus: ServerStatus) {}
6567
fun onHandlerException(exception: Exception) {}
6668
fun onShowMessage(messageParams: MessageParams?) {}
6769
fun onLogMessage(messageParams: MessageParams?) {}

editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/client/languageserver/wrapper/LanguageServerWrapper.kt

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class LanguageServerWrapper(
9494
private val TAG = "LanguageServerWrapper"
9595
val serverName = serverDefinition.name
9696

97-
private val connectedEditors = Collections.newSetFromMap(WeakHashMap<LspEditor, Boolean>());
97+
private val connectedEditors = Collections.newSetFromMap(WeakHashMap<LspEditor, Boolean>())
9898

9999
private var languageServer: LanguageServer? = null
100100

@@ -118,9 +118,13 @@ class LanguageServerWrapper(
118118

119119
@Volatile
120120
var status = ServerStatus.STOPPED
121-
private set
121+
private set(value) {
122+
if (field == value) return
123+
serverDefinition.eventListener.onStatusChange(value, field)
124+
field = value
125+
}
122126

123-
private val readyToConnect = Collections.newSetFromMap(WeakHashMap<LspEditor, Boolean>());
127+
private val readyToConnect = Collections.newSetFromMap(WeakHashMap<LspEditor, Boolean>())
124128

125129
private val commonCoroutineScope = project.coroutineScope
126130

@@ -142,7 +146,7 @@ class LanguageServerWrapper(
142146
}
143147

144148
try {
145-
start(true);
149+
start(true)
146150

147151
initializeFuture?.get(
148152
if (capabilitiesAlreadyRequested) 0L else Timeout[Timeouts.INIT].toLong(),
@@ -163,11 +167,11 @@ class LanguageServerWrapper(
163167
stop(false)
164168
return null
165169
} catch (e: Exception) {
166-
Log.w(TAG, "Error while waiting for initialization", e);
170+
Log.w(TAG, "Error while waiting for initialization", e)
167171
serverDefinition.eventListener
168-
.onHandlerException(LSPException("Error while waiting for initialization", e));
169-
stop(false);
170-
return null;
172+
.onHandlerException(LSPException("Error while waiting for initialization", e))
173+
stop(false)
174+
return null
171175
}
172176

173177
if (initializeResult != null) {
@@ -365,7 +369,7 @@ class LanguageServerWrapper(
365369
name = File(URI.create(uri)).name
366370
}
367371
// Maybe the user should be allowed to customize the WorkspaceFolder?
368-
// workspaceFolder.setName("");
372+
// workspaceFolder.setName("")
369373
initParams.workspaceFolders = listOf(workspaceFolder)
370374

371375
val markupKinds = listOf("markdown", "plaintext")

editor/src/main/java/io/github/rosemoe/sora/widget/EditorRenderer.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,11 +1252,12 @@ protected void drawRows(Canvas canvas, float offset, LongArrayList postDrawLineN
12521252

12531253
// Draw matched text background
12541254
if (matchedPositions.size() > 0) {
1255+
var tr = createTextRow(row);
12551256
for (int i = 0; i < matchedPositions.size(); i++) {
12561257
var position = matchedPositions.get(i);
12571258
var start = IntPair.getFirst(position);
12581259
var end = IntPair.getSecond(position);
1259-
drawRowRegionBackground(canvas, row, start, end, rowInf.startColumn,
1260+
drawRowRegionBackground(canvas, row, tr, start, end, rowInf.startColumn,
12601261
rowInf.endColumn, editor.getColorScheme().getColor(EditorColorScheme.MATCHED_TEXT_BACKGROUND),
12611262
editor.getColorScheme().getColor(EditorColorScheme.MATCHED_TEXT_BORDER));
12621263
}
@@ -1265,10 +1266,11 @@ protected void drawRows(Canvas canvas, float offset, LongArrayList postDrawLineN
12651266
// Draw highlight text background
12661267
if (highlightPositions.getSize() > 0) {
12671268
int finalRow = row;
1269+
var tr = createTextRow(row);
12681270
highlightPositions.forEach((position, colorPair) -> {
12691271
var start = IntPair.getFirst(position);
12701272
var end = IntPair.getSecond(position);
1271-
drawRowRegionBackground(canvas, finalRow, start, end, rowInf.startColumn,
1273+
drawRowRegionBackground(canvas, finalRow, tr, start, end, rowInf.startColumn,
12721274
rowInf.endColumn, IntPair.getFirst(colorPair), IntPair.getSecond(colorPair));
12731275
return null;
12741276
});
@@ -1293,7 +1295,7 @@ protected void drawRows(Canvas canvas, float offset, LongArrayList postDrawLineN
12931295
editor.getColorScheme().getColor(EditorColorScheme.SELECTED_TEXT_BACKGROUND),
12941296
editor.getColorScheme().getColor(EditorColorScheme.SELECTED_TEXT_BORDER));
12951297
} else if (selectionStart < selectionEnd) {
1296-
drawRowRegionBackground(canvas, row, selectionStart, selectionEnd, rowInf.startColumn, rowInf.endColumn,
1298+
drawRowRegionBackground(canvas, row, null, selectionStart, selectionEnd, rowInf.startColumn, rowInf.endColumn,
12971299
editor.getColorScheme().getColor(EditorColorScheme.SELECTED_TEXT_BACKGROUND),
12981300
editor.getColorScheme().getColor(EditorColorScheme.SELECTED_TEXT_BORDER));
12991301
}
@@ -1819,7 +1821,7 @@ protected int getRowBottomForBackground(int row) {
18191821
* @param highlightEnd Region end
18201822
* @param color Color of background
18211823
*/
1822-
protected void drawRowRegionBackground(Canvas canvas, int row, int highlightStart, int highlightEnd, int rowStart, int rowEnd, int color, int borderColor) {
1824+
protected void drawRowRegionBackground(@NonNull Canvas canvas, int row, @Nullable TextRow tr, int highlightStart, int highlightEnd, int rowStart, int rowEnd, int color, int borderColor) {
18231825
highlightStart = Math.max(highlightStart, rowStart);
18241826
highlightEnd = Math.min(highlightEnd, rowEnd);
18251827
if (highlightStart < highlightEnd) {
@@ -1830,7 +1832,9 @@ protected void drawRowRegionBackground(Canvas canvas, int row, int highlightStar
18301832
offset += getMiniGraphWidth();
18311833
}
18321834
float finalOffset = offset;
1833-
var tr = createTextRow(row);
1835+
if (tr == null) {
1836+
tr = createTextRow(row);
1837+
}
18341838
var width = editor.getWidth();
18351839
tr.iterateBackgroundRegions(highlightStart, highlightEnd, false, false, (left, right) -> {
18361840
tmpRect.left = finalOffset + left;

0 commit comments

Comments
 (0)