@Override public List computeCompletionProposals( CompletionProposalInvocationContext context, IProgressMonitor monitor) { final List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(); IFile file = DOMUtils.getFile(context.getDocument()); if (file != null) { IProject project = file.getProject(); if (IDETernProject.hasTernNature(project)) { IDocument document = context.getDocument(); IResource resource = file; if (resource.getType() == IResource.FILE) { IFile scriptFile = (IFile) resource; try { IDETernProject ternProject = IDETernProject.getTernProject(project); TernCompletionsQuery query = new TernCompletionsQuery( ternProject.getFileManager().getFileName(scriptFile), context.getInvocationOffset()); query.setTypes(true); query.setDocs(true); query.setUrls(true); query.setOrigins(true); query.setCaseInsensitive(true); query.setLineCharPositions(true); query.setExpandWordForward(false); int startOffset = context.getInvocationOffset(); ternProject.request( query, scriptFile, document, startOffset, new JSTernCompletionCollector(proposals, startOffset)); return proposals; } catch (Exception e) { Trace.trace(Trace.SEVERE, "Error while JSDT Tern completion.", e); } } } } return proposals; }
@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(); } }