/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package abs.frontend.analyser;
import java.util.List;
import abs.frontend.ast.ASTNode;
import abs.frontend.ast.DeltaDecl;
import abs.frontend.ast.Product;
public class SPLTypeError extends TypeError {
private final List<DeltaDecl> deltas; // Sequence of applied deltas that have led to this error
private final Product product; // Product that we tried to build
/**
* A TypeError that tracks the circumstances in which an SPL type error occurred:
* Which product were we trying to build? What delta application sequence led to error?
*
* @param node ASTNode where this error occurred
* @param msg Error message to display
* @param deltas List of applied DeltaDecls that have led to this error (size of list must be > 0)
* @param product Product that we tried to build (non-null)
* @param args Strings to include in ErrorMessage
*/
public SPLTypeError(ASTNode<?> node, ErrorMessage msg, List<DeltaDecl> deltas, Product product, String... args) {
super(node, msg, args);
this.deltas = deltas;
this.product = product;
assert deltas.size() > 0;
assert product != null;
}
@Override
public String getMessage() {
String lastDelta = deltas.get(deltas.size()-1).getName();
StringBuilder s = new StringBuilder();
for (int i = deltas.size()-2; i >= 0; i--) {
s.append(deltas.get(i).getName());
s.append(" >> ");
}
s.append("core");
String appliedDeltas = s.toString();
return getMsg()
+ " When applying delta " + lastDelta
+ " on top of " + appliedDeltas
+ ", while building product " + product.getFeatureSetAsString() + ".";
}
}