PT #157668103: Switch to Gson where possible - except Bosh

This commit is contained in:
BoykoAlex
2018-05-17 15:53:33 -04:00
parent e598039f65
commit 984eafc2c0
8 changed files with 73 additions and 70 deletions

View File

@@ -1,3 +1,3 @@
{
"jarUrl": "https://s3-us-west-1.amazonaws.com/s3-test.spring.io/sts4/fatjars/snapshots/spring-boot-language-server-0.1.5-201803091709.jar"
"jarUrl": "https://s3-us-west-1.amazonaws.com/s3-test.spring.io/sts4/fatjars/snapshots/spring-boot-language-server-0.2.1-201805111942.jar"
}

View File

@@ -37,6 +37,32 @@
<artifactId>commons-yaml</artifactId>
<version>${dependencies.version}</version>
</dependency>
<!-- JSON -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson-2-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson-2-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-2-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson-2-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${jackson-2-version}</version>
</dependency>
<!-- Test harness -->
<dependency>
<groupId>org.springframework.ide.vscode</groupId>

View File

@@ -11,16 +11,21 @@
package org.springframework.ide.vscode.commons.java;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import org.springframework.ide.vscode.commons.util.Log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
public class ClasspathFileBasedCache {
private static final Gson gson = new Gson();
private static final Logger log = LoggerFactory.getLogger(ClasspathFileBasedCache.class);
public static final ClasspathFileBasedCache NULL = new ClasspathFileBasedCache(null);
public static final String CLASSPATH_DATA_CACHE_FILE = "classpath-data.json";
@@ -38,16 +43,15 @@ public class ClasspathFileBasedCache {
try {
Files.createDirectories(file.getParentFile().toPath());
writer = new FileWriter(file);
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(writer, data);
gson.toJson(data, writer);
} catch (IOException e) {
Log.log(e);
log.error("Failed to write JSON data to " + file, e);
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
Log.log(e);
log.error("Failed to close file writer for file: " + file, e);
}
}
}
@@ -60,11 +64,20 @@ public class ClasspathFileBasedCache {
public synchronized ClasspathData load() {
if (file != null && file.exists()) {
ObjectMapper mapper = new ObjectMapper();
FileReader fileReader = null;
try {
return mapper.readValue(file, ClasspathData.class);
fileReader = new FileReader(file);
return gson.fromJson(fileReader, ClasspathData.class);
} catch (Throwable e) {
Log.log(e);
log.error("Failed to read JSON data from " + file, e);
} finally {
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
log.error("Failed to close file reader for file: " + file, e);
}
}
}
}
return ClasspathData.EMPTY_CLASSPATH_DATA;

View File

@@ -19,31 +19,6 @@
<version>${project.version}</version>
</dependency>
<!-- JSON -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson-2-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson-2-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-2-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson-2-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${jackson-2-version}</version>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>

View File

