com.google.inject.ConfigurationException Maven / Gradle / Ivy
package com.google.inject;
import com.google.common.collect.ImmutableSet;
import com.google.inject.internal.Messages;
import com.google.inject.spi.Message;
import java.util.Collection;
import static com.google.common.base.Preconditions.checkState;
/**
* Thrown when a programming error such as a misplaced annotation, illegal binding, or unsupported
* scope is found. Clients should catch this exception, log it, and stop execution.
*
*/
@SuppressWarnings("serial")
public final class ConfigurationException extends RuntimeException {
private final ImmutableSet messages;
private Object partialValue = null;
/**
* Creates a ConfigurationException containing {@code messages}.
*/
public ConfigurationException(Iterable messages) {
this.messages = ImmutableSet.copyOf(messages);
initCause(Messages.getOnlyCause(this.messages));
}
/**
* Returns a copy of this configuration exception with the specified partial value.
*/
public ConfigurationException withPartialValue(Object partialValue) {
checkState(this.partialValue == null,
"Can't clobber existing partial value %s with %s", this.partialValue, partialValue);
ConfigurationException result = new ConfigurationException(messages);
result.partialValue = partialValue;
return result;
}
/**
* Returns messages for the errors that caused this exception.
*/
public Collection getErrorMessages() {
return messages;
}
/**
* Returns a value that was only partially computed due to this exception. The caller can use
* this while collecting additional configuration problems.
*
* @return the partial value, or {@code null} if none was set. The type of the partial value is
* specified by the throwing method.
*/
@SuppressWarnings("unchecked") // this is *extremely* unsafe. We trust the caller here.
public E getPartialValue() {
return (E) partialValue;
}
@Override
public String getMessage() {
return Messages.formatMessages("Guice configuration errors", messages);
}
}