PT #166315444: XML content assist for VSCode and Theia
This commit is contained in:
@@ -48,6 +48,12 @@
|
||||
id="sts.java.hierarchy.supertypes">
|
||||
</command>
|
||||
</delegateCommandHandler>
|
||||
<delegateCommandHandler
|
||||
class="org.springframework.tooling.jdt.ls.extension.JavaCodeCompletionHandler">
|
||||
<command
|
||||
id="sts.java.code.completions">
|
||||
</command>
|
||||
</delegateCommandHandler>
|
||||
</extension>
|
||||
</plugin>
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2019 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
|
||||
* https://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Pivotal, Inc. - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.springframework.tooling.jdt.ls.extension;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.jdt.ls.core.internal.IDelegateCommandHandler;
|
||||
import org.springframework.ide.vscode.commons.protocol.java.JavaCodeCompleteParams;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
@SuppressWarnings("restriction")
|
||||
public class JavaCodeCompletionHandler implements IDelegateCommandHandler {
|
||||
|
||||
private Gson gson = new Gson();
|
||||
|
||||
@Override
|
||||
public Object executeCommand(String commandId, List<Object> arguments, IProgressMonitor monitor) throws Exception {
|
||||
JavaCodeCompleteParams params = gson.fromJson(gson.toJson(arguments.get(0)), JavaCodeCompleteParams.class);
|
||||
return JavaHelpers.CODE_COMPLETIONS.get().codeComplete(params.getProjectUri(), params.getPrefix(), params.isIncludeTypes(), params.isIncludePackages());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -12,6 +12,7 @@ package org.springframework.tooling.jdt.ls.extension;
|
||||
|
||||
import org.eclipse.jdt.ls.core.internal.HoverInfoProvider;
|
||||
import org.springframework.tooling.jdt.ls.commons.Logger;
|
||||
import org.springframework.tooling.jdt.ls.commons.java.JavaCodeCompletion;
|
||||
import org.springframework.tooling.jdt.ls.commons.java.JavaData;
|
||||
import org.springframework.tooling.jdt.ls.commons.java.JavaFluxSearch;
|
||||
import org.springframework.tooling.jdt.ls.commons.java.TypeHierarchy;
|
||||
@@ -29,5 +30,7 @@ public class JavaHelpers {
|
||||
final public static Supplier<JavaFluxSearch> SEARCH = Suppliers.memoize(() -> new JavaFluxSearch(logger, DATA.get()));
|
||||
|
||||
final public static Supplier<TypeHierarchy> HIERARCHY = Suppliers.memoize(() -> new TypeHierarchy(logger, DATA.get()));
|
||||
|
||||
final public static Supplier<JavaCodeCompletion> CODE_COMPLETIONS = Suppliers.memoize(() -> new JavaCodeCompletion());
|
||||
|
||||
}
|
||||
|
||||
@@ -21,6 +21,8 @@ import org.eclipse.lsp4j.CompletionItemKind;
|
||||
import org.eclipse.lsp4xml.dom.DOMAttr;
|
||||
import org.eclipse.lsp4xml.dom.DOMNode;
|
||||
import org.eclipse.lsp4xml.dom.parser.Scanner;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.ide.vscode.boot.xml.XMLCompletionProvider;
|
||||
import org.springframework.ide.vscode.commons.java.IJavaProject;
|
||||
import org.springframework.ide.vscode.commons.languageserver.completion.DocumentEdits;
|
||||
@@ -36,6 +38,8 @@ import org.springframework.ide.vscode.commons.util.text.TextDocument;
|
||||
* @author Martin Lippert
|
||||
*/
|
||||
public class TypeCompletionProposalProvider implements XMLCompletionProvider {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(TypeCompletionProposalProvider.class);
|
||||
|
||||
private final JavaProjectFinder projectFinder;
|
||||
private final SimpleLanguageServer server;
|
||||
@@ -80,7 +84,8 @@ public class TypeCompletionProposalProvider implements XMLCompletionProvider {
|
||||
final String finalPrefix = prefix;
|
||||
|
||||
try {
|
||||
return completions.get().stream()
|
||||
List<JavaCodeCompleteData> list = completions.get();
|
||||
return list.stream()
|
||||
.filter(proposal -> {
|
||||
if (proposal.isClassProposal()) return classesAllowed;
|
||||
if (proposal.isInterfaceProposal()) return interfacesAllowed;
|
||||
@@ -93,7 +98,7 @@ public class TypeCompletionProposalProvider implements XMLCompletionProvider {
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
catch (Exception e) {
|
||||
// TODO: logging
|
||||
log.error("{}", e);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -113,19 +118,25 @@ public class TypeCompletionProposalProvider implements XMLCompletionProvider {
|
||||
}
|
||||
|
||||
private TypeCompletionProposal createPackageProposal(JavaCodeCompleteData proposal, TextDocument doc, String prefix, int offset) {
|
||||
String label = proposal.getFullyQualifiedName();
|
||||
String fqName = proposal.getFullyQualifiedName();
|
||||
String label = fqName;
|
||||
CompletionItemKind kind = CompletionItemKind.Module;
|
||||
|
||||
DocumentEdits edits = new DocumentEdits(doc, false);
|
||||
edits.replace(offset - prefix.length(), offset, proposal.getFullyQualifiedName());
|
||||
if (fqName.startsWith(prefix)) {
|
||||
edits.insert(offset, fqName.substring(prefix.length()));
|
||||
} else {
|
||||
edits.replace(offset - prefix.length(), offset, fqName);
|
||||
}
|
||||
|
||||
Renderable renderable = null;
|
||||
|
||||
return new TypeCompletionProposal(label, kind, edits, proposal.getFullyQualifiedName(), renderable, proposal.getRelevance());
|
||||
return new TypeCompletionProposal(label, kind, edits, fqName, renderable, proposal.getRelevance());
|
||||
}
|
||||
|
||||
private TypeCompletionProposal createTypeProposal(JavaCodeCompleteData proposal, TextDocument doc, String prefix, int offset) {
|
||||
String label = proposal.getFullyQualifiedName();
|
||||
String fqName = proposal.getFullyQualifiedName();
|
||||
String label = fqName;
|
||||
|
||||
int splitIndex = Math.max(label.lastIndexOf("."), label.lastIndexOf("$"));
|
||||
|
||||
@@ -142,11 +153,15 @@ public class TypeCompletionProposalProvider implements XMLCompletionProvider {
|
||||
}
|
||||
|
||||
DocumentEdits edits = new DocumentEdits(doc, false);
|
||||
edits.replace(offset - prefix.length(), offset, proposal.getFullyQualifiedName());
|
||||
if (fqName.startsWith(prefix)) {
|
||||
edits.insert(offset, fqName.substring(prefix.length()));
|
||||
} else {
|
||||
edits.replace(offset - prefix.length(), offset, fqName);
|
||||
}
|
||||
|
||||
Renderable renderable = null;
|
||||
|
||||
return new TypeCompletionProposal(label, kind, edits, proposal.getFullyQualifiedName(), renderable, proposal.getRelevance());
|
||||
return new TypeCompletionProposal(label, kind, edits, fqName, renderable, proposal.getRelevance());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ export const SEARCH_TYPES_REQUEST_TYPE = 'sts/javaSearchTypes';
|
||||
export const SEACH_PACKAGES_REQUEST_TYPE = 'sts/javaSearchPackages';
|
||||
export const SUBTYPES_REQUEST_TYPE = 'sts/javaSubTypes';
|
||||
export const SUPERTYPES_REQUEST_TYPE = 'sts/javaSuperTypes';
|
||||
export const CODE_COMPLETE_REQUEST_TYPE = 'sts/javaCodeComplete';
|
||||
|
||||
@injectable()
|
||||
export class JavaDataService {
|
||||
@@ -38,6 +39,7 @@ export class JavaDataService {
|
||||
client.onRequest(SEACH_PACKAGES_REQUEST_TYPE, (params: JavaSearchParams) => this.commands.executeCommand('sts.java.search.packages', params));
|
||||
client.onRequest(SUBTYPES_REQUEST_TYPE, (params: JavaTypeHierarchyParams) => this.commands.executeCommand('sts.java.hierarchy.subtypes', params));
|
||||
client.onRequest(SUPERTYPES_REQUEST_TYPE, (params: JavaTypeHierarchyParams) => this.commands.executeCommand('sts.java.hierarchy.supertypes', params));
|
||||
client.onRequest(CODE_COMPLETE_REQUEST_TYPE, (params: JavaCodeCompleteParams) => this.commands.executeCommand('sts.java.code.completions', params));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -61,4 +63,11 @@ interface JavaTypeHierarchyParams {
|
||||
projectUri?: string;
|
||||
fqName: string;
|
||||
includeFocusType: boolean;
|
||||
}
|
||||
|
||||
interface JavaCodeCompleteParams {
|
||||
projectUri: string;
|
||||
prefix: string;
|
||||
includeTypes: boolean;
|
||||
includePackages: boolean;
|
||||
}
|
||||
1244
vscode-extensions/commons-vscode/package-lock.json
generated
1244
vscode-extensions/commons-vscode/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -42,6 +42,11 @@ export function registerJavaDataService(client : LanguageClient) : void {
|
||||
client.onRequest(javaSuperTypes, async (params: JavaTypeHierarchyParams) =>
|
||||
<any> await VSCode.commands.executeCommand("java.execute.workspaceCommand", "sts.java.hierarchy.supertypes", params)
|
||||
);
|
||||
|
||||
const javaCodeCompletion = new RequestType<JavaCodeCompleteParams, any, void, void>('sts/javaCodeComplete');
|
||||
client.onRequest(javaCodeCompletion, async (params: JavaCodeCompleteParams) =>
|
||||
<any> await VSCode.commands.executeCommand("java.execute.workspaceCommand", "sts.java.code.completions", params)
|
||||
);
|
||||
}
|
||||
|
||||
interface JavaDataParams {
|
||||
@@ -63,4 +68,11 @@ interface JavaTypeHierarchyParams {
|
||||
projectUri?: string;
|
||||
fqName: string;
|
||||
includeFocusType: boolean;
|
||||
}
|
||||
|
||||
interface JavaCodeCompleteParams {
|
||||
projectUri: string;
|
||||
prefix: string;
|
||||
includeTypes: boolean;
|
||||
includePackages: boolean;
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "vscode-spring-boot",
|
||||
"version": "1.7.0",
|
||||
"version": "1.8.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@pivotal-tools/commons-vscode": {
|
||||
"version": "file:../commons-vscode/pivotal-tools-commons-vscode-0.2.2.tgz",
|
||||
"integrity": "sha512-cMT+x/NOLnIhyUPV5rF4CGLrCdUlX+fGCz7DoegnmxVhiD9Y0yKsUP14gwRU12qRTm8o7H0MJbZaA9h+bw5okw==",
|
||||
"integrity": "sha512-wpuWx/wm1LYQ6vF2lfiLzETLzPFlNiUtzqoQd8eMhd5MQLeqJIAB9P2s3TggdD6bdpP+z2cknaAr5bpnTfMd2Q==",
|
||||
"requires": {
|
||||
"@pivotal-tools/jvm-launch-utils": "0.0.12",
|
||||
"deep-equal": "^1.0.1",
|
||||
|
||||
Reference in New Issue
Block a user