From 9f1bf3f26b85f857d2a9dd9dd5d2ce142ded3140 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Mon, 27 Dec 2021 14:56:44 +0530 Subject: [PATCH] Add completions for namespace declarations in XMLCompletionService --- .../xml/completion/XMLCompletionService.java | 59 ++++++++++++++++--- app/src/main/res/values/strings.xml | 1 + .../java/com/itsaky/attrinfo/models/Attr.java | 2 - 3 files changed, 51 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/itsaky/androidide/language/xml/completion/XMLCompletionService.java b/app/src/main/java/com/itsaky/androidide/language/xml/completion/XMLCompletionService.java index c1970ded9..dfe61b034 100755 --- a/app/src/main/java/com/itsaky/androidide/language/xml/completion/XMLCompletionService.java +++ b/app/src/main/java/com/itsaky/androidide/language/xml/completion/XMLCompletionService.java @@ -17,7 +17,11 @@ **************************************************************************************/ package com.itsaky.androidide.language.xml.completion; +import androidx.annotation.NonNull; + import com.google.gson.JsonObject; +import com.itsaky.androidide.R; +import com.itsaky.androidide.app.StudioApp; import com.itsaky.androidide.lexers.xml.XMLLexer; import com.itsaky.attrinfo.AttrInfo; import com.itsaky.attrinfo.models.Attr; @@ -34,11 +38,16 @@ import org.antlr.v4.runtime.Token; import org.eclipse.lsp4j.CompletionItem; import org.eclipse.lsp4j.CompletionItemKind; import org.eclipse.lsp4j.InsertTextFormat; +import org.jetbrains.annotations.Contract; public class XMLCompletionService { - - private AttrInfo attrs; - private WidgetInfo widgets; + + private static final String APP_NS = "http://schemas.android.com/apk/res/auto"; + private static final String ANDROID_NS = "http://schemas.android.com/apk/res/android"; + private static final String TOOLS_NS = "http://schemas.android.com/tools"; + + private final AttrInfo attrs; + private final WidgetInfo widgets; private static final String INITIAL_TAG_ATTRIBUTES = "android:layout_width=\"wrap_content\"\n" + @@ -49,7 +58,7 @@ public class XMLCompletionService { this.widgets = widgets; } - public List complete(CharSequence content, int index, int line, int column, String prefix) { + public List complete(CharSequence content, int index, int line, int column, @NonNull String prefix) { final List result = new ArrayList<>(); if(prefix.startsWith("<") || prefix.startsWith("' @@ -166,6 +195,18 @@ public class XMLCompletionService { return sb.toString(); } + + @NonNull + @Contract(pure = true) + private static CompletionItem createNamespaceCompletion (String name, String value) { + final var item = new CompletionItem (); + item.setLabel (name + "Ns"); + item.setDetail (StudioApp.getInstance ().getString(R.string.msg_add_namespace_decl, name)); + item.setInsertText (value); + item.setKind (CompletionItemKind.Snippet); + item.setSortText ("1000" + item.getLabel ()); // This item is expected to be at the last of the completion list + return item; + } private List handleCompletionResults(List result) { return result; @@ -179,7 +220,7 @@ public class XMLCompletionService { this.cursorIndex = cursorIndex; } - private boolean containsCursor(Token token) { + private boolean containsCursor(@NonNull Token token) { int start = token.getStartIndex(); int end = token.getStopIndex(); return start <= cursorIndex && cursorIndex <= end; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4093b3692..c8df9736f 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -331,5 +331,6 @@ Unable to create attribute editor for this attribute Invalid value New string value + Add \'%1$s\' namespace declaration diff --git a/sdk-info/src/main/java/com/itsaky/attrinfo/models/Attr.java b/sdk-info/src/main/java/com/itsaky/attrinfo/models/Attr.java index 0242894fb..3bd5324a7 100755 --- a/sdk-info/src/main/java/com/itsaky/attrinfo/models/Attr.java +++ b/sdk-info/src/main/java/com/itsaky/attrinfo/models/Attr.java @@ -19,7 +19,6 @@ **************************************************************************************/ package com.itsaky.attrinfo.models; -import android.graphics.Color; import android.text.TextUtils; import androidx.annotation.NonNull; @@ -28,7 +27,6 @@ import com.itsaky.androidide.utils.Logger; import org.jetbrains.annotations.Contract; -import java.util.Collection; import java.util.HashSet; import java.util.Objects; import java.util.Set;