com.microsoft.thrifty.schema.LinkEnvironment Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of thrifty-schema Show documentation
Show all versions of thrifty-schema Show documentation
A simple Thrift IDL parser and validator
/*
* Thrifty
*
* Copyright (c) Microsoft Corporation
*
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the License);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
* WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE,
* FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
*
* See the Apache Version 2.0 License for specific language governing permissions and limitations under the License.
*/
package com.microsoft.thrifty.schema;
import com.google.common.collect.ImmutableList;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class LinkEnvironment {
/**
* A mapping of files to their corresponding {@link Linker} instances.
*/
private final Map linkers = new HashMap<>();
private final ErrorReporter errorReporter;
LinkEnvironment(ErrorReporter errorReporter) {
this.errorReporter = errorReporter;
}
@Nonnull
Linker getLinker(Program program) {
Linker linker = linkers.get(program);
if (linker == null) {
linker = new Linker(this, program, errorReporter);
linkers.put(program, linker);
}
return linker;
}
ErrorReporter reporter() {
return errorReporter;
}
boolean hasErrors() {
return errorReporter.hasError();
}
public ImmutableList getErrors() {
if (!hasErrors()) {
return ImmutableList.of();
}
ImmutableList reports = errorReporter.reports();
List errors = new ArrayList<>(reports.size());
for (ErrorReporter.Report report : reports) {
String level = report.level().name();
String msg = level + ": " + report.message() + "(" + report.location() + ")";
errors.add(msg);
}
return ImmutableList.copyOf(errors);
}
}