public void init(final _FunctionTypes._void_P0_E0 callback) { if (myInitialized) { callback.invoke(); return; } if (!(isLeaf())) { if (myInitializationInProgress.compareAndSet(false, true)) { myState.invokeEvaluation( new _FunctionTypes._void_P0_E0() { public void invoke() { try { myWatchable.getValue().initSubvalues(); ApplicationManager.getApplication() .invokeLater( new Runnable() { @Override public void run() { try { removeAllChildren(); for (IWatchable watchable : ListSequence.fromList(getValue().getSubvalues())) { add(new WatchableNode(watchable, myState)); } updatePresentation(); myInitialized = true; callback.invoke(); for (_FunctionTypes._void_P0_E0 callback : ListSequence.fromList(myCallbacks)) { try { callback.invoke(); } catch (Throwable t) { if (LOG.isEnabledFor(Level.ERROR)) { LOG.error("", t); } } } ListSequence.fromList(myCallbacks).clear(); nodeChanged(); } finally { myInitializationInProgress.set(false); } } }); } catch (Throwable t) { myInitializationInProgress.set(false); } } }); } else { // callbacks are accessed from ui thread only ListSequence.fromList(myCallbacks).addElement(callback); } } }
private SNode getErrorLocation(_FunctionTypes._void_P0_E0 method) { try { method.invoke(); } catch (Throwable t) { StackTraceElement stackTraceElement = t.getStackTrace()[0]; SNode node = TraceInfoUtil.getJavaNode( stackTraceElement.getClassName(), stackTraceElement.getFileName(), stackTraceElement.getLineNumber()); return node; } return null; }
public void invokeCloseListeners() { for (_FunctionTypes._void_P0_E0 listener : ListSequence.fromList(myListeners)) { listener.invoke(); } }