private ISourceTagProvider createSourceTagProvider(IStorage storage) { ITranslationUnit tUnit = null; if (storage instanceof IFile) { tUnit = (ITranslationUnit) CoreModel.getDefault().create((IFile) storage); } else if (storage instanceof IFileState) { ICModel cModel = CoreModel.getDefault().getCModel(); ICProject[] cProjects; try { cProjects = cModel.getCProjects(); if (cProjects.length > 0) { tUnit = CoreModel.getDefault().createTranslationUnitFrom(cProjects[0], storage.getFullPath()); } } catch (CModelException e) { } } else { IEditorInput input = CDTUITools.getEditorInputForLocation(storage.getFullPath(), null); if (input != null) { tUnit = (ITranslationUnit) input.getAdapter(ITranslationUnit.class); } } if (tUnit != null) { return new CSourceTagProvider(tUnit); } return null; }
/** * @param language * @param storage * @param textViewer */ public CSourcePresentationCreator(ILanguage language, IStorage storage, ITextViewer textViewer) { if (language != null) { fViewer = textViewer; fPreferenceStore = CUIPlugin.getDefault().getCombinedPreferenceStore(); final IColorManager colorManager = CDTUITools.getColorManager(); fSourceViewerConfiguration = new CustomCSourceViewerConfiguration(colorManager, fPreferenceStore, language); setDocumentPartitioning(fSourceViewerConfiguration.getConfiguredDocumentPartitioning(null)); initializeDamagerRepairer(storage, colorManager, fPreferenceStore); fPreferenceStore.addPropertyChangeListener(this); } }
/** * Returns the C model element at the given selection. * * @param part Workbench part where the selection is. * @param selection Selection in part. * @return C model element if found. */ protected ICElement getCElementFromSelection(IWorkbenchPart part, ISelection selection) { if (selection instanceof ITextSelection) { ITextSelection textSelection = (ITextSelection) selection; String text = textSelection.getText(); if (text != null) { if (part instanceof ITextEditor) { ICElement editorElement = CDTUITools.getEditorInputCElement(((ITextEditor) part).getEditorInput()); if (editorElement instanceof ITranslationUnit) { ITranslationUnit tu = (ITranslationUnit) editorElement; try { if (tu.isStructureKnown() && tu.isConsistent()) { return tu.getElementAtOffset(textSelection.getOffset()); } } catch (CModelException exc) { // ignored on purpose } } } else { IResource resource = getResource(part); if (resource instanceof IFile) { ITranslationUnit tu = getTranslationUnit((IFile) resource); if (tu != null) { try { ICElement element = tu.getElement(text.trim()); if (element == null) { element = tu.getElementAtLine(textSelection.getStartLine()); } return element; } catch (CModelException e) { } } } } } } else if (selection instanceof IStructuredSelection) { IStructuredSelection ss = (IStructuredSelection) selection; if (ss.size() == 1) { Object object = ss.getFirstElement(); if (object instanceof ICElement) { return (ICElement) object; } } } return null; }