package org.simantics.modeling.scl; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.procedure.adapter.TransientCacheListener; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.scl.ExpressionAnalysis; import org.simantics.db.layer0.variable.Variable; import org.simantics.scl.runtime.SCLContext; import org.simantics.scl.runtime.function.Function1; import org.simantics.structural2.scl.AnalyseStructuralValueRequest; public class AnalyseSCLValueRequest extends AnalyseStructuralValueRequest { public AnalyseSCLValueRequest(ReadGraph graph, Resource component, Resource value, Resource predicate) throws DatabaseException { super(component, value, predicate); } @Override protected ExpressionAnalysis getAnalysis(AnalysisCompilationContext context, Function1 fn) { return new ExpressionAnalysis(fn, context.getConsumed()); } public static ExpressionAnalysis analyse(ReadGraph graph, Resource component, Resource predicate, Resource value) throws DatabaseException { SCLContext sclContext = SCLContext.getCurrent(); Object oldGraph = sclContext.get("graph"); try { ExpressionAnalysis result = graph.syncRequest(new AnalyseSCLValueRequest(graph, component, value, predicate), TransientCacheListener.>instance()); sclContext.put("graph", graph); return result; } catch (DatabaseException e) { throw (DatabaseException)e; } catch (Throwable t) { throw new DatabaseException(t); } finally { sclContext.put("graph", oldGraph); } } }