package com.pablissimo.sonar;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.sonar.api.batch.BatchSide;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.pablissimo.sonar.model.TsLintIssue;
@BatchSide
public class TsLintParserImpl implements TsLintParser {
@Override
public Map<String, List<TsLintIssue>> parse(List<String> toParse) {
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
List<TsLintIssue> allIssues = new ArrayList<>();
for (String batch : toParse) {
TsLintIssue[] batchIssues = gson.fromJson(getFixedUpOutput(batch), TsLintIssue[].class);
if (batchIssues == null) {
continue;
}
for (TsLintIssue batchIssue : batchIssues) {
allIssues.add(batchIssue);
}
}
// Remap by filename
Map<String, List<TsLintIssue>> toReturn = new HashMap<>();
for (TsLintIssue issue : allIssues) {
List<TsLintIssue> issuesByFile = toReturn.get(issue.getName());
if (issuesByFile == null) {
issuesByFile = new ArrayList<>();
toReturn.put(issue.getName(), issuesByFile);
}
issuesByFile.add(issue);
}
return toReturn;
}
private String getFixedUpOutput(String toParse) {
if (toParse.contains("][")) {
// Pre 4.0.0-versions of TsLint return nonsense for its JSON output
// when faced with multiple files so we need to fix it up before we
// do anything else
return toParse.replaceAll("\\]\\[", ",");
}
return toParse;
}
}