X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Fscl%2FAbstractExpressionCompilationRequest.java;h=1bcd918771f3db8520507e6893b2de2376d61164;hb=e2a018d782bdeb19d418b2b06e64a028964ae2bd;hp=3a95f25304f78248cde70c51fdd4eb127ff39d9c;hpb=1efdd1cea0fcef60df0267f23e4ffda9fab5b23d;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/scl/AbstractExpressionCompilationRequest.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/scl/AbstractExpressionCompilationRequest.java index 3a95f2530..1bcd91877 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/scl/AbstractExpressionCompilationRequest.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/scl/AbstractExpressionCompilationRequest.java @@ -104,7 +104,7 @@ implements Read> { return DEFAULT_EXPECTED_EFFECT; } - private ExpressionEvaluator prepareEvaluator(final ReadGraph graph, final CompilationContext context, Type expectedType) throws DatabaseException { + protected ExpressionEvaluator prepareEvaluator(final ReadGraph graph, final CompilationContext context, Type expectedType) throws DatabaseException { final Variable contextVariable = new Variable("context", getContextVariableType()); LocalEnvironment localEnvironment = new AbstractLocalEnvironment() { THashMap> precalculatedVariables = new THashMap>(); @@ -147,9 +147,16 @@ implements Read> { protected boolean parseAsBlock() { return false; } + + /* + * Override this to provide location information in compilation error situations. + */ + protected String getContextDescription(ReadGraph graph) throws DatabaseException { + return toString(); + } @SuppressWarnings("unchecked") - private Function1 eval(ExpressionEvaluator evaluator, ReadGraph graph) throws DatabaseException { + protected Function1 eval(ExpressionEvaluator evaluator, ReadGraph graph) throws DatabaseException { Object oldGraph = SCLContext.getCurrent().put("graph", graph); try { return (Function1)evaluator.eval(); @@ -163,14 +170,17 @@ implements Read> { StringBuilder b = new StringBuilder(); b.append("Couldn't compile '"); b.append(evaluator.getExpressionText()); + b.append("' in "); + b.append(getContextDescription(graph)); b.append("':\n"); StringBuilder b2 = new StringBuilder(); for(CompilationError error : e.getErrors()) { b2.append(error.description); b2.append('\n'); } - System.err.println(b.toString() + b2.toString()); - throw new SCLDatabaseException(b.toString()+b2.toString(), b2.toString(), e.getErrors()); + SCLDatabaseException exception = new SCLDatabaseException(b.toString()+b2.toString(), b2.toString(), e.getErrors()); + LOGGER.info(exception.getMessage(), exception); + throw exception; } catch(Throwable e) { // Should not happen! LOGGER.error("This error should never happen", e); @@ -236,4 +246,9 @@ implements Read> { return graph.getPossibleRelatedValue(predicate, L0.RequiresValueType, Bindings.STRING); } + @Override + public abstract int hashCode(); + + @Override + public abstract boolean equals(Object obj); }