下面列出了怎么用org.eclipse.ui.texteditor.IDocumentProvider的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Builds the ITextEditor mock.
*
* @return the ITextEditor mock
* @see #withLineOffsetLookupAnswer(int, int)
*/
private ITextEditor build() {
IDocument document = documentBuilder.build();
IEditorInput editorInput = EasyMock.createNiceMock(IEditorInput.class);
EasyMock.replay(editorInput);
IDocumentProvider documentProvider = EasyMock.createNiceMock(IDocumentProvider.class);
EasyMock.expect(documentProvider.getDocument(editorInput)).andReturn(document).anyTimes();
EasyMock.replay(documentProvider);
editor = EasyMock.createNiceMock(ITextEditor.class);
EasyMock.expect(editor.getDocumentProvider()).andReturn(documentProvider).anyTimes();
EasyMock.expect(editor.getEditorInput()).andReturn(editorInput).anyTimes();
EasyMock.replay(editor);
return editor;
}
private void initializeSourceViewer(final IEditorInput input) {
final IDocumentProvider documentProvider = getDocumentProvider();
final IAnnotationModel model = documentProvider.getAnnotationModel(input);
final IDocument document = documentProvider.getDocument(input);
if (document != null) {
fSourceViewer.setDocument(document, model);
fSourceViewer.setEditable(isEditable());
fSourceViewer.showAnnotations(model != null);
}
if (fElementStateListener instanceof IElementStateListenerExtension) {
boolean isStateValidated = false;
if (documentProvider instanceof IDocumentProviderExtension)
isStateValidated = ((IDocumentProviderExtension) documentProvider).isStateValidated(input);
final IElementStateListenerExtension extension = (IElementStateListenerExtension) fElementStateListener;
extension.elementStateValidationChanged(input, isStateValidated);
}
}
/**
* Disposes of the connection with the document provider. Subclasses may
* extend.
*
* @since 3.0
*/
protected void disposeDocumentProvider() {
final IDocumentProvider provider = getDocumentProvider();
if (provider != null) {
final IEditorInput input = getEditorInput();
if (input != null)
provider.disconnect(input);
if (fElementStateListener != null) {
provider.removeElementStateListener(fElementStateListener);
fElementStateListener = null;
}
}
fImplicitDocumentProvider = null;
}
protected void updateState(final IEditorInput input) {
final IDocumentProvider provider = getDocumentProvider();
if (provider instanceof IDocumentProviderExtension) {
final IDocumentProviderExtension extension = (IDocumentProviderExtension) provider;
try {
extension.updateStateCache(input);
if (fSourceViewer != null)
fSourceViewer.setEditable(isEditable());
} catch (final CoreException e) {
ERDiagramActivator.log(e);
}
}
}
protected void updateState(IEditorInput input) {
IDocumentProvider provider = getDocumentProvider();
if (provider instanceof IDocumentProviderExtension) {
IDocumentProviderExtension extension = (IDocumentProviderExtension) provider;
try {
extension.updateStateCache(input);
if (fSourceViewer != null)
fSourceViewer.setEditable(isEditable());
} catch (CoreException e) {
Activator.log(e);
}
}
}
/**
* Register the element state listener to react on the changes to the state (saved, dirty:=not saved)
*/
protected void setDocumentProvider(IEditorInput input)
{
super.setDocumentProvider(input);
IDocumentProvider provider = getDocumentProvider();
if (provider != null)
{
provider.addElementStateListener(new ElementStateAdapter() {
public void elementDirtyStateChanged(Object element, boolean isDirty)
{
if (isDirty)
{
contextService.deactivateContext(contextActivation);
} else
{
contextActivation = contextService.activateContext("toolbox.contexts.cleaneditor");
}
}
});
}
}
public static Position getPosition(IFile file, TextSpan textSpan) throws BadLocationException {
ITextFileBufferManager bufferManager = FileBuffers.getTextFileBufferManager();
ITextFileBuffer buffer = bufferManager.getTextFileBuffer(file.getLocation(), LocationKind.IFILE);
if (buffer != null) {
return getPosition(buffer.getDocument(), textSpan);
}
IDocumentProvider provider = new TextFileDocumentProvider();
try {
provider.connect(file);
IDocument document = provider.getDocument(file);
if (document != null) {
return getPosition(document, textSpan);
}
} catch (CoreException e) {
} finally {
provider.disconnect(file);
}
return null;
}
public String getScript( )
{
IDocumentProvider provider = getDocumentProvider( );
String script = ""; //$NON-NLS-1$
if ( provider != null )
{
IDocument document = provider.getDocument( getEditorInput( ) );
if ( document != null )
{
script = document.get( );
}
}
return script;
}
private List<GWTJavaProblem> getGWTProblemsInEditor(CompilationUnitEditor editor)
throws Exception {
List<GWTJavaProblem> problems = new ArrayList<GWTJavaProblem>();
Field annotationProblemField = CompilationUnitDocumentProvider.ProblemAnnotation.class.getDeclaredField("fProblem");
annotationProblemField.setAccessible(true);
IEditorInput editorInput = editor.getEditorInput();
IDocumentProvider documentProvider = editor.getDocumentProvider();
IAnnotationModel annotationModel = documentProvider.getAnnotationModel(editorInput);
Iterator<?> iter = annotationModel.getAnnotationIterator();
while (iter.hasNext()) {
Object annotation = iter.next();
if (annotation instanceof CompilationUnitDocumentProvider.ProblemAnnotation) {
CompilationUnitDocumentProvider.ProblemAnnotation problemAnnotation = (ProblemAnnotation) annotation;
if (problemAnnotation.getMarkerType().equals(GWTJavaProblem.MARKER_ID)) {
GWTJavaProblem problem = (GWTJavaProblem) annotationProblemField.get(problemAnnotation);
problems.add(problem);
}
}
}
return problems;
}
@Override
protected void installTabsToSpacesConverter() {
ISourceViewer sourceViewer= getSourceViewer();
SourceViewerConfiguration config= getSourceViewerConfiguration();
if (config != null && sourceViewer instanceof ITextViewerExtension7) {
int tabWidth= config.getTabWidth(sourceViewer);
TabsToSpacesConverter tabToSpacesConverter= new TabsToSpacesConverter();
tabToSpacesConverter.setNumberOfSpacesPerTab(tabWidth);
IDocumentProvider provider= getDocumentProvider();
if (provider instanceof ICompilationUnitDocumentProvider) {
ICompilationUnitDocumentProvider cup= (ICompilationUnitDocumentProvider) provider;
tabToSpacesConverter.setLineTracker(cup.createLineTracker(getEditorInput()));
} else
tabToSpacesConverter.setLineTracker(new DefaultLineTracker());
((ITextViewerExtension7)sourceViewer).setTabsToSpacesConverter(tabToSpacesConverter);
updateIndentPrefixes();
}
}
private String doGetContent(saros.filesystem.IFile wrappedFile) {
IFile file = ((EclipseFileImpl) wrappedFile).getDelegate();
FileEditorInput input = new FileEditorInput(file);
IDocumentProvider provider = EditorAPI.connect(input);
if (provider == null) {
log.warn("Failed to retrieve the content of " + wrappedFile);
return null;
}
IDocument doc = provider.getDocument(input);
String content = (doc != null) ? doc.get() : null;
provider.disconnect(input);
return content;
}
private void initializeSourceViewer(IEditorInput input) {
IDocumentProvider documentProvider = getDocumentProvider();
IAnnotationModel model = documentProvider.getAnnotationModel(input);
IDocument document = documentProvider.getDocument(input);
if (document != null) {
fSourceViewer.setDocument(document, model);
fSourceViewer.setEditable(isEditable());
fSourceViewer.showAnnotations(model != null);
}
if (fElementStateListener instanceof IElementStateListenerExtension) {
boolean isStateValidated = false;
if (documentProvider instanceof IDocumentProviderExtension)
isStateValidated = ((IDocumentProviderExtension) documentProvider)
.isStateValidated(input);
IElementStateListenerExtension extension = (IElementStateListenerExtension) fElementStateListener;
extension.elementStateValidationChanged(input, isStateValidated);
}
}
private void revealLocationInFile(String typeName, int line, int column, IEditorPart editorPart)
throws CoreException {
if (editorPart instanceof ITextEditor && line >= 0) {
ITextEditor textEditor = (ITextEditor) editorPart;
IDocumentProvider provider = textEditor.getDocumentProvider();
IEditorInput editorInput = editorPart.getEditorInput();
provider.connect(editorInput);
IDocument document = provider.getDocument(editorInput);
try {
IRegion regionOfLine = document.getLineInformation(line);
// only used to reveal the location
textEditor.selectAndReveal(regionOfLine.getOffset(), regionOfLine.getLength());
int startOffset = regionOfLine.getOffset() + column;
int length = regionOfLine.getLength() - column;
if (startOffset >= document.getLength()) {
startOffset = document.getLength() - 1;
}
if (length + startOffset >= document.getLength()) {
length = document.getLength() - startOffset - 1;
}
textEditor.setHighlightRange(startOffset, length, true);
} catch (BadLocationException e) {
MessageDialog.openInformation(N4JSGracefulActivator.getActiveWorkbenchShell(),
ConsoleMessages.msgInvalidLineNumberTitle(),
ConsoleMessages.msgInvalidLineNumberIn(
(line + 1) + "",
typeName));
}
provider.disconnect(editorInput);
}
}
private void revealLocationInFile(IEditorPart editorPart)
throws CoreException {
if (editorPart instanceof ITextEditor && locationText.line > 0) {
ITextEditor textEditor = (ITextEditor) editorPart;
IDocumentProvider provider = textEditor.getDocumentProvider();
IEditorInput editorInput = editorPart.getEditorInput();
provider.connect(editorInput);
IDocument document = provider.getDocument(editorInput);
try {
IRegion regionOfLine = document.getLineInformation(locationText.line - 1);
// only used to reveal the location
textEditor.selectAndReveal(regionOfLine.getOffset(), regionOfLine.getLength());
int startOffset = regionOfLine.getOffset() + locationText.column - 1;
int length = regionOfLine.getLength() - locationText.column;
if (startOffset >= document.getLength()) {
startOffset = document.getLength() - 1;
}
if (length + startOffset >= document.getLength()) {
length = document.getLength() - startOffset - 1;
}
textEditor.setHighlightRange(startOffset, length, true);
} catch (BadLocationException e) {
MessageDialog.openInformation(N4JSGracefulActivator.getActiveWorkbenchShell(),
ConsoleMessages.msgInvalidLineNumberTitle(),
ConsoleMessages.msgInvalidLineNumberIn(
(locationText.line) + "",
locationText.fileName));
}
provider.disconnect(editorInput);
}
}
/**
* @since 2.19
*/
public IXtextDocument getXtextDocument(IEditorInput editorInput) {
IDocumentProvider documentProvider = DocumentProviderRegistry.getDefault().getDocumentProvider(editorInput);
if (documentProvider == null) {
return null;
}
IDocument document = documentProvider.getDocument(editorInput);
if (document != null) {
return getXtextDocument(document);
}
return null;
}
public IAnnotationModel getAnnotationModel() {
final IDocumentProvider documentProvider = getDocumentProvider();
if (documentProvider == null) {
return null;
}
return documentProvider.getAnnotationModel(getEditorInput());
}
/**
* Returns the shared document provider for oberon-2 source files
* used by this plug-in instance.
*
* @return the shared document provider for Oberon-2 source files
*/
public synchronized IDocumentProvider getOberonDocumentProvider() {
if (oberonDocumentProvider == null) {
oberonDocumentProvider = new OberonDocumentProvider();
}
return oberonDocumentProvider;
}
private static void findAndLogDocumentProviderIssues(final IEditorPart editorPart) {
final IDocumentProvider defaultDocumentProvider =
EditorAPI.getDocumentProvider(editorPart.getEditorInput());
if (!(defaultDocumentProvider instanceof TextFileDocumentProvider)) {
log.warn(
"The default document provider "
+ defaultDocumentProvider
+ " for editor with title '"
+ editorPart.getTitle()
+ "' might not support shared access. It is likely that the editor content is not properly synchronized!");
return;
}
final ITextEditor textEditor = editorPart.getAdapter(ITextEditor.class);
if (textEditor == null) return;
final IDocumentProvider editorDocumentProvider = textEditor.getDocumentProvider();
if (!(editorDocumentProvider instanceof TextFileDocumentProvider)) {
log.warn(
"The document provider "
+ editorDocumentProvider
+ " for editor with title '"
+ editorPart.getTitle()
+ "' might not support shared access. It is likely that the editor content is not properly synchronized!");
}
}
private static IDocument getEditorDocument(ITextEditor editor) {
IDocument document = null;
IDocumentProvider documentProvider = editor.getDocumentProvider();
if (documentProvider != null) {
document = documentProvider.getDocument(editor.getEditorInput());
}
return document;
}
/**
* Calculates max() indent level for the given lines
*/
public int calcMaxIndentLevel(ITextEditor editor, List<Integer> lineNums) {
try {
IDocument doc = null;
ModulaAst ast = null;
IDocumentProvider provider = ((ITextEditor) editor).getDocumentProvider();
IEditorInput input = editor.getEditorInput();
if ((provider != null) && (input instanceof IFileEditorInput)) {
IFile ifile = ((IFileEditorInput)input).getFile();
doc = provider.getDocument(input);
XdsSourceType sourceType = ModulaFileUtils.getSourceType(input.getName());
BuildSettings buildSettings = BuildSettingsCache.createBuildSettings(ifile);
ParserCriticalErrorReporter errorReporter = ParserCriticalErrorReporter.getInstance();
IImportResolver defaultImportResolver = new DefaultImportResolver(buildSettings, errorReporter, null);
XdsParser parser = new XdsParser(null, doc.get(), new XdsSettings(buildSettings, sourceType), defaultImportResolver, errorReporter);
ast = parser.parseModule();
}
if (ast == null) {
return -1; // Nothing to do
}
buildChunksModel(doc, ast, doc.getLength());
if (chunks.size() == 0) {
return -1; // Nothing to do
}
int max = -1;
for (int lnum : lineNums) {
int chunkIdx = chunkIdxAtPos(doc.getLineOffset(lnum));
int il = calcIndentLevel(chunkIdx);
if (il > max) max = il;
}
return max;
} catch (Exception e) {}
return -1;
}
public void setScript( String script )
{
try
{
IDocumentProvider provider = getDocumentProvider( );
if ( provider != null )
{
IDocument document = provider.getDocument( getEditorInput( ) );
if ( document != null )
{
document.set( script == null ? "" : script ); //$NON-NLS-1$
return;
}
}
input = createScriptInput( script );
}
finally
{
ISourceViewer viewer = getSourceViewer( );
if ( viewer instanceof SourceViewer )
{
IUndoManager undoManager = ( (SourceViewer) viewer ).getUndoManager( );
if ( undoManager != null )
{
undoManager.reset( );
}
}
}
}
/**
* Fetches the document just edited.
*
* @return the document or <code>null</code>
*/
public static IDocument getActiveDocument() {
IDocumentProvider provider = getActiveDocumentProvider();
IEditorInput input = getActiveInput();
if ((provider != null) && (input != null)) {
return provider.getDocument(input);
}
return null;
}
private static SearchRegion getSearchRegion(IFindReplaceTarget target, IEditorPart editorPart)
{
SearchRegion searchRegion = null;
String text = target.getSelectionText();
Point range = target.getSelection();
if (range.y > 0) {
searchRegion = new SearchRegion(text, range.x, range.y);
}
else if (editorPart instanceof ITextEditor) {
ISelection selection = ((ITextEditor) editorPart).getSelectionProvider().getSelection();
if (selection instanceof ITextSelection) {
int offset = ((ITextSelection)selection).getOffset();
IDocumentProvider provider = ((ITextEditor) editorPart).getDocumentProvider();
IEditorInput input = editorPart.getEditorInput();
if ((provider != null) && (input != null)) {
IDocument document = provider.getDocument(input);
if (document != null) {
searchRegion = getSearchRegion(document, offset);
if (searchRegion != null) {
// ITextSelection textSelection = new TextSelection(
// document, searchRegion.offset, searchRegion.length
// );
// ((ITextEditor) editorPart).getSelectionProvider().setSelection(textSelection);
searchRegion = new SearchRegion(
searchRegion.text,
searchRegion.offset + (range.x - offset),
searchRegion.length
);
}
}
}
}
}
return searchRegion;
}
public boolean isEditable() {
final IDocumentProvider provider = getDocumentProvider();
if (provider instanceof IDocumentProviderExtension) {
final IDocumentProviderExtension extension = (IDocumentProviderExtension) provider;
return extension.isModifiable(getEditorInput());
}
return false;
}
/**
* @return the document that is binded to this editor (may be null)
*/
@Override
public IDocument getDocument() {
IDocumentProvider documentProvider = getDocumentProvider();
if (documentProvider != null) {
return documentProvider.getDocument(getEditorInput());
}
return null;
}
protected void validateState(final IEditorInput input) {
final IDocumentProvider provider = getDocumentProvider();
if (!(provider instanceof IDocumentProviderExtension))
return;
final IDocumentProviderExtension extension = (IDocumentProviderExtension) provider;
try {
extension.validateState(input, getSite().getShell());
} catch (final CoreException x) {
final IStatus status = x.getStatus();
if (status == null || status.getSeverity() != IStatus.CANCEL) {
final Bundle bundle = Platform.getBundle(PlatformUI.PLUGIN_ID);
final ILog log = Platform.getLog(bundle);
log.log(x.getStatus());
final Shell shell = getSite().getShell();
final String title = "EditorMessages.Editor_error_validateEdit_title";
final String msg = "EditorMessages.Editor_error_validateEdit_message";
ErrorDialog.openError(shell, title, msg, x.getStatus());
}
return;
}
if (fSourceViewer != null)
fSourceViewer.setEditable(isEditable());
}
/**
* Retrieves the AbstractMarkerAnnontationsModel from the editor.
*
* @return AbstractMarkerAnnotatiosnModel from the editor
*/
@CheckForNull
protected AbstractMarkerAnnotationModel getModel() {
if (editor == null) {
return null;
}
IDocumentProvider provider = editor.getDocumentProvider();
IAnnotationModel model = provider.getAnnotationModel(editor.getEditorInput());
if (model instanceof AbstractMarkerAnnotationModel) {
return (AbstractMarkerAnnotationModel) model;
}
return null;
}
protected void validateState(IEditorInput input) {
IDocumentProvider provider = getDocumentProvider();
if (!(provider instanceof IDocumentProviderExtension))
return;
IDocumentProviderExtension extension = (IDocumentProviderExtension) provider;
try {
extension.validateState(input, getSite().getShell());
} catch (CoreException x) {
IStatus status = x.getStatus();
if (status == null || status.getSeverity() != IStatus.CANCEL) {
Bundle bundle = Platform.getBundle(PlatformUI.PLUGIN_ID);
ILog log = Platform.getLog(bundle);
log.log(x.getStatus());
Shell shell = getSite().getShell();
String title = "EditorMessages.Editor_error_validateEdit_title";
String msg = "EditorMessages.Editor_error_validateEdit_message";
ErrorDialog.openError(shell, title, msg, x.getStatus());
}
return;
}
if (fSourceViewer != null)
fSourceViewer.setEditable(isEditable());
}
private IAnnotationModel getAnnotationModel() {
IDocumentProvider documentProvider = getDocumentProvider();
if (documentProvider == null) {
return null;
}
return documentProvider.getAnnotationModel(getEditorInput());
}
public void uninstall() {
ISourceViewer sourceViewer = getSourceViewer();
if (sourceViewer != null)
sourceViewer.removeTextInputListener(this);
IDocumentProvider documentProvider = getDocumentProvider();
if (documentProvider != null) {
IDocument document = documentProvider.getDocument(getEditorInput());
if (document != null)
document.removeDocumentListener(this);
}
}