@@ -10,6 +10,8 @@
*******************************************************************************/
package org.springframework.ide.vscode.commons.languageserver.util;
import static org.springframework.ide.vscode.commons.languageserver.util.AsyncRunner.thenLog;
import java.net.URI;
import java.nio.file.Paths;
import java.util.ArrayList;
@@ -78,12 +80,12 @@ import com.google.common.collect.ImmutableList;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import reactor.core.Disposable;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Scheduler;
import reactor.core.scheduler.Schedulers;
import static org.springframework.ide.vscode.commons.languageserver.util.AsyncRunner.*;
/**
* Abstract base class to implement LanguageServer. Bits and pieces copied from
@@ -185,7 +187,7 @@ public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientA
if (CODE_ACTION_COMMAND_ID.equals(params.getCommand())) {
Assert.isLegal(params.getArguments().size()==2);
QuickfixResolveParams quickfixParams = new QuickfixResolveParams(
(String)params.getArguments().get(0), params.getArguments().get(1)
((JsonPrimitive)params.getArguments().get(0)).getAsString(), params.getArguments().get(1)
);
return quickfixResolve(quickfixParams)
.flatMap((QuickfixEdit edit) -> {

View File

@@ -11,45 +11,26 @@
package org.springframework.ide.vscode.commons.maven.java;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Generated;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.model.Resource;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.DirectoryScanner;
import org.springframework.ide.vscode.commons.jandex.JandexClasspath;
import org.springframework.ide.vscode.commons.jandex.JandexIndex;
import org.springframework.ide.vscode.commons.java.ClasspathData;
import org.springframework.ide.vscode.commons.java.IClasspath;
import org.springframework.ide.vscode.commons.java.IJavadocProvider;
import org.springframework.ide.vscode.commons.javadoc.HtmlJavadocProvider;
import org.springframework.ide.vscode.commons.javadoc.TypeUrlProviderFromContainerUrl;
import org.springframework.ide.vscode.commons.languageserver.jdt.ls.Classpath;
import org.springframework.ide.vscode.commons.languageserver.jdt.ls.Classpath.CPE;
import org.springframework.ide.vscode.commons.maven.MavenCore;
import org.springframework.ide.vscode.commons.maven.MavenException;
import org.springframework.ide.vscode.commons.util.Log;
import org.springframework.ide.vscode.commons.util.RunnableWithException;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
import com.google.gson.internal.Streams;
/**
* Classpath for a maven project

View File

@@ -13,17 +13,18 @@ package org.springframework.ide.vscode.commons.yaml.quickfix;
import org.eclipse.lsp4j.Position;
import org.eclipse.lsp4j.TextEdit;
import org.eclipse.lsp4j.WorkspaceEdit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ide.vscode.commons.languageserver.completion.DocumentEdits.TextReplace;
import org.springframework.ide.vscode.commons.languageserver.quickfix.QuickfixEdit;
import org.springframework.ide.vscode.commons.languageserver.quickfix.QuickfixEdit.CursorMovement;
import org.springframework.ide.vscode.commons.languageserver.quickfix.QuickfixRegistry;
import org.springframework.ide.vscode.commons.languageserver.quickfix.QuickfixType;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService;
import org.springframework.ide.vscode.commons.util.Log;
import org.springframework.ide.vscode.commons.util.text.IRegion;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
import org.springframework.ide.vscode.commons.yaml.completion.YamlPathEdits;
import org.springframework.ide.vscode.commons.yaml.path.YamlPath;
import org.springframework.ide.vscode.commons.yaml.path.YamlPathSegment;
import org.springframework.ide.vscode.commons.yaml.reconcile.MissingPropertiesData;
import org.springframework.ide.vscode.commons.yaml.reconcile.ReplaceStringData;
import org.springframework.ide.vscode.commons.yaml.structure.YamlDocument;
@@ -32,14 +33,15 @@ import org.springframework.ide.vscode.commons.yaml.structure.YamlStructureParser
import org.springframework.ide.vscode.commons.yaml.structure.YamlStructureProvider;
import org.springframework.ide.vscode.commons.yaml.util.YamlIndentUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import org.springframework.ide.vscode.commons.languageserver.quickfix.QuickfixEdit.CursorMovement;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
public class YamlQuickfixes {
private static final Logger LOG = LoggerFactory.getLogger(YamlQuickfixes.class);
private static final QuickfixEdit NULL_FIX = new QuickfixEdit(
new WorkspaceEdit(ImmutableMap.of(), null),
null
@@ -47,9 +49,11 @@ public class YamlQuickfixes {
public final QuickfixType MISSING_PROP_FIX;
public final QuickfixType SIMPLE_TEXT_EDIT;
private final Gson gson = new Gson();
public YamlQuickfixes(QuickfixRegistry r, SimpleTextDocumentService textDocumentService, YamlStructureProvider structureProvider) {
MISSING_PROP_FIX = r.register("MISSING_PROP_FIX", (Object _params) -> {
MissingPropertiesData params = new ObjectMapper().convertValue(_params, MissingPropertiesData.class);
MissingPropertiesData params = gson.fromJson((JsonElement)_params, MissingPropertiesData.class);
try {
TextDocument _doc = textDocumentService.getDocument(params.getUri());
if (_doc!=null) {
@@ -90,7 +94,7 @@ public class YamlQuickfixes {
}
}
} catch (Exception e) {
Log.log(e);
LOG.error("", e);
}
//Something went wrong. Return empty edit object.
return NULL_FIX;
@@ -98,7 +102,7 @@ public class YamlQuickfixes {
SIMPLE_TEXT_EDIT = r.register("SIMPLE_TEXT_EDIT", (_params) -> {
try {
ReplaceStringData params = new ObjectMapper().convertValue(_params, ReplaceStringData.class);
ReplaceStringData params = gson.fromJson((JsonElement)_params, ReplaceStringData.class);
TextDocument _doc = textDocumentService.getDocument(params.getUri());
if (_doc!=null) {
return new QuickfixEdit(
@@ -110,7 +114,7 @@ public class YamlQuickfixes {
);
}
} catch (Exception e) {
Log.log(e);
LOG.error("", e);
}
//Something went wrong. Return empty edit object.
return NULL_FIX;
@@ -130,7 +134,7 @@ public class YamlQuickfixes {
return doc.toPosition(newSelection.getOffset());
}
} catch (Exception e) {
Log.log(e);
LOG.error("", e);
}
return null;
}

View File

@@ -110,10 +110,11 @@ import org.springframework.ide.vscode.commons.util.UriUtil;
import org.springframework.ide.vscode.commons.util.text.LanguageId;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Multimap;
import com.google.common.collect.MultimapBuilder;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import reactor.core.publisher.Mono;
@@ -134,6 +135,7 @@ public class LanguageServerHarness<S extends SimpleLanguageServerWrapper> {
private Multimap<String, CompletableFuture<HighlightParams>> highlights = MultimapBuilder.hashKeys().linkedListValues().build();
private Map<String, PublishDiagnosticsParams> diagnostics = new HashMap<>();
private List<Editor> activeEditors = new ArrayList<>();
private Gson gson = new Gson();
public LanguageServerHarness(Callable<S> factory, LanguageId defaultLanguageId) {
@@ -657,14 +659,14 @@ public class LanguageServerHarness<S extends SimpleLanguageServerWrapper> {
.collect(Collectors.toList());
}
ObjectMapper mapper = new ObjectMapper();
@SuppressWarnings({ "unchecked", "rawtypes" })
public void perform(Command command) throws Exception {
List<Object> args = command.getArguments();
//Note convert the params to a 'typeless' Object because that is more representative on how it will be
// received when we get it in a real client/server setting (i.e. parsed from json).
List untypedParams = mapper.convertValue(args, List.class);
JsonArray jsonArray = gson.toJsonTree(args).getAsJsonArray();
List<Object> untypedParams = new ArrayList<>(jsonArray.size());
jsonArray.forEach(e -> untypedParams.add(e));
getServer().getWorkspaceService()
.executeCommand(new ExecuteCommandParams(command.getCommand(), untypedParams))
.get();