]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/procedure/Procedures.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.scl.runtime / src / org / simantics / scl / runtime / procedure / Procedures.java
1 package org.simantics.scl.runtime.procedure;
2
3 import java.util.UUID;
4
5 import org.simantics.scl.runtime.function.Function;
6 import org.simantics.scl.runtime.function.FunctionImpl1;
7 import org.simantics.scl.runtime.tuple.Tuple0;
8
9
10 public class Procedures {
11     public static boolean isInterrupted() {
12         return Thread.currentThread().isInterrupted();
13     }
14     
15     public static void checkInterrupted() throws InterruptedException {
16         if(Thread.interrupted())
17             throw new InterruptedException();
18     }
19     
20     public static String generateUID() {
21         return UUID.randomUUID().toString();
22     }
23     
24     private static Function runProc = new FunctionImpl1() {
25         @Override
26         public Object apply(Object f) {
27             return ((Function)f).apply(Tuple0.INSTANCE);
28         }
29     };
30     
31     public static Function runProc() {
32         return runProc;
33     }
34     
35     public static Object catch_(Class<?> exceptionClass, Function expression, Function handler) throws Throwable {
36         try {
37             return expression.apply(Tuple0.INSTANCE);
38         } catch(Throwable e) {
39             if(exceptionClass.isAssignableFrom(e.getClass()))
40                 return handler.apply(e);
41             else
42                 throw e;
43         }
44     }
45 }