@Override public CompileResult call() throws Exception { // Create the options anew. Passing in the parent options, even cloning it, is not thread safe. CompileResult result = doCompileContent(content, getCompilerOptions(jsUri), buildExterns(externs)); synchronized (compiling) { // Other threads should pick this up in the cache now. cache.addElement(cacheKey, result); compiling.remove(cacheKey); } return result; } });
public Iterable<JsContent> getJsContent(JsUri jsUri, FeatureBundle bundle) { jsUri = new JsUri(jsUri) { @Override public boolean isDebug() { // Force debug JS in the raw JS content retrieved. return true; } }; List<JsContent> builder = Lists.newLinkedList(defaultCompiler.getJsContent(jsUri, bundle)); CompilerOptions options = getCompilerOptions(jsUri); if (options.isExternExportsEnabled()) { List<String> exports = Lists.newArrayList(bundle.getApis(ApiDirective.Type.JS, true)); Collections.sort(exports); String prevExport = null; for (String export : exports) { if (!export.equals(prevExport)) { builder.add(JsContent.fromText( "goog.exportSymbol('" + StringEscapeUtils.escapeEcmaScript(export) + "', " + export + ");\n", "[export-symbol]")); prevExport = export; } } } return builder; }
private ClosureJsCompiler newClosureJsCompiler(final Compiler realComp, CompilerOptions realOptions, DefaultJsCompiler defaultComp, CacheProvider cache) throws InterruptedException, ExecutionException { Future<CompileResult> mockFuture = EasyMock.createMock(Future.class); expect(mockFuture.get()).andReturn(new CompileResult(realComp, realResultMock)).anyTimes(); replay(mockFuture); expect(executorServiceMock.submit(isA(Callable.class))).andReturn(mockFuture); replay(executorServiceMock); ClosureJsCompiler compiler = createMockBuilder(ClosureJsCompiler.class) .addMockedMethods("getCompilerOptions") .withConstructor(defaultComp, cache, "simple", executorServiceMock) .createMock(); expect(compiler.getCompilerOptions(isA(JsUri.class))).andReturn(realOptionsMock).anyTimes(); replay(compiler); return compiler; }
public JsResponse compile(JsUri jsUri, Iterable<JsContent> content, String externs) { JsResponseBuilder builder = new JsResponseBuilder(); CompilerOptions options = getCompilerOptions(jsUri); StringBuilder compiled = new StringBuilder(); StringBuilder exports = new StringBuilder();
private ClosureJsCompiler newClosureJsCompiler(final Compiler realComp, CompilerOptions realOptions, DefaultJsCompiler defaultComp, CacheProvider cache) throws InterruptedException, ExecutionException { Future<CompileResult> mockFuture = EasyMock.createMock(Future.class); expect(mockFuture.get()).andReturn(new CompileResult(realComp, realResultMock)).anyTimes(); replay(mockFuture); expect(executorServiceMock.submit(isA(Callable.class))).andReturn(mockFuture); replay(executorServiceMock); ClosureJsCompiler compiler = createMockBuilder(ClosureJsCompiler.class) .addMockedMethods("getCompilerOptions") .withConstructor(defaultComp, cache, "simple", executorServiceMock) .createMock(); expect(compiler.getCompilerOptions(isA(JsUri.class))).andReturn(realOptionsMock).anyTimes(); replay(compiler); return compiler; }
private ClosureJsCompiler newProfilingClosureJsCompiler(CompilerOptions realOptions, DefaultJsCompiler defaultComp, CacheProvider cache) { ClosureJsCompiler compiler = createMockBuilder(ClosureJsCompiler.class) .addMockedMethods("getCompilerOptions") .withConstructor(defaultComp, cache, "simple").createMock(); expect(compiler.getCompilerOptions(isA(JsUri.class))).andReturn(realOptions).anyTimes(); replay(compiler); return compiler; }
private ClosureJsCompiler newProfilingClosureJsCompiler(CompilerOptions realOptions, DefaultJsCompiler defaultComp, CacheProvider cache) { ClosureJsCompiler compiler = createMockBuilder(ClosureJsCompiler.class) .addMockedMethods("getCompilerOptions") .withConstructor(defaultComp, cache, "simple").createMock(); expect(compiler.getCompilerOptions(isA(JsUri.class))).andReturn(realOptions).anyTimes(); replay(compiler); return compiler; }