protected void addJSFile(TernDoc doc, ITernFile file) throws IOException { TernQuery query = doc.getQuery(); String fileName = file.getFullName(getProject()); query.setFile(fileName); TernFile tf = file.toTernServerFile(getProject()); doc.addFile(tf); }
private TernDoc createDocForCompletionModuleStartsWith() { String name = "myfile.js"; String text = "angular.module('phonecatApp');" + "angular.module('phonecatAnimations');"; TernDoc doc = new TernDoc(); doc.addFile(name, text, null, null); TernAngularCompletionsQuery query = new TernAngularCompletionsQuery(AngularType.module); query.setExpression("phonecatAn"); doc.setQuery(query); return doc; }
private TernDoc createFileWithModule() { String name = "myfile.js"; String text = "angular.module('MyApp', [])" + "\n.controller('SomeCtrl', function($scope, $http) {" + "\n$scope.save = function() {};" + "\n$http. // <-- you'll have completions now" + "\n});"; TernDoc doc = new TernDoc(); doc.addFile(name, text, null, null); return doc; }
private TernDoc createFile() { String name = "myfile.js"; String text = "function TodoCtrl($scope) {\n" + "$scope.todos = [" + "\n{text:'learn angular', done:true}," + "\n{text:'build an angular app', done:false}];" + "\n$scope.addTodo = function() {" + "\n$scope.todos.push({text:$scope.todoText, done:false});" + "\n$scope.todoText = '';" + "\n};" + "\n}"; TernDoc doc = new TernDoc(); doc.addFile(name, text, null, null); return doc; }
@Override public void synchronizeScriptPath(ITernScriptPath path, String... forced) { TernDoc doc = new TernDoc(); writeLock.lock(); try { // make sure we do not send duplicate files Set<String> requestedFiles = new HashSet<String>(sentFiles.keySet()); Set<String> perPath = new HashSet<String>(); syncedFilesPerPath.put(path, perPath); requestedFiles.removeAll(Arrays.asList(forced)); long totalSize = 0; for (String file : requestedFiles) { totalSize += sentFiles.get(file).length(); } for (ITernScriptResource resource : path.getScriptResources()) { // limit the number of files being sent to the Tern server if (totalSize >= MAX_ALLOWED_SIZE) { sizeExceeded(); break; } ITernFile file = resource.getFile(); if (file == null) { continue; } String name = file.getFullName(getProject()); perPath.add(name); if (!requestedFiles.contains(name)) { try { TernFile tf = file.toTernServerFile(getProject()); doc.addFile(tf); totalSize += tf.getText().length(); requestedFiles.add(name); } catch (IOException e) { getProject().handleException(e); } } } // perform actual synchronization with the server sendFiles(doc); } finally { writeLock.unlock(); } }
@Override public void synchronizeFile(ITernFile file) throws IOException { writeLock.lock(); try { TernFile tf = file.toTernServerFile(getProject()); String oldText = sentFiles.get(tf.getName()); if (tf.getText().equals(oldText) && !uploader.cancel(tf.getName())) { // no need to synchronize the file, already up-to-date return; } TernDoc doc = new TernDoc(); doc.addFile(tf); sendFiles(doc); } finally { writeLock.unlock(); } }
@Override public void synchronizeFile(TernDoc doc, ITernFile file) throws IOException { writeLock.lock(); try { try { TernQuery query = doc.getQuery(); if (query != null) { if (TernResourcesManager.isJSFile(file)) { addJSFile(doc, file); sendFiles(doc); return; } else if (TernResourcesManager.isHTMLFile(file)) { // This is HTML file case: never keep the file on the server String queryType = query.getType(); if (TernCompletionsQuery.isQueryType(queryType) || TernDefinitionQuery.isQueryType(queryType) || query instanceof TernLintQuery) { addHTMLFile(doc, file); return; } } } TernFile tf = file.toTernServerFile(getProject()); String oldText = sentFiles.get(tf.getName()); if (tf.getText().equals(oldText) && !uploader.cancel(tf.getName())) { // no need to synchronize the file, already up-to-date return; } doc.addFile(tf); } finally { updateSentFiles(doc); // as this is // wait a bit for the sync to finish uploader.join(TIMEOUT); } } finally { writeLock.unlock(); } }
@Override protected IStatus run(IProgressMonitor mon) { SubMonitor monitor = SubMonitor.convert(mon, 100); final ITernServer server = project.getTernServer(); do { if (mon.isCanceled()) { return Status.CANCEL_STATUS; } int i = 0; final TernDoc doc = new TernDoc(); synchronized (files) { monitor.setWorkRemaining(files.size() + 1); Iterator<Entry<String, TernFile>> it = files.entrySet().iterator(); while (i < MAX_FILES && it.hasNext()) { Entry<String, TernFile> entry = it.next(); it.remove(); doc.addFile(entry.getValue()); i++; } } if (!doc.hasFiles()) { break; } if (server != null) { try { server.request( doc, new IResponseHandler() { @Override public void onSuccess(Object data, String dataAsJsonString) {} @Override public void onError(String error, Throwable t) { project.handleException(new TernException(error, t)); // mark that files have not been uploaded correctly project.getFileSynchronizer().uploadFailed(doc); throw new UploadFailed(); } @Override public boolean isDataAsJsonString() { return false; } }); monitor.worked(i); } catch (UploadFailed ex) { synchronized (files) { TernDoc doc2 = new TernDoc(); for (TernFile tf : files.values()) { doc2.addFile(tf); } files.clear(); project.getFileSynchronizer().uploadFailed(doc2); cancel(); } return Status.CANCEL_STATUS; } } } while (!serverToBeDisposed); return Status.OK_STATUS; }
protected void addHTMLFile(TernDoc doc, ITernFile file) throws IOException { TernQuery query = doc.getQuery(); TernFile tf = file.toTernServerFile(getProject()); doc.addFile(tf); query.set("file", "#" + (doc.getFiles().size() - 1)); // $NON-NLS-1$ //$NON-NLS-2$ }
@Override public void ensureSynchronized() { TernDoc doc = new TernDoc(); writeLock.lock(); try { if (project.getTernServer() != targetServer) { targetServer = project.getTernServer(); cleanIndexedFiles(); } syncedFilesPerPath.clear(); Set<String> synced = new HashSet<String>(sentFiles.keySet()); Set<String> toRefreshLocal = new HashSet<String>(); synchronized (toRefresh) { toRefreshLocal.addAll(toRefresh); toRefresh.clear(); } synced.removeAll(toRefreshLocal); long totalSize = 0; for (String file : synced) { totalSize += sentFiles.get(file).length(); } for (ITernScriptPath path : getProject().getScriptPaths()) { Set<String> perPath = new HashSet<String>(); syncedFilesPerPath.put(path, perPath); for (ITernScriptResource resource : path.getScriptResources()) { // limit the size of content being sent to the Tern server if (totalSize >= MAX_ALLOWED_SIZE) { sendFiles(doc); totalSize = 0; doc = new TernDoc(); } ITernFile file = resource.getFile(); if (file == null) { continue; } String name = file.getFullName(getProject()); perPath.add(name); if (!synced.contains(name)) { try { TernFile tf = file.toTernServerFile(getProject()); doc.addFile(tf); synced.add(name); // System.out.println(name); totalSize += tf.getText().length(); } catch (IOException e) { getProject().handleException(e); } } } } toRefreshLocal.removeAll(synced); for (String toRemove : toRefreshLocal) { doc.delFile(toRemove); } // perform actual synchronization with the server sendFiles(doc); } finally { writeLock.unlock(); } }