In progress: [ Issue 45 ] Protobuf-dt should be able to open files outside workspace
https://code.google.com/p/protobuf-dt/issues/detail?id=45
Code cleanup.
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ProtobufDocumentProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ProtobufDocumentProvider.java
index fc3dad8..7576d91 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ProtobufDocumentProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ProtobufDocumentProvider.java
@@ -39,6 +39,7 @@
public class ProtobufDocumentProvider extends XtextDocumentProvider {
private static final String ENCODING = "UTF-8";
+ private static final String FILE_SCHEME = "file";
@Inject private Closeables closeables;
@Inject private IssueResolutionProvider issueResolutionProvider;
@@ -46,36 +47,37 @@
@Inject private IResourceValidator resourceValidator;
@Override protected ElementInfo createElementInfo(Object element) throws CoreException {
- if (element instanceof FileStoreEditorInput) {
- FileStoreEditorInput input = (FileStoreEditorInput) element;
- IDocument document = null;
- IStatus status = null;
- try {
- document = createDocument(element);
- } catch (CoreException e) {
- handleCoreException(e, "ProtobufDocumentProvider.createElementInfo");
- document = createEmptyDocument();
- status = e.getStatus();
- }
- IFileStore store = EFS.getLocalFileSystem().getStore(fileFrom(input).toURI());
- IFileInfo fileInfo = store.fetchInfo();
- IAnnotationModel model = createAnnotationModel(element);
- // new FileSynchronizer(input).install();
- FileInfo info = new FileInfo(document, model, null);
- info.fModificationStamp = fileInfo.getLastModified();
- info.fStatus = status;
- info.fEncoding = ENCODING;
- cacheEncodingState(element);
- XtextDocument xtextDocument = (XtextDocument) document;
- AnnotationIssueProcessor annotationIssueProcessor = new AnnotationIssueProcessor(xtextDocument, model,
- issueResolutionProvider);
- ValidationJob job = new ValidationJob(resourceValidator, xtextDocument, annotationIssueProcessor, FAST_ONLY);
- xtextDocument.setValidationJob(job);
- return info;
- }
+ if (element instanceof FileStoreEditorInput) return createElementInfo((FileStoreEditorInput) element);
return super.createElementInfo(element);
}
+ private ElementInfo createElementInfo(FileStoreEditorInput input) throws CoreException {
+ IDocument document = null;
+ IStatus status = null;
+ try {
+ document = createDocument(input);
+ } catch (CoreException e) {
+ handleCoreException(e, "ProtobufDocumentProvider.createElementInfo");
+ document = createEmptyDocument();
+ status = e.getStatus();
+ }
+ IFileStore store = EFS.getLocalFileSystem().getStore(fileFrom(input).toURI());
+ IFileInfo fileInfo = store.fetchInfo();
+ IAnnotationModel model = createAnnotationModel(input);
+ // new FileSynchronizer(input).install();
+ FileInfo info = new FileInfo(document, model, null);
+ info.fModificationStamp = fileInfo.getLastModified();
+ info.fStatus = status;
+ info.fEncoding = ENCODING;
+ cacheEncodingState(input);
+ XtextDocument xtextDocument = (XtextDocument) document;
+ AnnotationIssueProcessor annotationIssueProcessor = new AnnotationIssueProcessor(xtextDocument, model,
+ issueResolutionProvider);
+ ValidationJob job = new ValidationJob(resourceValidator, xtextDocument, annotationIssueProcessor, FAST_ONLY);
+ xtextDocument.setValidationJob(job);
+ return info;
+ }
+
/** {@inheritDoc} */
@Override protected IDocument createDocument(Object element) throws CoreException {
if (element instanceof FileStoreEditorInput) {
@@ -86,13 +88,14 @@
try {
String contents = contentsOf(file);
document.set(contents);
- IParseResult result = parser.parse(new InputStreamReader(new StringInputStream(contents), ENCODING));
+ IParseResult result = parser.parse(readerFor(new StringInputStream(contents)));
resource.getContents().add(result.getRootASTElement());
document.setInput(resource);
return document;
} catch (Throwable t) {
- if (t instanceof CoreException) throw (CoreException) t;
- throw wrapWithCoreException(t);
+ String message = t.getMessage();
+ if (message == null) message = "";
+ throw new CoreException(new Status(ERROR, PLUGIN_ID, message, t));
}
}
return super.createDocument(element);
@@ -101,19 +104,19 @@
private File fileFrom(IURIEditorInput input) {
URI uri = input.getURI();
String scheme = uri.getScheme();
- if (scheme != "file") {
- String cleanUri = uri.toString().replaceFirst(scheme, "file");
+ if (scheme != FILE_SCHEME) {
+ String cleanUri = uri.toString().replaceFirst(scheme, FILE_SCHEME);
uri = URI.create(cleanUri);
}
return new File(uri);
}
- private String contentsOf(File file) throws CoreException {
+ private String contentsOf(File file) throws IOException {
Reader reader = null;
- InputStream contentStream = null;
+ InputStream inputStream = null;
try {
- contentStream = new FileInputStream(file);
- reader = new BufferedReader(new InputStreamReader(contentStream, ENCODING), DEFAULT_FILE_SIZE);
+ inputStream = new FileInputStream(file);
+ reader = new BufferedReader(readerFor(inputStream), DEFAULT_FILE_SIZE);
StringBuilder contents = new StringBuilder(DEFAULT_FILE_SIZE);
char[] buffer = new char[2048];
int character = reader.read(buffer);
@@ -122,19 +125,12 @@
character = reader.read(buffer);
}
return contents.toString();
- } catch (IOException e) {
- throw wrapWithCoreException(e);
} finally {
- if (!closeables.close(reader)) closeables.close(contentStream);
+ if (!closeables.close(reader)) closeables.close(inputStream);
}
}
- private CoreException wrapWithCoreException(Throwable cause) {
- return new CoreException(new Status(ERROR, PLUGIN_ID, messageOf(cause), cause));
- }
-
- private String messageOf(Throwable t) {
- String message = t.getMessage();
- return (message != null) ? message : "";
+ private Reader readerFor(InputStream inputStream) throws IOException {
+ return new InputStreamReader(inputStream, ENCODING);
}
}