From ea046efae87f03e5d83bbbb1d72dd301fe474a8a Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Wed, 20 Sep 2017 11:19:03 -0700 Subject: [PATCH] WIP: snippet infrastructure --- .../handlers/SimpleCompletionFactory.java | 51 +++++++++++++++++++ .../boot/java/snippets/JavaSnippet.java | 17 +++++++ .../boot/java/snippets/SnippetContext.java | 17 +++++++ .../boot/java/snippets/eclipse-templates.xml | 50 ++++++++++++++++++ 4 files changed, 135 insertions(+) create mode 100644 headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/SimpleCompletionFactory.java create mode 100644 headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/snippets/JavaSnippet.java create mode 100644 headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/snippets/SnippetContext.java create mode 100644 headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/snippets/eclipse-templates.xml diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/SimpleCompletionFactory.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/SimpleCompletionFactory.java new file mode 100644 index 000000000..256e6c167 --- /dev/null +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/SimpleCompletionFactory.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2017 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java.handlers; + +import org.eclipse.lsp4j.CompletionItemKind; +import org.springframework.ide.vscode.commons.languageserver.completion.DocumentEdits; +import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionProposal; +import org.springframework.ide.vscode.commons.util.Renderable; +import org.springframework.ide.vscode.commons.util.text.IDocument; + +public class SimpleCompletionFactory { + + public ICompletionProposal simpleProposal(IDocument doc, int offset, String query, CompletionItemKind kind, String value, String detail, Renderable info) { + DocumentEdits edits = new DocumentEdits(doc); + edits.replace(offset-query.length(), offset, value); + return new ICompletionProposal() { + @Override + public DocumentEdits getTextEdit() { + return edits; + } + + @Override + public String getLabel() { + return value; + } + + @Override + public CompletionItemKind getKind() { + return kind; + } + + @Override + public Renderable getDocumentation() { + return info; + } + + @Override + public String getDetail() { + return detail; + } + }; + } +} diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/snippets/JavaSnippet.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/snippets/JavaSnippet.java new file mode 100644 index 000000000..d3610b6b5 --- /dev/null +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/snippets/JavaSnippet.java @@ -0,0 +1,17 @@ +/******************************************************************************* + * Copyright (c) 2017 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java.snippets; + +public class JavaSnippet { + + private SnippetContext context; + +} diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/snippets/SnippetContext.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/snippets/SnippetContext.java new file mode 100644 index 000000000..a37043c61 --- /dev/null +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/snippets/SnippetContext.java @@ -0,0 +1,17 @@ +/******************************************************************************* + * Copyright (c) 2017 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java.snippets; + +import org.eclipse.jdt.core.dom.ASTNode; + +public interface SnippetContext { + boolean appliesTo(ASTNode node); +} diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/snippets/eclipse-templates.xml b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/snippets/eclipse-templates.xml new file mode 100644 index 000000000..29f2785cc --- /dev/null +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/snippets/eclipse-templates.xml @@ -0,0 +1,50 @@ + + + + + + +