| /****************************************************************************** |
| * Copyright (c) 2018 TypeFox and others. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| ******************************************************************************/ |
| package org.eclipse.lsp4j.jsonrpc; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.List; |
| import java.util.stream.Collectors; |
| import java.util.stream.Stream; |
| |
| import org.eclipse.lsp4j.jsonrpc.messages.Message; |
| import org.eclipse.lsp4j.jsonrpc.messages.MessageIssue; |
| |
| /** |
| * An exception thrown to notify the caller of a {@link MessageConsumer} that one or more issues were |
| * found while parsing or validating a message. This information can be passed to a {@link MessageIssueHandler} |
| * in order to construct a proper response. |
| */ |
| public class MessageIssueException extends RuntimeException { |
| |
| private static final long serialVersionUID = 1118210473728652711L; |
| |
| private final Message rpcMessage; |
| private final List<MessageIssue> issues; |
| |
| public MessageIssueException(Message rpcMessage, MessageIssue issue) { |
| this.rpcMessage = rpcMessage; |
| this.issues = Collections.singletonList(issue); |
| } |
| |
| public MessageIssueException(Message rpcMessage, Collection<MessageIssue> issues) { |
| this.rpcMessage = rpcMessage; |
| this.issues = Collections.unmodifiableList(new ArrayList<>(issues)); |
| } |
| |
| public MessageIssueException(Message rpcMessage, Stream<MessageIssue> issueStream) { |
| this.rpcMessage = rpcMessage; |
| this.issues = Collections.unmodifiableList(issueStream.collect(Collectors.toList())); |
| } |
| |
| @Override |
| public String getMessage() { |
| return issues.stream().map(issue -> issue.getText()).collect(Collectors.joining("\n")); |
| } |
| |
| public Message getRpcMessage() { |
| return rpcMessage; |
| } |
| |
| public List<MessageIssue> getIssues() { |
| return issues; |
| } |
| |
| } |