diff --git a/app/src/main/assets/data/jls.jar b/app/src/main/assets/data/jls.jar index c8ccead8c..a0e6405ca 100644 Binary files a/app/src/main/assets/data/jls.jar and b/app/src/main/assets/data/jls.jar differ diff --git a/app/src/main/java/com/itsaky/androidide/lsp/LanguageServerWrapper.java b/app/src/main/java/com/itsaky/androidide/lsp/LanguageServerWrapper.java index ea93bef04..e4f4c9751 100644 --- a/app/src/main/java/com/itsaky/androidide/lsp/LanguageServerWrapper.java +++ b/app/src/main/java/com/itsaky/androidide/lsp/LanguageServerWrapper.java @@ -164,11 +164,6 @@ public class LanguageServerWrapper implements IDELanguageServer { this.service = service; } - @Override - public CompletableFuture> semanticHighlights(SemanticHighlightsParams params) { - return CompletableFuture.completedFuture(Collections.singletonList((SemanticHighlight) null)); - } - @Override public CompletableFuture> callHierarchyIncomingCalls(CallHierarchyIncomingCallsParams p1) { return service.callHierarchyIncomingCalls(p1); diff --git a/app/src/main/java/com/itsaky/androidide/managers/ToolsManager.java b/app/src/main/java/com/itsaky/androidide/managers/ToolsManager.java index 6ba2e5b5b..67bfc6204 100644 --- a/app/src/main/java/com/itsaky/androidide/managers/ToolsManager.java +++ b/app/src/main/java/com/itsaky/androidide/managers/ToolsManager.java @@ -17,7 +17,7 @@ public class ToolsManager { private static PreferenceManager prefs; - public static final int JLS_VERSION = 18; + public static final int JLS_VERSION = 21; public static final int LOGSENDER_VERSION = 1; public static final int CLEANER_VERSION = 1; public static final int GRADLE_API_VERSION = 2; diff --git a/app/src/main/java/com/itsaky/androidide/syntax/lexer/impls/java/HighlightRangeHelper.java b/app/src/main/java/com/itsaky/androidide/syntax/lexer/impls/java/HighlightRangeHelper.java index c7c713a00..35f4a36b8 100644 --- a/app/src/main/java/com/itsaky/androidide/syntax/lexer/impls/java/HighlightRangeHelper.java +++ b/app/src/main/java/com/itsaky/androidide/syntax/lexer/impls/java/HighlightRangeHelper.java @@ -228,7 +228,7 @@ public class HighlightRangeHelper { } private int containsStartPosition (List ranges, int line, int column) { - int index = binarySearchTypeFrom(ranges, line, column); + int index = binarySearchStartPosition(ranges, line, column); if(index >= 0 && index < ranges.size()) { return index; } @@ -236,7 +236,7 @@ public class HighlightRangeHelper { return -1; } - private int binarySearchTypeFrom(List ranges, int line, int column) { + private int binarySearchStartPosition(List ranges, int line, int column) { int left = 0, right = ranges.size() - 1; while (left <= right) { diff --git a/app/src/main/java/com/itsaky/androidide/syntax/lexer/impls/java/JavaLexerImpl.java b/app/src/main/java/com/itsaky/androidide/syntax/lexer/impls/java/JavaLexerImpl.java index 6a90db3fd..6a1f5c428 100644 --- a/app/src/main/java/com/itsaky/androidide/syntax/lexer/impls/java/JavaLexerImpl.java +++ b/app/src/main/java/com/itsaky/androidide/syntax/lexer/impls/java/JavaLexerImpl.java @@ -10,7 +10,9 @@ import com.itsaky.androidide.syntax.lexer.tokens.TokenType; import com.itsaky.androidide.utils.LSPUtils; import com.itsaky.androidide.utils.Logger; import com.itsaky.lsp.SemanticHighlight; +import com.itsaky.lsp.SemanticHighlightsParams; import com.itsaky.lsp.services.IDELanguageServer; +import com.itsaky.lsp.services.IDETextDocumentService; import io.github.rosemoe.editor.struct.BlockLine; import io.github.rosemoe.editor.struct.Span; import io.github.rosemoe.editor.text.CharPosition; @@ -27,11 +29,14 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import org.antlr.v4.runtime.CharStreams; import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.Range; +import org.eclipse.lsp4j.TextDocumentIdentifier; public class JavaLexerImpl extends io.github.rosemoe.editor.langs.AbstractCodeAnalyzer { @@ -47,6 +52,7 @@ public class JavaLexerImpl extends io.github.rosemoe.editor.langs.AbstractCodeAn @Override public void analyze(IDELanguageServer languageServer, File file, CharSequence content, TextAnalyzeResult colors, TextAnalyzer.AnalyzeThread.Delegate delegate) throws Exception { + final JavaLexerAnalyzer lexer = new JavaLexerAnalyzer((Content) content, colors, this.helper); lexer.init(); while (delegate.shouldAnalyze()) { @@ -60,6 +66,7 @@ public class JavaLexerImpl extends io.github.rosemoe.editor.langs.AbstractCodeAn colors.determine(lexer.lastLine); colors.setSuppressSwitch(lexer.maxSwitch + 10); colors.setHexColors(lexer.lineColors); + } @Override diff --git a/app/src/main/java/io/github/rosemoe/editor/widget/CodeEditor.java b/app/src/main/java/io/github/rosemoe/editor/widget/CodeEditor.java index b800cddd0..5c8a91707 100644 --- a/app/src/main/java/io/github/rosemoe/editor/widget/CodeEditor.java +++ b/app/src/main/java/io/github/rosemoe/editor/widget/CodeEditor.java @@ -69,6 +69,7 @@ import com.itsaky.androidide.lsp.IDELanguageClientImpl; import com.itsaky.androidide.lsp.LSPProvider; import com.itsaky.androidide.lsp.providers.CodeActionProvider; import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE; +import com.itsaky.androidide.utils.JSONUtility; import com.itsaky.androidide.utils.Logger; import com.itsaky.androidide.utils.Symbols; import com.itsaky.androidide.utils.TypefaceUtils; @@ -102,7 +103,6 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.CompletableFuture; import org.eclipse.lsp4j.CodeAction; import org.eclipse.lsp4j.CodeActionOptions; @@ -135,6 +135,7 @@ import org.eclipse.lsp4j.TextDocumentIdentifier; import org.eclipse.lsp4j.TextDocumentItem; import org.eclipse.lsp4j.VersionedTextDocumentIdentifier; import org.eclipse.lsp4j.jsonrpc.messages.Either; +import android.os.Handler; /** * CodeEditor is a editor that can highlight text regions by doing basic syntax analyzing @@ -210,10 +211,14 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca static final int ACTION_MODE_NONE = 0; static final int ACTION_MODE_SEARCH_TEXT = 1; static final int ACTION_MODE_SELECT_TEXT = 2; + private static final String LOG_TAG = "CodeEditor"; + protected SymbolPairMatch mLanguageSymbolPairs; + Layout mLayout; int mStartedActionMode; + private int mTabWidth; private int mCursorPosition; private int mInputType; @@ -228,6 +233,7 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca private float mInsertSelWidth; private float mBlockLineWidth; private float mLineInfoTextSize; + private long mLastEdited; private boolean mWait; private boolean mDrag; private boolean mScalable; @@ -302,6 +308,7 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca private SymbolPairMatch mOverrideSymbolPairs; private LongArrayList mPostDrawLineNumbers = new LongArrayList(); private CharPosition mLockedSelection; + EditorInputConnection mConnection; KeyMetaStates mKeyMetaStates = new KeyMetaStates(this); @@ -528,6 +535,7 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca mPaintOther.setTypeface(Typeface.MONOSPACE); mBuffer = new char[256]; mBuffer2 = new char[16]; + mLastEdited = 0; mStartedActionMode = ACTION_MODE_NONE; setTextSize(DEFAULT_TEXT_SIZE); setLineInfoTextSize(mPaint.getTextSize()); @@ -1488,6 +1496,7 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca mPaint.setStrokeWidth(getDpUnit() * 1.4f); final List diags = getEditorLanguage().getAnalyzer().findDiagnosticsContainingLine(line); final int size = diags == null ? 0 : diags.size(); + LOG.info("Diagnostics for line " + line, JSONUtility.prettyPrinter.toJson(diags), "size=" + size); for(int i=0;i> semanticHighlights (SemanticHighlightsParams params) ; - +public interface IDETextDocumentService extends TextDocumentService { }