/** * Copyright (c) 2013-2016 Angelo ZERR and Genuitec LLC. * 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: * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation * Piotr Tomiak <piotr@genuitec.com> - collectors API and code refactoring */ package tern.server.protocol.lint; import tern.server.protocol.IJSONObjectHelper; import tern.server.protocol.ITernResultProcessor; import tern.server.protocol.TernDoc; /** * Tern lint resulr processor. * */ public class TernLintResultProcessor implements ITernResultProcessor<ITernLintCollector> { private static final String MESSAGES_FIELD = "messages"; public static final TernLintResultProcessor INSTANCE = new TernLintResultProcessor(); @Override public void process(TernDoc doc, IJSONObjectHelper helper, Object jsonObject, ITernLintCollector collector) { Iterable<Object> messages = helper.getList(jsonObject, MESSAGES_FIELD); if (messages != null) { TernLintQuery query = (TernLintQuery) doc.getQuery(); if (query.isGroupByFiles()) { String file = null; for (Object fileObject : messages) { file = TernLintResultHelper.getFile(fileObject, helper); try { collector.startLint(file); Iterable<Object> messagesFile = helper.getList(fileObject, MESSAGES_FIELD); if (messagesFile != null) { addMessages(helper, messagesFile, query, collector); } } finally { collector.endLint(file); } } } else { String file = doc.getQuery().getFile(); try { collector.startLint(file); addMessages(helper, messages, query, collector); } finally { collector.endLint(file); } } } } protected void addMessages(IJSONObjectHelper helper, Iterable<Object> messages, TernLintQuery query, ITernLintCollector collector) { String messageId = null; String message = null; String severity = null; String file = null; for (Object messageObject : messages) { messageId = TernLintResultHelper.getMessageId(messageObject, helper); message = TernLintResultHelper.getMessage(messageObject, query, helper); severity = TernLintResultHelper.getSeverity(messageObject, helper); Long startCh = TernLintResultHelper.getStart(messageObject, helper); Long endCh = TernLintResultHelper.getEnd(messageObject, helper); Long line = TernLintResultHelper.getLine(messageObject, helper); file = TernLintResultHelper.getFile(messageObject, helper); collector.addMessage(messageId, message, startCh, endCh, line, severity, file, messageObject, query, helper); } } }