IJavaElement emptyModuleInfo(IPackageFragment fragment, boolean is9OrHigher) throws JavaModelException { if (is9OrHigher) { // at 9, empty module-info.java should be added for (IJavaElement child : fragment.getChildren()) { if (child instanceof ITypeRoot && ((ITypeRoot) child).getChildren().length == 0) return child; } } return null; }
private SymbolInformation[] getOutline(ITypeRoot unit, IProgressMonitor monitor) { try { IJavaElement[] elements = unit.getChildren(); ArrayList<SymbolInformation> symbols = new ArrayList<>(elements.length); collectChildren(unit, elements, symbols, monitor); return symbols.toArray(new SymbolInformation[symbols.size()]); } catch (JavaModelException e) { JavaLanguageServerPlugin.logException("Problem getting outline for" + unit.getElementName(), e); } return new SymbolInformation[0]; }
private List<DocumentSymbol> getHierarchicalOutline(ITypeRoot unit, IProgressMonitor monitor) { try { return Stream.of(filter(unit.getChildren())).map(child -> toDocumentSymbol(child, monitor)).filter(Objects::nonNull).collect(Collectors.toList()); } catch (OperationCanceledException e) { logInfo("User abort while collecting the document symbols."); } catch (JavaModelException e) { JavaLanguageServerPlugin.logException("Problem getting outline for" + unit.getElementName(), e); } return emptyList(); }
@Override public CompletableFuture<List<? extends ICodeMining>> provideCodeMinings(ITextViewer viewer, IProgressMonitor monitor) { return CompletableFuture.supplyAsync(() -> { monitor.isCanceled(); ITextEditor textEditor = super.getAdapter(ITextEditor.class); ITypeRoot unit = EditorUtility.getEditorInputJavaElement(textEditor, true); if (unit == null) { return Collections.emptyList(); } try { IJavaElement[] elements = unit.getChildren(); List<ICodeMining> minings = new ArrayList<>(elements.length); collectMinings(unit, textEditor, unit.getChildren(), minings, viewer, monitor); monitor.isCanceled(); return minings; } catch (JavaModelException e) { // Should never occur } return Collections.emptyList(); }); }
@Override public CompletableFuture<List<? extends ICodeMining>> provideCodeMinings(ITextViewer viewer, IProgressMonitor monitor) { if (!editorEnabled) { return CompletableFuture.completedFuture(Collections.emptyList()); } return CompletableFuture.supplyAsync(() -> { monitor.isCanceled(); ITextEditor textEditor= super.getAdapter(ITextEditor.class); ITypeRoot unit= EditorUtility.getEditorInputJavaElement(textEditor, true); if (unit == null) { return Collections.emptyList(); } try { IJavaElement[] elements= unit.getChildren(); List<ICodeMining> minings= new ArrayList<>(elements.length); collectMinings(unit, textEditor, unit.getChildren(), minings, viewer, monitor); monitor.isCanceled(); return minings; } catch (JavaModelException e) { // Should never occur } return Collections.emptyList(); }); }
@Override public CompletableFuture<List<? extends ICodeMining>> provideCodeMinings(ITextViewer viewer, IProgressMonitor monitor) { return CompletableFuture.supplyAsync(() -> { monitor.isCanceled(); ITextEditor textEditor = super.getAdapter(ITextEditor.class); ITypeRoot unit = EditorUtility.getEditorInputJavaElement(textEditor, true); if (unit == null) { return Collections.emptyList(); } fViewer = viewer; fUnit = unit; try { List<ICodeMining> minings = new ArrayList<>(); collectMinings(unit, textEditor, unit.getChildren(), minings, viewer, monitor); monitor.isCanceled(); return minings; } catch (JavaModelException e) { // TODO: what should we done when there are some errors? } return Collections.emptyList(); }); }
@Override public CompletableFuture<List<? extends ICodeMining>> provideCodeMinings(ITextViewer viewer, IProgressMonitor monitor) { this.viewer = viewer; return CompletableFuture.supplyAsync(() -> { monitor.isCanceled(); ITextEditor textEditor = super.getAdapter(ITextEditor.class); ITypeRoot unit = EditorUtility.getEditorInputJavaElement(textEditor, true); if (unit == null) { return null; } try { IJavaElement[] elements = unit.getChildren(); List<ICodeMining> minings = new ArrayList<>(elements.length); collectCodeMinings(unit, elements, minings, viewer, monitor); monitor.isCanceled(); return minings; } catch (JavaModelException e) { // TODO: what should we done when there are some errors? } return null; }); }
public List<CodeLens> getCodeLensSymbols(String uri, IProgressMonitor monitor) { if (!preferenceManager.getPreferences().isCodeLensEnabled()) { return Collections.emptyList(); } final ICompilationUnit unit = JDTUtils.resolveCompilationUnit(uri); IClassFile classFile = null; if (unit == null) { classFile = JDTUtils.resolveClassFile(uri); if (classFile == null) { return Collections.emptyList(); } } else { if (!unit.getResource().exists() || monitor.isCanceled()) { return Collections.emptyList(); } } try { ITypeRoot typeRoot = unit != null ? unit : classFile; IJavaElement[] elements = typeRoot.getChildren(); LinkedHashSet<CodeLens> lenses = new LinkedHashSet<>(elements.length); collectCodeLenses(typeRoot, elements, lenses, monitor); if (monitor.isCanceled()) { lenses.clear(); } return new ArrayList<>(lenses); } catch (JavaModelException e) { JavaLanguageServerPlugin.logException("Problem getting code lenses for" + unit.getElementName(), e); } return Collections.emptyList(); }
ITypeRoot getModuleRoot(IPackageFragmentRoot root) throws JavaModelException { IJavaElement module= root.getModuleDescription(); if (module == null) { // may still need to show an empty module-info.java, which otherwise would remain invisible IPackageFragment dfltPack= root.getPackageFragment(""); //$NON-NLS-1$ if (dfltPack.exists()) { for (IJavaElement child : dfltPack.getChildren()) { if (child instanceof ITypeRoot && JavaModelUtil.isModuleInfo((ITypeRoot) child) && ((ITypeRoot) child).getChildren().length == 0) { return (ITypeRoot) child; } } } return null; } else { return (ITypeRoot) module.getParent(); } }