private static Iterable<? extends StaticError> compilerPhases( Path path, String file, Option<String> out, boolean link) throws UserError { GraphRepository bcr = null; Debug.debug(Debug.Type.FORTRESS, 2, "Compiling file ", file); APIName name = null; try { bcr = specificRepository(path); name = cuName(file); if (isApi(file)) { Api a = (Api) bcr.getApi(name).ast(); if (out.isSome()) ASTIO.writeJavaAst( a, // defaultRepository.getApi(name).ast(), out.unwrap()); } else if (isComponent(file)) { Component c; if (link) c = (Component) bcr.getLinkedComponent(name).ast(); else c = (Component) bcr.getComponent(name).ast(); if (out.isSome()) { ASTIO.writeJavaAst( c, // defaultRepository.getComponent(name).ast(), out.unwrap()); bcr.deleteComponent(name, true); } } else { throw new UserError( "What kind of file is " + file + "? Name should end with .fsi or .fss."); } } catch (ProgramError pe) { Iterable<? extends StaticError> se = pe.getStaticErrors(); if (se == null) return IterUtil.singleton(new WrappedException(pe, Debug.stackTraceOn())); else return flattenErrors(se); } catch (RepositoryError ex) { throw ex; } catch (FileNotFoundException ex) { throw new WrappedException(ex); } catch (IOException e) { throw new WrappedException(e); } catch (StaticError ex) { return flattenErrors(ex); } catch (CompilerBug e) { return IterUtil.singleton(new WrappedException(e, Debug.stackTraceOn())); } catch (InterpreterBug e) { return IterUtil.singleton(new WrappedException(e, Debug.stackTraceOn())); } catch (FortressException e) { failureBoilerplate(e); System.exit(1); } finally { if (bcr != null && name != null) bcr.deleteComponent(name, false); } if (bcr != null && bcr.verbose()) System.err.println("Compiling done."); return IterUtil.empty(); }