From 504602213a5ed701fc2fb8ebf31bfa7def5a563b Mon Sep 17 00:00:00 2001 From: Chris Recoskie Date: Fri, 4 Apr 2008 17:48:27 +0000 Subject: Various changes for EFS - Fixed many NPEs in the build system that occurred when IProject.getLocation() returned null - Created new IStorage implementation (EFSFileStorage) for the editor which can handle EFS resources - added some utility methods for handling EFS resources --- .../org/eclipse/cdt/core/model/CoreModel.java | 15 ++- .../org/eclipse/cdt/core/model/CoreModelUtil.java | 41 ++++++- .../cdt/internal/core/model/CModelManager.java | 68 +++++++++++ .../org/eclipse/cdt/internal/core/model/Util.java | 7 +- .../core/pdom/TeamPDOMImportOperation.java | 4 +- .../src/org/eclipse/cdt/core/CommandLauncher.java | 9 +- .../eclipse/cdt/core/resources/EFSFileStorage.java | 120 +++++++++++++++++++ .../ui/editor/ExternalSearchDocumentProvider.java | 23 +++- .../cdt/internal/ui/util/EditorUtility.java | 129 +++++++++++++++++++-- 9 files changed, 394 insertions(+), 22 deletions(-) create mode 100644 core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/EFSFileStorage.java (limited to 'core') diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java index 58358b12c8a..95235d43d86 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2007 QNX Software Systems and others. + * Copyright (c) 2000, 2008 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -8,10 +8,13 @@ * Contributors: * QNX Software Systems - Initial API and implementation * Markus Schorn (Wind River Systems) + * IBM Corporation - EFS support *******************************************************************************/ package org.eclipse.cdt.core.model; +import java.net.URI; + import org.eclipse.cdt.core.CCProjectNature; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CProjectNature; @@ -75,11 +78,19 @@ public class CoreModel { } /** - * Creates a translation form and IPath. Returns null if not found. + * Creates a translation from an IPath. Returns null if not found. */ public ITranslationUnit createTranslationUnitFrom(ICProject cproject, IPath path) { return manager.createTranslationUnitFrom(cproject, path); } + + /** + * Creates a translation from a location URI. Returns null if not found. + * @since 5.0 + */ + public ITranslationUnit createTranslationUnitFrom(ICProject cproject, URI locationURI) { + return manager.createTranslationUnitFrom(cproject, locationURI); + } /** * Returns the C model element corresponding to the given handle identifier diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModelUtil.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModelUtil.java index ac6f94f231f..faf9a64ac4c 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModelUtil.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModelUtil.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2002, 2007 QNX Software Systems and others. + * Copyright (c) 2002, 2008 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -8,10 +8,12 @@ * Contributors: * QNX Software Systems - Initial API and implementation * Markus Schorn (Wind River Systems) + * IBM Corporation - EFS support *******************************************************************************/ package org.eclipse.cdt.core.model; +import java.net.URI; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -573,6 +575,43 @@ public class CoreModelUtil { return null; } + + /** + * Searches for a translation unit within the cprojects. For external files the ones + * from the given project are preferred. + * @since 5.0 + */ + public static ITranslationUnit findTranslationUnitForLocation(URI locationURI, ICProject preferredProject) throws CModelException { + IFile[] files= ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(locationURI); + if (files.length > 0) { + for (int i = 0; i < files.length; i++) { + IFile file = files[i]; + ITranslationUnit tu= findTranslationUnit(file); + if (tu != null) { + return tu; + } + } + } + else { + CoreModel coreModel = CoreModel.getDefault(); + ITranslationUnit tu= null; + if (preferredProject != null) { + tu= coreModel.createTranslationUnitFrom(preferredProject, locationURI); + } + if (tu == null) { + ICProject[] projects= coreModel.getCModel().getCProjects(); + for (int i = 0; i < projects.length && tu == null; i++) { + ICProject project = projects[i]; + if (!project.equals(preferredProject)) { + tu= coreModel.createTranslationUnitFrom(project, locationURI); + } + } + } + return tu; + } + return null; + } + /** * Returns the translation unit for the location given or null. * @throws CModelException diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java index d7434be9f94..01c9cac9578 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java @@ -11,6 +11,7 @@ * Markus Schorn (Wind River Systems) * Anton Leherbauer (Wind River Systems) * Warren Paul (Nokia) + * IBM Corporation (EFS Support) *******************************************************************************/ package org.eclipse.cdt.internal.core.model; @@ -18,6 +19,7 @@ package org.eclipse.cdt.internal.core.model; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -53,6 +55,9 @@ import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.internal.core.CCoreInternals; import org.eclipse.cdt.internal.core.LocalProjectScope; +import org.eclipse.core.filesystem.EFS; +import org.eclipse.core.filesystem.IFileInfo; +import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.filesystem.URIUtil; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; @@ -429,6 +434,69 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe } return null; } + + /** + * Creates a translation unit in the given project for the given location. + * + * @param cproject + * @param locationURI + * @return ITranslationUnit + */ + public ITranslationUnit createTranslationUnitFrom(ICProject cproject, URI locationURI) { + if (locationURI == null || cproject == null) { + return null; + } + + if(!locationURI.isAbsolute()) { + throw new IllegalArgumentException(); + } + + final IProject project= cproject.getProject(); + + IFileStore fileStore = null; + try { + fileStore = EFS.getStore(locationURI); + } catch (CoreException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + return null; + } + + final String contentTypeId = CoreModel.getRegistedContentTypeId(project, fileStore.getName()); + + if (! Util.isNonZeroLengthFile(locationURI)) { + return null; + } + + try { + IIncludeReference[] includeReferences = cproject.getIncludeReferences(); + for (int i = 0; i < includeReferences.length; i++) { + + + // crecoskie + // TODO FIXME: include entries don't handle URIs yet + if (includeReferences[i].isOnIncludeEntry(URIUtil.toPath(locationURI))) { + String headerContentTypeId= contentTypeId; + if (headerContentTypeId == null) { + headerContentTypeId= CoreModel.hasCCNature(project) ? CCorePlugin.CONTENT_TYPE_CXXHEADER : CCorePlugin.CONTENT_TYPE_CHEADER; + } + + return new ExternalTranslationUnit(includeReferences[i], locationURI, headerContentTypeId); + } + } + } catch (CModelException e) { + } + + // if the file exists and it has a known C/C++ file extension then just create + // an external translation unit for it. + IFileInfo info = fileStore.fetchInfo(); + + if (contentTypeId != null && info != null && info.exists()) { + return new ExternalTranslationUnit(cproject, locationURI, contentTypeId); + } + + return null; + } public void releaseCElement(ICElement celement) { diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Util.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Util.java index f01a9401a82..482215c16d0 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Util.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Util.java @@ -9,6 +9,7 @@ * Rational Software - Initial API and implementation * Markus Schorn (Wind River Systems) * Anton Leherbauer (Wind River Systems) + * IBM Corporation - EFS support *******************************************************************************/ package org.eclipse.cdt.internal.core.model; @@ -441,10 +442,10 @@ public class Util implements ICLogConstants { public static boolean isNonZeroLengthFile(IPath path) { return isNonZeroLengthFile(URIUtil.toURI(path)); } - + /** - * Return true if the file is not a directory and has length > 0 - * @param path + * Return true if the file referred to by the URI is not a directory and has length > 0 + * @param uri * @return */ public static boolean isNonZeroLengthFile(URI uri) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/TeamPDOMImportOperation.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/TeamPDOMImportOperation.java index bf43aa1a02e..3817774c0bc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/TeamPDOMImportOperation.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/TeamPDOMImportOperation.java @@ -137,7 +137,9 @@ public class TeamPDOMImportOperation implements IWorkspaceRunnable { IStringVariableManager varManager= VariablesPlugin.getDefault().getStringVariableManager(); IPath location= new Path(varManager.performStringSubstitution(loc)); if (!location.isAbsolute()) { - location= project.getLocation().append(location); + + if(project.getLocation() != null) + location= project.getLocation().append(location); } return location.toFile(); } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CommandLauncher.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CommandLauncher.java index 1ff92b24297..d6eebed50b9 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CommandLauncher.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CommandLauncher.java @@ -14,6 +14,7 @@ package org.eclipse.cdt.core; * (c) Copyright IBM Corp. 2000, 2001. All Rights Reserved. */ +import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.util.Properties; @@ -103,7 +104,13 @@ public class CommandLauncher { try { // add platform specific arguments (shell invocation) fCommandArgs = constructCommandArray(commandPath.toOSString(), args); - fProcess = ProcessFactory.getFactory().exec(fCommandArgs, env, changeToDirectory.toFile()); + + File file = null; + + if(changeToDirectory != null) + file = changeToDirectory.toFile(); + + fProcess = ProcessFactory.getFactory().exec(fCommandArgs, env, file); fErrorMessage = ""; //$NON-NLS-1$ } catch (IOException e) { setErrorMessage(e.getMessage()); diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/EFSFileStorage.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/EFSFileStorage.java new file mode 100644 index 00000000000..e0db10a41bd --- /dev/null +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/EFSFileStorage.java @@ -0,0 +1,120 @@ +/******************************************************************************* + * Copyright (c) 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.core.resources; + +import java.io.InputStream; +import java.net.URI; + +import org.eclipse.core.filesystem.EFS; +import org.eclipse.core.filesystem.IFileInfo; +import org.eclipse.core.filesystem.IFileStore; +import org.eclipse.core.filesystem.URIUtil; +import org.eclipse.core.resources.IStorage; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.PlatformObject; + +/** + * A storage object which is backed by an EFS resource. + * + * @author crecoskie + * @since 5.0 + * + */ +public class EFSFileStorage extends PlatformObject implements IStorage { + + private URI locationURI; + private InputStream inputStream; + + public EFSFileStorage(URI locationURI) { + this.locationURI = locationURI; + } + + /* (non-Javadoc) + * @see org.eclipse.core.resources.IStorage#getContents() + */ + public InputStream getContents() throws CoreException { + if (inputStream == null) { + + IFileStore fileStore = EFS.getStore(locationURI); + + if (fileStore != null) { + + inputStream = fileStore.openInputStream(EFS.NONE, + new NullProgressMonitor()); + } + } + + return inputStream; + + } + + /* (non-Javadoc) + * @see org.eclipse.core.resources.IStorage#getFullPath() + */ + public IPath getFullPath() { + return URIUtil.toPath(locationURI); + } + + /* (non-Javadoc) + * @see org.eclipse.core.resources.IStorage#getName() + */ + public String getName() { + IFileStore fileStore = null; + try { + fileStore = EFS.getStore(locationURI); + } catch (CoreException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + + if (fileStore != null) { + return fileStore.getName(); + } + + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.core.resources.IStorage#isReadOnly() + */ + public boolean isReadOnly() { + IFileStore fileStore = null; + try { + fileStore = EFS.getStore(locationURI); + } catch (CoreException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + if (fileStore != null) { + IFileInfo info = fileStore.fetchInfo(); + + if(info != null) + return info.getAttribute(EFS.ATTRIBUTE_READ_ONLY); + } + + return false; + } + + /** + * Returns the location URI corresponding to the EFS resource that + * backs this storage. + * + * @return URI + */ + public URI getLocationURI() { + return locationURI; + } + +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchDocumentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchDocumentProvider.java index 8c0b95f0ea1..e143e8203c6 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchDocumentProvider.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchDocumentProvider.java @@ -13,6 +13,8 @@ package org.eclipse.cdt.internal.ui.editor; +import java.net.URI; + import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.CoreException; @@ -23,8 +25,10 @@ import org.eclipse.jface.text.source.IAnnotationModel; import org.eclipse.ui.IPathEditorInput; import org.eclipse.ui.IStorageEditorInput; import org.eclipse.ui.editors.text.ILocationProvider; +import org.eclipse.ui.editors.text.ILocationProviderExtension; import org.eclipse.ui.editors.text.TextFileDocumentProvider; +import org.eclipse.cdt.core.resources.EFSFileStorage; import org.eclipse.cdt.core.resources.FileStorage; import org.eclipse.cdt.ui.CUIPlugin; @@ -72,12 +76,23 @@ public class ExternalSearchDocumentProvider extends TextFileDocumentProvider { } if (element instanceof IAdaptable) { IAdaptable adaptable= (IAdaptable) element; - ILocationProvider provider= (ILocationProvider) adaptable.getAdapter(ILocationProvider.class); - if (provider != null) { - IPath path= provider.getPath(element); - IStorage storage= new FileStorage(path); + + ILocationProviderExtension extendedProvider = (ILocationProviderExtension) adaptable.getAdapter(ILocationProviderExtension.class); + + if(extendedProvider != null) { + URI uri = extendedProvider.getURI(element); + IStorage storage = new EFSFileStorage(uri); return createExternalSearchAnnotationModel(storage, null); } + else { + ILocationProvider provider = (ILocationProvider) adaptable + .getAdapter(ILocationProvider.class); + if (provider != null) { + IPath path = provider.getPath(element); + IStorage storage = new FileStorage(path); + return createExternalSearchAnnotationModel(storage, null); + } + } } return null; } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/EditorUtility.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/EditorUtility.java index d9d4c527d25..d4a8d46054b 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/EditorUtility.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/EditorUtility.java @@ -17,8 +17,12 @@ package org.eclipse.cdt.internal.ui.util; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; +import java.net.URI; import java.text.MessageFormat; +import org.eclipse.core.filesystem.EFS; +import org.eclipse.core.filesystem.IFileStore; +import org.eclipse.core.filesystem.URIUtil; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; @@ -29,6 +33,7 @@ import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.content.IContentType; @@ -61,6 +66,7 @@ import org.eclipse.cdt.core.model.ISourceRange; import org.eclipse.cdt.core.model.ISourceReference; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.IWorkingCopy; +import org.eclipse.cdt.core.resources.EFSFileStorage; import org.eclipse.cdt.core.resources.FileStorage; import org.eclipse.cdt.ui.CUIPlugin; @@ -246,7 +252,7 @@ public class EditorUtility { if (resource instanceof IFile) { return new FileEditorInput((IFile) resource); } - return new ExternalEditorInput(unit, new FileStorage(unit.getPath())); + return new ExternalEditorInput(unit, new EFSFileStorage(unit.getLocationURI())); } if (element instanceof IBinary) { @@ -288,6 +294,11 @@ public class EditorUtility { IEditorInput input= getEditorInputForLocation(location, element); return EditorUtility.openInEditor(input, getEditorID(input, element), true); } + + public static IEditorPart openInEditor(URI locationURI, ICElement element) throws PartInitException { + IEditorInput input= getEditorInputForLocation(locationURI, element); + return EditorUtility.openInEditor(input, getEditorID(input, element), true); + } /** * Utility method to get an editor input for the given file system location. @@ -301,6 +312,66 @@ public class EditorUtility { * @param context an element related to the target file, may be null * @return an editor input */ + public static IEditorInput getEditorInputForLocation(URI locationURI, ICElement context) { + IFile resource= getWorkspaceFileAtLocation(locationURI, context); + if (resource != null) { + return new FileEditorInput(resource); + } + + if (context == null) { + // try to synthesize a context for a location appearing on a project's + // include paths + try { + ICProject[] projects = CCorePlugin.getDefault().getCoreModel().getCModel().getCProjects(); + outerFor: for (int i = 0; i < projects.length; i++) { + IIncludeReference[] includeReferences = projects[i].getIncludeReferences(); + for (int j = 0; j < includeReferences.length; j++) { + + // crecoskie test + // TODO FIXME + // include entries don't handle URIs yet, so fake it out for now + if (includeReferences[j].isOnIncludeEntry(URIUtil.toPath(locationURI))) { + context = projects[i]; + break outerFor; + } + } + } + if (context == null && projects.length > 0) { + // last resort: just take any of them + context= projects[0]; + } + } catch (CModelException e) { + } + } + + if (context != null) { + // try to get a translation unit from the location and associated element + ICProject cproject= context.getCProject(); + if (cproject != null) { + ITranslationUnit unit = CoreModel.getDefault().createTranslationUnitFrom(cproject, locationURI); + if (unit != null) { + IFileStore fileStore = null; + try { + fileStore = EFS.getStore(locationURI); + } catch (CoreException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + + if(fileStore != null) + return new ExternalEditorInput(unit, new EFSFileStorage(locationURI)); + } + // no translation unit - still try to get a sensible marker resource + // from the associated element + IResource markerResource= cproject.getProject(); + return new ExternalEditorInput(new EFSFileStorage(locationURI), markerResource); + } + } + return new ExternalEditorInput(new EFSFileStorage(locationURI)); + } + + public static IEditorInput getEditorInputForLocation(IPath location, ICElement context) { IFile resource= getWorkspaceFileAtLocation(location, context); if (resource != null) { @@ -346,7 +417,8 @@ public class EditorUtility { return new ExternalEditorInput(new FileStorage(location)); } - + + /** * Utility method to resolve a file system location to a workspace resource. * If a context element is given and there are multiple matches in the workspace, @@ -399,6 +471,49 @@ public class EditorUtility { return bestMatch; } + /** + * Utility method to resolve a file system location to a workspace resource. + * If a context element is given and there are multiple matches in the workspace, + * a resource with the same project of the context element are preferred. + * + * @param location a valid file system location + * @param context an element related to the target file, may be null + * @return an IFile or null + */ + public static IFile getWorkspaceFileAtLocation(URI locationURI, ICElement context) { + IProject project= null; + if (context != null) { + ICProject cProject= context.getCProject(); + if (cProject != null) { + project= cProject.getProject(); + } + } + IFile bestMatch= null; + IFile secondBestMatch= null; + IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot(); + IFile[] files= root.findFilesForLocationURI(locationURI); + for (int i= 0; i < files.length; i++) { + IFile file= files[i]; + if (file.isAccessible()) { + if (project != null && file.getProject().equals(project)) { + bestMatch= file; + break; + } else if (CoreModel.hasCNature(file.getProject())) { + bestMatch= file; + if (project == null) { + break; + } + } else { + // match in non-CDT project + secondBestMatch= file; + } + } + } + bestMatch= bestMatch != null ? bestMatch : secondBestMatch; + + return bestMatch; + } + /** * If the current active editor edits a c element return it, else * return null @@ -601,7 +716,7 @@ public class EditorUtility { try { IBuffer buffer = bin.getBuffer(); if (buffer != null) { - store = new FileStorage (new ByteArrayInputStream(buffer.getContents().getBytes()), bin.getPath()); + store = new EFSFileStorage (bin.getLocationURI()); } } catch (CModelException e) { // nothing; @@ -610,13 +725,7 @@ public class EditorUtility { } public static IStorage getStorage(ITranslationUnit tu) { - IStorage store = null; - try { - store = new FileStorage (new ByteArrayInputStream(tu.getBuffer().getContents().getBytes()), tu.getPath()); - } catch (CModelException e) { - // nothing; - } - return store; + return new EFSFileStorage (tu.getLocationURI()); } /** -- cgit v1.2.3