/*
* Copyright 2010 Google Inc.
*
* 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
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.inject.rebind;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.inject.rebind.binding.Binding;
import com.google.gwt.inject.rebind.util.PrettyPrinter;
import com.google.inject.Inject;
import com.google.inject.Key;
import com.google.inject.Singleton;
/**
* Manages errors that occur during the binding process. Keeps track of whether
* we've found an error so we can eventually throw an
* {@link UnableToCompleteException}. We do this instead of throwing
* immediately so that we can find more than one error per compilation cycle.
*/
@Singleton
public class ErrorManager {
private boolean foundError = false;
private final TreeLogger logger;
@Inject
public ErrorManager(TreeLogger logger) {
this.logger = logger;
}
public void logDoubleBind(Key<?> key, Binding binding1, GinjectorBindings ginjector1,
Binding binding2, GinjectorBindings ginjector2) {
logError("Key %s is Double-bound: Bound at %s in %s and %s in %s", key,
binding1.getContext(), ginjector1, binding2.getContext(), ginjector2);
}
public void logError(String message, Object... args) {
logError(message, null, (Object[]) args);
}
public void logError(String message, Throwable t, Object... args) {
logger.log(TreeLogger.ERROR, PrettyPrinter.format(message, args), t);
foundError = true;
}
public void checkForError() throws UnableToCompleteException {
if (foundError) {
throw new UnableToCompleteException();
}
}
}