Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlain Magloire2004-04-19 05:50:10 +0000
committerAlain Magloire2004-04-19 05:50:10 +0000
commit93dfa55ecf145859f2c145725684fa7b0fa9b622 (patch)
tree077e1594ec07c31888d45ae9cad7cde314c191f3
parent981f445bb45f0bf0ad5536a3a0ac199d6d831c74 (diff)
downloadorg.eclipse.cdt-93dfa55ecf145859f2c145725684fa7b0fa9b622.tar.gz
org.eclipse.cdt-93dfa55ecf145859f2c145725684fa7b0fa9b622.tar.xz
org.eclipse.cdt-93dfa55ecf145859f2c145725684fa7b0fa9b622.zip
Changes to CDocumentProvider to use Eclipse-3.0 TextFileDocumentProvider
The changes had the side effect of moving the IBufferFactory also It is now in CustoBufferFactory. The DocumentAdapter for C File was rewritten
-rw-r--r--core/org.eclipse.cdt.ui/ChangeLog34
-rw-r--r--core/org.eclipse.cdt.ui/plugin.xml1
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java2
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CFileElementWorkingCopy.java202
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/codemanipulation/AddIncludeOperation.java6
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CViewContentProvider.java17
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/IncludeRefContainer.java10
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/AddIncludeOnSelectionAction.java30
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java41
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CDocumentProvider.java500
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java8
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CStorageDocumentProvider.java41
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CustomBufferFactory.java51
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/DocumentAdapter.java272
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ITranslationUnitEditorInput.java25
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/OpenIncludeAction.java13
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/WorkingCopyManager.java2
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CTextTools.java31
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/EditorUtility.java4
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/ExceptionHandler.java4
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/ExternalEditorInput.java34
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CUIPlugin.java15
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java4
23 files changed, 582 insertions, 765 deletions
diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog
index e05e051e62f..8a441ec0214 100644
--- a/core/org.eclipse.cdt.ui/ChangeLog
+++ b/core/org.eclipse.cdt.ui/ChangeLog
@@ -1,3 +1,37 @@
+2004-04-18 Alain Magloire
+
+ First part to move to Eclipse-3.0 new DocumentProvider scheme
+ for the CEditor. Changes were made to the IBufferFactory, it
+ is now one class CustomBufferFactory in CUIPlugin.getBufferFactory()
+
+ * plugin.xml
+ * src/org/eclipse/cdt/internal/ui/editor/AddIncludeOnSelectionAction.java
+ * src/org/eclipse/cdt/internal/ui/editor/CContentOutlinerPage.java
+ * src/org/eclipse/cdt/internal/ui/editor/CDocumentProvider.java
+ * src/org/eclipse/cdt/internal/ui/editor/CEditor.java
+ * src/org/eclipse/cdt/internal/ui/editor/CStorageDocumentProvider.java
+ * src/org/eclipse/cdt/internal/ui/editor/CustomBufferFactory.java
+ * src/org/eclipse/cdt/internal/ui/editor/DocumenAdapter.java
+ * src/org/eclipse/cdt/internal/ui/editor/ITranslationUnitEditorInput.java
+ * src/org/eclipse/cdt/internal/ui/editor/OpenIncludeAction.java
+ * src/org/eclipse/cdt/internal/ui/editor/WorkingCopyManager.java
+
+ * src/org/eclipse/cdt/internal/ui/text/CTextTools.java
+
+ * src/org/eclipse/cdt/internal/ui/util/EditorUtility.java
+ * src/org/eclipse/cdt/internal/ui/util/ExternalEditorInput.java
+
+ * src/org/eclipse/cdt/ui/CUIPlugin.java
+
+ * src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java
+
+ * src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java
+ * src/org/eclipse/cdt/internal/ui/CFileElementWorkingCopy.java
+
+ * src/org/eclipse/cdt/internal/ui/codemanipulation/AddIncludeOperation.java
+ * src/org/eclipse/cdt/internal/ui/cview/CViewContentProvider.java
+ * src/org/eclipse/cdt/internal/ui/cview/IncludRefContainer.java
+
2004-04-16 Hoda Amer
Fix for bug#44364 : [Content Assist] case sensitivity option
Fix for bug#53446 : [New Class Wizard] Be able to configure new class wizard to not open source
diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml
index 2bb9e48be52..d148ea5b07a 100644
--- a/core/org.eclipse.cdt.ui/plugin.xml
+++ b/core/org.eclipse.cdt.ui/plugin.xml
@@ -25,6 +25,7 @@
<import plugin="org.eclipse.cdt.core"/>
<import plugin="org.eclipse.core.runtime.compatibility"/>
<import plugin="org.eclipse.ui.console"/>
+ <import plugin="org.eclipse.core.filebuffers"/>
</requires>
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java
index f99a47d8cfe..fa03a1efce6 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java
@@ -143,7 +143,7 @@ public class BaseCElementContentProvider implements ITreeContentProvider {
if(!(element instanceof IWorkingCopy)){
// if it has a valid working copy
ITranslationUnit tu = (ITranslationUnit)element;
- IWorkingCopy copy = tu.findSharedWorkingCopy(CUIPlugin.getBufferFactory());
+ IWorkingCopy copy = tu.findSharedWorkingCopy(CUIPlugin.getDefault().getBufferFactory());
if(copy != null) {
return ((IParent)copy).getChildren();
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CFileElementWorkingCopy.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CFileElementWorkingCopy.java
index 45f0f6a1d07..e85b743069f 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CFileElementWorkingCopy.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CFileElementWorkingCopy.java
@@ -7,225 +7,35 @@ package org.eclipse.cdt.internal.ui;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.IBuffer;
-import org.eclipse.cdt.core.model.IBufferChangedListener;
-import org.eclipse.cdt.core.model.IOpenable;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.internal.core.model.WorkingCopy;
-import org.eclipse.cdt.internal.ui.editor.CDocumentProvider;
-import org.eclipse.cdt.internal.ui.editor.DocumentAdapter;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IStorage;
import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.DefaultLineTracker;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IStorageEditorInput;
-import org.eclipse.ui.texteditor.IDocumentProvider;
public class CFileElementWorkingCopy extends WorkingCopy {
- IDocumentProvider fProvider;
- IEditorInput input;
- IBuffer buffer;
+ ITranslationUnit unit;
- /**
- * Internal IBuffer implementation very simple, must cases will use DocumentAdapter.
- *
- */
- class Buffer implements IBuffer {
-
- CFileElementWorkingCopy owner;
-
- public Buffer(CFileElementWorkingCopy o) {
- owner = o;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#addBufferChangedListener(org.eclipse.cdt.core.model.IBufferChangedListener)
- */
- public void addBufferChangedListener(IBufferChangedListener listener) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#append(char[])
- */
- public void append(char[] text) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#append(java.lang.String)
- */
- public void append(String text) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#close()
- */
- public void close() {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#getChar(int)
- */
- public char getChar(int position) {
- IDocument doc = fProvider.getDocument(input);
- if (doc != null) {
- try {
- return doc.getChar(position);
- } catch (BadLocationException e) {
- }
- }
- return 0;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#getCharacters()
- */
- public char[] getCharacters() {
- return getContents().toCharArray();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#getContents()
- */
- public String getContents() {
- IDocument doc = fProvider.getDocument(input);
- if (doc != null) {
- return doc.get();
- }
- return new String();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#getLength()
- */
- public int getLength() {
- IDocument doc = fProvider.getDocument(input);
- if (doc != null) {
- return doc.getLength();
- }
- return 0;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#getOwner()
- */
- public IOpenable getOwner() {
- return owner;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#getText(int, int)
- */
- public String getText(int offset, int length) {
- IDocument doc = fProvider.getDocument(input);
- if (doc != null) {
- try {
- return doc.get(offset, length);
- } catch (BadLocationException e) {
- }
- }
- return new String();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#getUnderlyingResource()
- */
- public IResource getUnderlyingResource() {
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#hasUnsavedChanges()
- */
- public boolean hasUnsavedChanges() {
- return false;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#isClosed()
- */
- public boolean isClosed() {
- return false;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#isReadOnly()
- */
- public boolean isReadOnly() {
- return true;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#removeBufferChangedListener(org.eclipse.cdt.core.model.IBufferChangedListener)
- */
- public void removeBufferChangedListener(IBufferChangedListener listener) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#replace(int, int, char[])
- */
- public void replace(int position, int length, char[] text) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#replace(int, int, java.lang.String)
- */
- public void replace(int position, int length, String text) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#save(org.eclipse.core.runtime.IProgressMonitor, boolean)
- */
- public void save(IProgressMonitor progress, boolean force) throws CModelException {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#setContents(char[])
- */
- public void setContents(char[] contents) {
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.model.IBuffer#setContents(java.lang.String)
- */
- public void setContents(String contents) {
- }
-
- }
/**
* Creates a working copy of this element
*/
- public CFileElementWorkingCopy(IStorageEditorInput StoreInput, IDocumentProvider provider) throws CoreException {
- super(null, new Path(StoreInput.getName()), null);
- input = StoreInput;
- fProvider = provider;
- IStorage storage = StoreInput.getStorage();
- super.setLocation(storage.getFullPath());
+ public CFileElementWorkingCopy(ITranslationUnit unit) throws CoreException {
+ super(unit.getParent(), unit.getPath(), null);
+ this.unit = unit;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.model.IOpenable#getBuffer()
*/
public IBuffer getBuffer() throws CModelException {
- if (buffer == null) {
- if (fProvider instanceof CDocumentProvider) {
- buffer = new DocumentAdapter(this, fProvider.getDocument(input), new DefaultLineTracker(), (CDocumentProvider)fProvider, input);
- } else {
- buffer = new Buffer(this);
- }
- }
- return buffer;
+ return unit.getBuffer();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.model.IWorkingCopy#getOriginalElement()
*/
public ITranslationUnit getOriginalElement() {
- return this;
+ return unit;
}
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/codemanipulation/AddIncludeOperation.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/codemanipulation/AddIncludeOperation.java
index 9143dfbfb56..6fde6253a93 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/codemanipulation/AddIncludeOperation.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/codemanipulation/AddIncludeOperation.java
@@ -9,7 +9,7 @@ import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IInclude;
import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.core.model.ISourceRange;
-import org.eclipse.cdt.internal.ui.CFileElementWorkingCopy;
+import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.internal.ui.editor.CContentOutlinePage;
import org.eclipse.cdt.internal.ui.editor.CEditor;
import org.eclipse.cdt.internal.ui.editor.CEditorMessages;
@@ -33,7 +33,7 @@ import org.eclipse.ui.texteditor.ITextEditor;
*/
public class AddIncludeOperation extends WorkspaceModifyOperation {
- private CFileElementWorkingCopy fTranslationUnit;
+ private ITranslationUnit fTranslationUnit;
private IRequiredInclude[] fIncludes;
private boolean fDoSave;
private ITextEditor fEditor;
@@ -45,7 +45,7 @@ public class AddIncludeOperation extends WorkspaceModifyOperation {
* Elements must be of type IType (-> single import) or IPackageFragment
* (on-demand-import). Other JavaElements are ignored
*/
- public AddIncludeOperation(ITextEditor ed, CFileElementWorkingCopy tu, IRequiredInclude[] includes, boolean save) {
+ public AddIncludeOperation(ITextEditor ed, ITranslationUnit tu, IRequiredInclude[] includes, boolean save) {
super();
fEditor = ed;
fIncludes= includes;
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CViewContentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CViewContentProvider.java
index 535a8eecd76..7b28438a26a 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CViewContentProvider.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CViewContentProvider.java
@@ -104,4 +104,21 @@ public class CViewContentProvider extends CElementContentProvider {
}
return extras;
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.ui.BaseCElementContentProvider#internalGetParent(java.lang.Object)
+ */
+ public Object internalGetParent(Object element) {
+ // since we insert logical containers we have to fix
+ // up the parent for includereference so that they refer
+ // to the container and containers refere to the project
+ Object parent = super.internalGetParent(element);
+ if (element instanceof IIncludeReference) {
+ if (parent instanceof ICProject) {
+ parent = new IncludeRefContainer((ICProject)parent);
+ }
+ } else if (element instanceof IncludeRefContainer) {
+ parent = ((IncludeRefContainer)element).getCProject();
+ }
+ return parent;
+ }
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/IncludeRefContainer.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/IncludeRefContainer.java
index 2a02f205b3c..1df0842b823 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/IncludeRefContainer.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/IncludeRefContainer.java
@@ -82,4 +82,14 @@ public class IncludeRefContainer implements IAdaptable, IWorkbenchAdapter{
return fCProject;
}
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals(Object obj) {
+ if (obj instanceof IncludeRefContainer) {
+ IncludeRefContainer other = (IncludeRefContainer)obj;
+ return fCProject.equals(other.getCProject());
+ }
+ return super.equals(obj);
+ }
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/AddIncludeOnSelectionAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/AddIncludeOnSelectionAction.java
index a39fc594736..3b50fabc125 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/AddIncludeOnSelectionAction.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/AddIncludeOnSelectionAction.java
@@ -5,8 +5,8 @@ package org.eclipse.cdt.internal.ui.editor;
* All Rights Reserved.
*/
+import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.internal.ui.CCompletionContributorManager;
-import org.eclipse.cdt.internal.ui.CFileElementWorkingCopy;
import org.eclipse.cdt.internal.ui.codemanipulation.AddIncludeOperation;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.IFunctionSummary;
@@ -15,10 +15,6 @@ import java.lang.reflect.InvocationTargetException;
import org.eclipse.swt.widgets.Shell;
-import org.eclipse.core.runtime.CoreException;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
@@ -28,9 +24,6 @@ import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.ui.IStorageEditorInput;
-import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.ui.texteditor.IUpdate;
@@ -53,7 +46,7 @@ public class AddIncludeOnSelectionAction extends Action implements IUpdate {
//WorkbenchHelp.setHelp(this, new Object[] { IJavaHelpContextIds.ADD_IMPORT_ON_SELECTION_ACTION });
}
- private void addInclude(IRequiredInclude[] inc, CFileElementWorkingCopy tu) {
+ private void addInclude(IRequiredInclude[] inc, ITranslationUnit tu) {
AddIncludeOperation op= new AddIncludeOperation(fEditor, tu, inc, false);
try {
ProgressMonitorDialog dialog= new ProgressMonitorDialog(getShell());
@@ -66,22 +59,11 @@ public class AddIncludeOnSelectionAction extends Action implements IUpdate {
}
}
- private CFileElementWorkingCopy getTranslationUnit () {
- CFileElementWorkingCopy unit = null;
+ private ITranslationUnit getTranslationUnit () {
+ ITranslationUnit unit = null;
if(fEditor != null) {
IEditorInput editorInput= (IEditorInput)fEditor.getEditorInput();
- IDocumentProvider provider= fEditor.getDocumentProvider();
- try {
- if (editorInput instanceof IFileEditorInput)
- unit = new CFileElementWorkingCopy((IFileEditorInput)editorInput, provider);
- else if (editorInput instanceof IStorageEditorInput)
- unit = new CFileElementWorkingCopy((IStorageEditorInput)editorInput, provider);
- else
- throw new CoreException(new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID, 0, CEditorMessages.getString("AddIncludeOnSelectionAction.error.noInput"), null)); //$NON-NLS-1$
-
- } catch (CoreException e) {
- CUIPlugin.getDefault().log(e.getStatus());
- }
+ unit = CUIPlugin.getDefault().getWorkingCopyManager().getWorkingCopy(editorInput);
}
return unit;
}
@@ -129,7 +111,7 @@ public class AddIncludeOnSelectionAction extends Action implements IUpdate {
}
if(requiredIncludes != null && requiredIncludes.length > 0) {
- CFileElementWorkingCopy tu= getTranslationUnit();
+ ITranslationUnit tu= getTranslationUnit();
if(tu != null) {
addInclude(requiredIncludes, tu);
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java
index 58a814c010d..b26cfe739ca 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java
@@ -9,20 +9,14 @@ import java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.cdt.core.model.ICElement;
-import org.eclipse.cdt.core.model.IWorkingCopy;
-import org.eclipse.cdt.internal.core.model.WorkingCopy;
-import org.eclipse.cdt.internal.ui.CFileElementWorkingCopy;
+import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.internal.ui.StandardCElementLabelProvider;
import org.eclipse.cdt.internal.ui.search.actions.SelectionSearchGroup;
import org.eclipse.cdt.internal.ui.util.ProblemTreeViewer;
import org.eclipse.cdt.ui.CElementContentProvider;
import org.eclipse.cdt.ui.CUIPlugin;
-import org.eclipse.cdt.ui.IWorkingCopyManager;
import org.eclipse.cdt.ui.actions.MemberFilterActionGroup;
import org.eclipse.cdt.ui.actions.RefactoringActionGroup;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
@@ -41,19 +35,15 @@ import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.ui.IStorageEditorInput;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.actions.ActionGroup;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.part.Page;
-import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
public class CContentOutlinePage extends Page implements IContentOutlinePage, ISelectionChangedListener {
private CEditor fEditor;
- private IWorkingCopy fInput;
+ private ITranslationUnit fInput;
private ProblemTreeViewer treeViewer;
private ListenerList selectionChangedListeners = new ListenerList();
private TogglePresentationAction fTogglePresentation;
@@ -194,29 +184,8 @@ public class CContentOutlinePage extends Page implements IContentOutlinePage, IS
fSelectionSearchGroup = new SelectionSearchGroup(this);
fRefactoringActionGroup = new RefactoringActionGroup(this);
-
- IEditorInput editorInput= (IEditorInput)fEditor.getEditorInput();
- IDocumentProvider provider= fEditor.getDocumentProvider();
- try {
- if (editorInput instanceof IFileEditorInput){
- IWorkingCopyManager wcManager = CUIPlugin.getDefault().getWorkingCopyManager();
- fInput = (WorkingCopy)wcManager.getWorkingCopy(editorInput);
- if (fInput == null) {
- // XXX This should never happen. Put an assert.
- fInput = new CFileElementWorkingCopy((IFileEditorInput)editorInput, provider);
- }
- } else if (editorInput instanceof IStorageEditorInput){
- // CHECKPOINT: do we create a CFileElementWorkingCopy or just a working copy for the IStorageEditorInput?
- // If it is an IStorage it means that there is no underlying IFile.
- fInput = new CFileElementWorkingCopy((IStorageEditorInput)editorInput, provider);
- } else {
- throw new CoreException(new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID, 0, CEditorMessages.getString("CContentOutlinePage.error.noInput"), null)); //$NON-NLS-1$
- }
- treeViewer.setInput(fInput);
- } catch (CoreException e) {
- CUIPlugin.getDefault().log(e.getStatus());
- fInput= null;
- }
+ treeViewer.setInput(fInput);
+
}
public void dispose() {
@@ -315,7 +284,7 @@ public class CContentOutlinePage extends Page implements IContentOutlinePage, IS
/**
* @param unit
*/
- public void setInput(IWorkingCopy unit) {
+ public void setInput(ITranslationUnit unit) {
fInput = unit;
if (treeViewer != null) {
treeViewer.setInput (fInput);
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CDocumentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CDocumentProvider.java
index ab27c6d19ed..9d8bcbe4f2d 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CDocumentProvider.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CDocumentProvider.java
@@ -1,293 +1,170 @@
+/**********************************************************************
+ * Copyright (c) 2002,2003,2004 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * QNX Software Systems - Initial API and implementation
+ ***********************************************************************/
package org.eclipse.cdt.internal.ui.editor;
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.eclipse.cdt.core.model.CModelException;
+import java.util.Iterator;
import org.eclipse.cdt.core.model.CoreModel;
-import org.eclipse.cdt.core.model.IBuffer;
-import org.eclipse.cdt.core.model.IOpenable;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.model.IWorkingCopy;
import org.eclipse.cdt.internal.core.model.IBufferFactory;
-import org.eclipse.cdt.internal.ui.CStatusConstants;
+import org.eclipse.cdt.internal.ui.CFileElementWorkingCopy;
import org.eclipse.cdt.ui.CUIPlugin;
-import org.eclipse.cdt.ui.IEditorInputDelegate;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IStorage;
-import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.text.AbstractDocument;
import org.eclipse.jface.text.DefaultLineTracker;
-import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.GapTextStore;
import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IDocumentPartitioner;
+import org.eclipse.jface.text.ILineTracker;
+import org.eclipse.jface.text.ISynchronizable;
import org.eclipse.jface.text.source.IAnnotationModel;
-import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.ui.IStorageEditorInput;
-import org.eclipse.ui.editors.text.FileDocumentProvider;
-import org.eclipse.ui.part.FileEditorInput;
-import org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel;
-
-public class CDocumentProvider extends FileDocumentProvider {
+import org.eclipse.ui.editors.text.TextFileDocumentProvider;
+/**
+ * CDocumentProvider2
+ */
+public class CDocumentProvider extends TextFileDocumentProvider {
/**
- * Bundle of all required informations to allow working copy management.
- */
- protected class CDocument extends AbstractDocument {
-
- /**
- * Creates a new empty document.
- */
- public CDocument() {
- super();
- setTextStore(new GapTextStore(50, 300));
- setLineTracker(new DefaultLineTracker());
- completeInitialization();
- }
-
- /**
- * Creates a new document with the given initial content.
- *
- * @param initialContent the document's initial content
- */
- public CDocument(String initialContent) {
- super();
- setTextStore(new GapTextStore(50, 300));
- setLineTracker(new DefaultLineTracker());
- getStore().set(initialContent);
- getTracker().set(initialContent);
- completeInitialization();
- }
- };
-
- /**
- * Bundle of all required informations to allow working copy management.
- */
- protected class TranslationUnitFileInfo extends FileInfo {
-
- IWorkingCopy fCopy;
-
- TranslationUnitFileInfo(IDocument document, IAnnotationModel model, FileSynchronizer fileSynchronizer, IWorkingCopy copy) {
- super(document, model, fileSynchronizer);
- fCopy= copy;
- }
-
- void setModificationStamp(long timeStamp) {
- fModificationStamp= timeStamp;
- }
- };
- /**
- * Creates <code>IBuffer</code>s based on documents.
+ * Bundle of all required informations to allow working copy management.
*/
- protected class BufferFactory implements IBufferFactory {
-
- private IDocument internalGetDocument(IFileEditorInput input) throws CoreException {
- IDocument document= getDocument(input);
- if (document != null)
- return document;
- return CDocumentProvider.this.createDocument(input);
- }
-
- public IBuffer createBuffer(IOpenable owner) {
- if (owner instanceof IWorkingCopy) {
-
- IWorkingCopy unit= (IWorkingCopy) owner;
- ITranslationUnit original= (ITranslationUnit) unit.getOriginalElement();
- IResource resource= original.getResource();
- if (resource instanceof IFile) {
- IFileEditorInput providerKey= new FileEditorInput((IFile) resource);
-
- IDocument document= null;
- IStatus status= null;
-
- try {
- document= internalGetDocument(providerKey);
- } catch (CoreException x) {
- status= x.getStatus();
- document= new Document();
- initializeDocument(document);
- }
-
- DocumentAdapter adapter= new DocumentAdapter(unit, document, new DefaultLineTracker(), CDocumentProvider.this, providerKey);
- adapter.setStatus(status);
- return adapter;
- }
-
- }
- return DocumentAdapter.NULL;
- }
- };
-
+ static protected class TranslationUnitInfo extends FileInfo {
+ public IWorkingCopy fCopy;
+ }
- /** The buffer factory */
- private IBufferFactory fBufferFactory= new BufferFactory();
/** Indicates whether the save has been initialized by this provider */
- private boolean fIsAboutToSave= false;
-
- /**
- * @see AbstractDocumentProvider#createDocument(Object)
- */
- protected IDocument createDocument(Object element) throws CoreException {
- IDocument document = null;
- IStorage storage = null;
+ private boolean fIsAboutToSave = false;
- if (element instanceof IEditorInputDelegate) {
- if (((IEditorInputDelegate) element).getDelegate() != null)
- return createDocument(((IEditorInputDelegate) element).getDelegate());
- else
- storage = ((IEditorInputDelegate) element).getStorage();
- }
-
- if (element instanceof IStorageEditorInput)
- storage= ((IStorageEditorInput) element).getStorage();
-
- if ( storage != null ) {
- document = new CDocument();
- setDocumentContent(document, storage.getContents(), getDefaultEncoding());
- }
+ /** The save policy used by this provider */
+ //private ISavePolicy fSavePolicy;
- //IDocument document= super.createDocument(element);
- initializeDocument(document);
- return document;
+ /**
+ *
+ */
+ public CDocumentProvider() {
+ super();
+ setParentDocumentProvider(new TextFileDocumentProvider(new CStorageDocumentProvider()));
}
-
- /*
- * @see AbstractDocumentProvider#createAnnotationModel(Object)
+
+ /**
+ * Creates a translation unit from the given file.
+ *
+ * @param file
+ * the file from which to create the translation unit
*/
- protected IAnnotationModel createAnnotationModel(Object element) throws CoreException {
- if ( element instanceof IEditorInputDelegate && ((IEditorInputDelegate)element).getDelegate() != null )
- return createAnnotationModel( ((IEditorInputDelegate)element).getDelegate() );
- if (element instanceof IFileEditorInput) {
- IFileEditorInput input= (IFileEditorInput) element;
- return new CMarkerAnnotationModel(input.getFile());
- } else if (element instanceof IStorageEditorInput) {
- // Fall back on the adapter.
- IStorageEditorInput input = (IStorageEditorInput) element;
- IResource res = (IResource)input.getAdapter(IResource.class);
- if (res != null && res.exists()) {
- return new CMarkerAnnotationModel(res);
- }
+ protected ITranslationUnit createTranslationUnit(IFile file) {
+ Object element = CoreModel.getDefault().create(file);
+ if (element instanceof ITranslationUnit) {
+ return (ITranslationUnit) element;
}
-
- return super.createAnnotationModel(element);
+ return null;
}
-
+
/*
- * @see AbstractDocumentProvider#createElementInfo(Object)
+ * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createEmptyFileInfo()
*/
- protected ElementInfo createElementInfo(Object element) throws CoreException {
- if ( !(element instanceof IFileEditorInput))
- return super.createElementInfo(element);
-
- IFileEditorInput input= (IFileEditorInput) element;
- ITranslationUnit original= createTranslationUnit(input.getFile());
- if (original != null) {
-
- try {
-
- try {
- refreshFile(input.getFile());
- } catch (CoreException x) {
- handleCoreException(x, CEditorMessages.getString("TranslationUnitDocumentProvider.error.createElementInfo")); //$NON-NLS-1$
- }
-
- IAnnotationModel m= createAnnotationModel(input);
- IBufferFactory factory = getBufferFactory();
- IWorkingCopy c= (IWorkingCopy) original.getSharedWorkingCopy(getProgressMonitor(), factory);
-
- DocumentAdapter a= null;
- try {
- a= (DocumentAdapter) c.getBuffer();
- } catch (ClassCastException x) {
- IStatus status= new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID, CStatusConstants.TEMPLATE_IO_EXCEPTION, "Shared working copy has wrong buffer", x); //$NON-NLS-1$
- throw new CoreException(status);
- }
-
- FileSynchronizer f= new FileSynchronizer(input);
- f.install();
-
- TranslationUnitFileInfo info= new TranslationUnitFileInfo(a.getDocument(), m, f, c);
- info.setModificationStamp(computeModificationStamp(input.getFile()));
- info.fStatus= a.getStatus();
- info.fEncoding= getPersistedEncoding(input);
-
- return info;
-
- } catch (CModelException x) {
- throw new CoreException(x.getStatus());
- }
- } else {
- return super.createElementInfo(element);
- }
+ protected FileInfo createEmptyFileInfo() {
+ return new TranslationUnitInfo();
}
+
/*
- * Creates a translation unit using the core model
+ * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createAnnotationModel(org.eclipse.core.resources.IFile)
*/
- protected ITranslationUnit createTranslationUnit(IFile file) {
- Object element= CoreModel.getDefault().create(file);
- if (element instanceof ITranslationUnit)
- return (ITranslationUnit) element;
- return null;
+ protected IAnnotationModel createAnnotationModel(IFile file) {
+ return new CMarkerAnnotationModel(file);
}
+
/*
- * @see AbstractDocumentProvider#disposeElementInfo(Object, ElementInfo)
+ * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createFileInfo(java.lang.Object)
*/
- protected void disposeElementInfo(Object element, ElementInfo info) {
+ protected FileInfo createFileInfo(Object element) throws CoreException {
+ ITranslationUnit original = null;
+ IWorkingCopy copy = null;
+ if (element instanceof IFileEditorInput) {
+ IFileEditorInput input = (IFileEditorInput)element;
+ original = createTranslationUnit(input.getFile());
+ IBufferFactory factory = CUIPlugin.getDefault().getBufferFactory();
+ copy = (IWorkingCopy) original.getSharedWorkingCopy(getProgressMonitor(), factory);
+ } else if (element instanceof ITranslationUnitEditorInput) {
+ ITranslationUnitEditorInput input = (ITranslationUnitEditorInput)element;
+ copy = new CFileElementWorkingCopy(input.getTranslationUnit());
+ }
- if (info instanceof TranslationUnitFileInfo) {
- TranslationUnitFileInfo cuInfo= (TranslationUnitFileInfo) info;
- cuInfo.fCopy.destroy();
+ if (copy == null) {
+ return null;
}
- super.disposeElementInfo(element, info);
+ FileInfo info = super.createFileInfo(element);
+ if (!(info instanceof TranslationUnitInfo))
+ return null;
+ TranslationUnitInfo tuInfo = (TranslationUnitInfo) info;
+ setUpSynchronization(tuInfo);
+
+ //IProblemRequestor requestor= tuInfo.fModel instanceof IProblemRequestor ? (IProblemRequestor) tuInfo.fModel : null;
+ //original.becomeWorkingCopy(requestor, getProgressMonitor());
+
+ tuInfo.fCopy = copy;
+
+ //if (tuInfo.fModel instanceof CMarkerAnnotationModel) {
+ // CMarkerAnnotationModel model= (CMarkerAnnotationModel) tuInfo.fModel;
+ // model.setCompilationUnit(tuInfo.fCopy);
+ //}
+ //if (tuInfo.fModel != null)
+ // tuInfo.fModel.addAnnotationModelListener(fGlobalAnnotationModelListener);
+ //if (requestor instanceof IProblemRequestorExtension) {
+ // IProblemRequestorExtension extension= (IProblemRequestorExtension)requestor;
+ // extension.setIsActive(isHandlingTemporaryProblems());
+ //}
+ return tuInfo;
+ }
+
+ private void setUpSynchronization(TranslationUnitInfo cuInfo) {
+ IDocument document = cuInfo.fTextFileBuffer.getDocument();
+ IAnnotationModel model = cuInfo.fModel;
+ if (document instanceof ISynchronizable && model instanceof ISynchronizable) {
+ Object lock = ((ISynchronizable) document).getLockObject();
+ ((ISynchronizable) model).setLockObject(lock);
+ }
}
/*
- * @see AbstractDocumentProvider#doSaveDocument(IProgressMonitor, Object, IDocument, boolean)
+ * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#disposeFileInfo(java.lang.Object,
+ * org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo)
*/
- protected void doSaveDocument(IProgressMonitor monitor, Object element, IDocument document, boolean overwrite) throws CoreException {
+ protected void disposeFileInfo(Object element, FileInfo info) {
+ if (info instanceof TranslationUnitInfo) {
+ TranslationUnitInfo tuInfo = (TranslationUnitInfo) info;
+ tuInfo.fCopy.destroy();
+ //if (cuInfo.fModel != null)
+ // cuInfo.fModel.removeAnnotationModelListener(fGlobalAnnotationModelListener);
+ }
+ super.disposeFileInfo(element, info);
+ }
+
+ protected void commitFileBuffer(IProgressMonitor monitor, Object element, FileInfo fileInfo, boolean overwrite)
+ throws CoreException {
+ if (fileInfo instanceof TranslationUnitInfo) {
+ TranslationUnitInfo info = (TranslationUnitInfo)fileInfo;
- ElementInfo elementInfo= getElementInfo(element);
- if (elementInfo instanceof TranslationUnitFileInfo) {
- TranslationUnitFileInfo info= (TranslationUnitFileInfo) elementInfo;
-
- // update structure, assumes lock on info.fCopy
- info.fCopy.reconcile();
-
- ITranslationUnit original= (ITranslationUnit) info.fCopy.getOriginalElement();
- IResource resource= original.getResource();
-
- if (resource == null) {
- // underlying resource has been deleted, just recreate file, ignore the rest
- super.doSaveDocument(monitor, element, document, overwrite);
- return;
+ synchronized (info.fCopy) {
+ info.fCopy.reconcile();
}
-
- if (resource != null && !overwrite)
- checkSynchronizationState(info.fModificationStamp, resource);
-
-// if (fSavePolicy != null)
-// fSavePolicy.preSave(info.fCopy);
-
- // inform about the upcoming content change
- fireElementStateChanging(element);
+
+ //if (fSavePolicy != null)
+ // fSavePolicy.preSave(info.fCopy);
+
try {
- fIsAboutToSave= true;
- // commit working copy
- info.fCopy.commit(overwrite, monitor);
+ fIsAboutToSave = true;
+ //info.fCopy.commit(overwrite, monitor);
+ super.commitFileBuffer(monitor, info, overwrite);
} catch (CoreException x) {
// inform about the failure
fireElementStateChangeFailed(element);
@@ -297,41 +174,33 @@ public class CDocumentProvider extends FileDocumentProvider {
fireElementStateChangeFailed(element);
throw x;
} finally {
- fIsAboutToSave= false;
+ fIsAboutToSave = false;
}
-
- // If here, the dirty state of the editor will change to "not dirty".
- // Thus, the state changing flag will be reset.
-
- AbstractMarkerAnnotationModel model= (AbstractMarkerAnnotationModel) info.fModel;
- model.updateMarkers(info.fDocument);
-
- if (resource != null)
- info.setModificationStamp(computeModificationStamp(resource));
-
-// if (fSavePolicy != null) {
-// ICompilationUnit unit= fSavePolicy.postSave(original);
-// if (unit != null) {
-// IResource r= unit.getResource();
-// IMarker[] markers= r.findMarkers(IMarker.MARKER, true, IResource.DEPTH_ZERO);
-// if (markers != null && markers.length > 0) {
-// for (int i= 0; i < markers.length; i++)
-// model.updateMarker(markers[i], info.fDocument, null);
-// }
-// }
-// }
-
-
} else {
- super.doSaveDocument(monitor, element, document, overwrite);
- }
+ super.commitFileBuffer(monitor, fileInfo, overwrite);
+ }
}
- /**
- * Gets the BufferFactory.
+ /*
+ * @see org.eclipse.jdt.internal.ui.javaeditor.ICompilationUnitDocumentProvider#getWorkingCopy(java.lang.Object)
*/
- public IBufferFactory getBufferFactory() {
- return fBufferFactory;
+ public IWorkingCopy getWorkingCopy(Object element) {
+ FileInfo fileInfo = getFileInfo(element);
+ if (fileInfo instanceof TranslationUnitInfo) {
+ TranslationUnitInfo info = (TranslationUnitInfo) fileInfo;
+ return info.fCopy;
+ }
+ return null;
+ }
+
+ /*
+ * @see org.eclipse.jdt.internal.ui.javaeditor.ICompilationUnitDocumentProvider#shutdown()
+ */
+ public void shutdown() {
+ //CUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPropertyListener);
+ Iterator e = getConnectedElementsIterator();
+ while (e.hasNext())
+ disconnect(e.next());
}
/**
@@ -348,78 +217,21 @@ public class CDocumentProvider extends FileDocumentProvider {
return null;
}
- public IWorkingCopy getWorkingCopy(IEditorInput element) {
-
- ElementInfo elementInfo= getElementInfo(element);
- if (elementInfo instanceof TranslationUnitFileInfo) {
- TranslationUnitFileInfo info= (TranslationUnitFileInfo) elementInfo;
- return info.fCopy;
- }
- return null;
- }
-
- protected void initializeDocument(IDocument document) {
- if (document != null) {
- IDocumentPartitioner partitioner= CUIPlugin.getDefault().getTextTools().createDocumentPartitioner();
- partitioner.connect(document);
- document.setDocumentPartitioner(partitioner);
- }
- }
- /**
- * Saves the content of the given document to the given element.
- * This is only performed when this provider initiated the save.
- *
- * @param monitor the progress monitor
- * @param element the element to which to save
- * @param document the document to save
- * @param overwrite <code>true</code> if the save should be enforced
+ /*
+ * @see org.eclipse.jdt.internal.ui.javaeditor.ICompilationUnitDocumentProvider#saveDocumentContent(org.eclipse.core.runtime.IProgressMonitor,
+ * java.lang.Object, org.eclipse.jface.text.IDocument, boolean)
*/
- public void saveDocumentContent(IProgressMonitor monitor, Object element, IDocument document, boolean overwrite) throws CoreException {
-
+ public void saveDocumentContent(IProgressMonitor monitor, Object element, IDocument document, boolean overwrite)
+ throws CoreException {
if (!fIsAboutToSave)
return;
-
- if (element instanceof IFileEditorInput) {
- IFileEditorInput input= (IFileEditorInput) element;
- try {
- String encoding= getEncoding(element);
- if (encoding == null)
- encoding= ResourcesPlugin.getEncoding();
- InputStream stream= new ByteArrayInputStream(document.get().getBytes(encoding));
- IFile file= input.getFile();
- file.setContents(stream, overwrite, true, monitor);
- } catch (IOException x) {
- IStatus s= new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID, IStatus.OK, x.getMessage(), x);
- throw new CoreException(s);
- }
- }
+ super.saveDocument(monitor, element, document, overwrite);
}
- /**
- *
- */
- public void shutdown() {
- // TODO Auto-generated method stub
- }
-
- /**
- * @param input
- * @return
- */
- public boolean isConnected(IEditorInput input) {
- return getElementInfo(input) != null;
- }
-
- /**
- * @see org.eclipse.ui.texteditor.IDocumentProviderExtension#getStatus(Object)
+ /*
+ * @see org.eclipse.jdt.internal.ui.javaeditor.ICompilationUnitDocumentProvider#createLineTracker(java.lang.Object)
*/
- public IStatus getStatus(Object element) {
- if (element instanceof IEditorInputDelegate) {
- if (((IEditorInputDelegate) element).getDelegate() != null)
- return super.getStatus(((IEditorInputDelegate) element).getDelegate());
- else
- return new Status(IStatus.INFO,CUIPlugin.getPluginId(),0,"",null); //$NON-NLS-1$
- }
- return super.getStatus(element);
+ public ILineTracker createLineTracker(Object element) {
+ return new DefaultLineTracker();
}
-}
+} \ No newline at end of file
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java
index f77fb9b67dd..c93603d0af3 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java
@@ -73,13 +73,11 @@ import org.eclipse.ui.IEditorActionBarContributor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IPartService;
-import org.eclipse.ui.IStorageEditorInput;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ActionGroup;
import org.eclipse.ui.editors.text.TextEditor;
-import org.eclipse.ui.editors.text.TextFileDocumentProvider;
import org.eclipse.ui.part.EditorActionBarContributor;
import org.eclipse.ui.part.IShowInSource;
import org.eclipse.ui.part.ShowInContext;
@@ -185,11 +183,6 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
* @see AbstractTextEditor#doSetInput(IEditorInput)
*/
protected void doSetInput(IEditorInput input) throws CoreException {
- // If the file is not a Storage or an IFile use a different
- // DocumentProvider. TODO: Rewrite CDocuemtnProviver to handle this.
- if (!(input instanceof IStorageEditorInput || input instanceof IFileEditorInput)) {
- setDocumentProvider(new TextFileDocumentProvider(null));
- }
super.doSetInput(input);
fCEditorErrorTickUpdater.setAnnotationModel(getDocumentProvider().getAnnotationModel(input));
setOutlinePageInput(fOutlinePage, input);
@@ -227,6 +220,7 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
fOutlinePage = new CContentOutlinePage(this);
fOutlinePage.addSelectionChangedListener(this);
}
+ setOutlinePageInput(fOutlinePage, getEditorInput());
return fOutlinePage;
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CStorageDocumentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CStorageDocumentProvider.java
new file mode 100644
index 00000000000..63883f15ca7
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CStorageDocumentProvider.java
@@ -0,0 +1,41 @@
+/**********************************************************************
+ * Copyright (c) 2002,2003,2004 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * QNX Software Systems - Initial API and implementation
+ ***********************************************************************/
+
+package org.eclipse.cdt.internal.ui.editor;
+
+import org.eclipse.cdt.internal.ui.text.CTextTools;
+import org.eclipse.cdt.ui.CUIPlugin;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.ui.editors.text.StorageDocumentProvider;
+
+/**
+ * CStorageDocumentProvider
+ */
+public class CStorageDocumentProvider extends StorageDocumentProvider {
+
+ /**
+ *
+ */
+ public CStorageDocumentProvider() {
+ super();
+ }
+
+ /*
+ * @see org.eclipse.ui.editors.text.StorageDocumentProvider#setupDocument(java.lang.Object, org.eclipse.jface.text.IDocument)
+ */
+ protected void setupDocument(Object element, IDocument document) {
+ if (document != null) {
+ CTextTools tools= CUIPlugin.getDefault().getTextTools();
+ tools.setupCDocument(document);
+ }
+ }
+
+}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CustomBufferFactory.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CustomBufferFactory.java
new file mode 100644
index 00000000000..d402359ed03
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CustomBufferFactory.java
@@ -0,0 +1,51 @@
+/**********************************************************************
+ * Copyright (c) 2002,2003,2004 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * QNX Software Systems - Initial API and implementation
+ ***********************************************************************/
+
+package org.eclipse.cdt.internal.ui.editor;
+
+import org.eclipse.cdt.core.model.IBuffer;
+import org.eclipse.cdt.core.model.IOpenable;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.cdt.core.model.IWorkingCopy;
+import org.eclipse.cdt.internal.core.model.IBufferFactory;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+
+/**
+ * CustomBufferFactory
+ */
+public class CustomBufferFactory implements IBufferFactory {
+ /**
+ *
+ */
+ public CustomBufferFactory() {
+ super();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.model.IBufferFactory#createBuffer(org.eclipse.cdt.core.model.IOpenable)
+ */
+ public IBuffer createBuffer(IOpenable owner) {
+ if (owner instanceof IWorkingCopy) {
+
+ IWorkingCopy unit= (IWorkingCopy) owner;
+ ITranslationUnit original= (ITranslationUnit) unit.getOriginalElement();
+ IResource resource= original.getResource();
+ if (resource instanceof IFile) {
+ IFile fFile = (IFile)resource;
+ DocumentAdapter adapter= new DocumentAdapter(owner, fFile);
+ return adapter;
+ }
+
+ }
+ return DocumentAdapter.NULL;
+ }
+}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/DocumentAdapter.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/DocumentAdapter.java
index 2080cc5f831..b92046d4b17 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/DocumentAdapter.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/DocumentAdapter.java
@@ -13,24 +13,32 @@ package org.eclipse.cdt.internal.ui.editor;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import org.eclipse.cdt.core.model.BufferChangedEvent;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.IBuffer;
import org.eclipse.cdt.core.model.IBufferChangedListener;
import org.eclipse.cdt.core.model.IOpenable;
+import org.eclipse.cdt.ui.CUIPlugin;
+import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.filebuffers.ITextFileBuffer;
+import org.eclipse.core.filebuffers.ITextFileBufferManager;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.DefaultLineTracker;
import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentListener;
-import org.eclipse.jface.text.ILineTracker;
-import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.util.Assert;
import org.eclipse.swt.widgets.Display;
@@ -114,14 +122,7 @@ public class DocumentAdapter implements IBuffer, IDocumentListener {
/** NULL implementing <code>IBuffer</code> */
public final static IBuffer NULL= new NullBuffer();
- /*
- * @see IBuffer#addBufferChangedListener(IBufferChangedListener)
- */
- public void addBufferChangedListener(IBufferChangedListener listener) {
- Assert.isNotNull(listener);
- if (!fBufferListeners.contains(listener))
- fBufferListeners.add(listener);
- }
+
/**
* Executes a document set content call in the ui thread.
*/
@@ -163,47 +164,52 @@ public class DocumentAdapter implements IBuffer, IDocumentListener {
}
};
+ private static final boolean DEBUG_LINE_DELIMITERS= true;
+
private IOpenable fOwner;
- IDocument fDocument;
+ private IFile fFile;
+ private ITextFileBuffer fTextFileBuffer;
+ private IDocument fDocument;
+
private DocumentSetCommand fSetCmd= new DocumentSetCommand();
private DocumentReplaceCommand fReplaceCmd= new DocumentReplaceCommand();
-
- private Object fProviderKey;
- private CDocumentProvider fProvider;
- private String fLineDelimiter;
- private ILineTracker fLineTracker;
-
+
+ private Set fLegalLineDelimiters;
+
private List fBufferListeners= new ArrayList(3);
-
private IStatus fStatus;
- public DocumentAdapter(IOpenable owner, IDocument document, ILineTracker lineTracker, CDocumentProvider provider, Object providerKey) {
+ public DocumentAdapter(IOpenable owner, IFile file) {
+ fOwner= owner;
+ fFile= file;
- Assert.isNotNull(document);
- Assert.isNotNull(lineTracker);
-
- fOwner= owner;
- fDocument= document;
- fLineTracker= lineTracker;
- fProvider= provider;
- fProviderKey= providerKey;
-
- fDocument.addPrenotifiedDocumentListener(this);
+ initialize();
+ }
+ private void initialize() {
+ ITextFileBufferManager manager= FileBuffers.getTextFileBufferManager();
+ IPath location= fFile.getFullPath();
+ try {
+ manager.connect(location, new NullProgressMonitor());
+ fTextFileBuffer= manager.getTextFileBuffer(location);
+ fDocument= fTextFileBuffer.getDocument();
+ } catch (CoreException x) {
+ fStatus= x.getStatus();
+ fDocument= manager.createEmptyDocument(location);
}
- /**
- * Sets the status of this document adapter.
- */
- public void setStatus(IStatus status) {
- fStatus= status;
+ fDocument.addPrenotifiedDocumentListener(this);
}
-
+
/**
* Returns the status of this document adapter.
*/
public IStatus getStatus() {
- return fStatus;
+ if (fStatus != null)
+ return fStatus;
+ if (fTextFileBuffer != null)
+ return fTextFileBuffer.getStatus();
+ return null;
}
/**
@@ -214,78 +220,25 @@ public class DocumentAdapter implements IBuffer, IDocumentListener {
public IDocument getDocument() {
return fDocument;
}
- /**
- * Returns the line delimiter of this buffer. As a document has a set of
- * valid line delimiters, this set must be reduced to size 1.
- */
- protected String getLineDelimiter() {
-
- if (fLineDelimiter == null) {
-
- try {
- fLineDelimiter= fDocument.getLineDelimiter(0);
- } catch (BadLocationException x) {
- }
-
- if (fLineDelimiter == null) {
- /*
- * Follow up fix for: 1GF5UU0: ITPJUI:WIN2000 - "Organize Imports" in java editor inserts lines in wrong format
- * The line delimiter must always be a legal document line delimiter.
- */
- String sysLineDelimiter= System.getProperty("line.separator"); //$NON-NLS-1$
- String[] delimiters= fDocument.getLegalLineDelimiters();
- Assert.isTrue(delimiters.length > 0);
- for (int i= 0; i < delimiters.length; i++) {
- if (delimiters[i].equals(sysLineDelimiter)) {
- fLineDelimiter= sysLineDelimiter;
- break;
- }
- }
-
- if (fLineDelimiter == null) {
- // system line delimiter is not a legal document line delimiter
- fLineDelimiter= delimiters[0];
- }
- }
- }
-
- return fLineDelimiter;
- }
- /**
- * Converts the given string to the line delimiter of this buffer.
- * This method is <code>public</code> for test purposes only.
+ /*
+ * @see IBuffer#addBufferChangedListener(IBufferChangedListener)
*/
- public String normalize(String text) {
- fLineTracker.set(text);
-
- int lines= fLineTracker.getNumberOfLines();
- if (lines <= 1)
- return text;
-
- StringBuffer buffer= new StringBuffer(text);
-
- try {
- IRegion previous= fLineTracker.getLineInformation(0);
- for (int i= 1; i < lines; i++) {
- int lastLineEnd= previous.getOffset() + previous.getLength();
- int lineStart= fLineTracker.getLineInformation(i).getOffset();
- fLineTracker.replace(lastLineEnd, lineStart - lastLineEnd, getLineDelimiter());
- buffer.replace(lastLineEnd, lineStart, getLineDelimiter());
- previous= fLineTracker.getLineInformation(i);
- }
-
- // last line
- String delimiter= fLineTracker.getLineDelimiter(lines -1);
- if (delimiter != null && delimiter.length() > 0)
- buffer.replace(previous.getOffset() + previous.getLength(), buffer.length(), getLineDelimiter());
-
- return buffer.toString();
- } catch (BadLocationException x) {
- }
-
- return text;
+ public void addBufferChangedListener(IBufferChangedListener listener) {
+ Assert.isNotNull(listener);
+ if (!fBufferListeners.contains(listener))
+ fBufferListeners.add(listener);
}
+
+ /*
+ * @see IBuffer#removeBufferChangedListener(IBufferChangedListener)
+ */
+ public void removeBufferChangedListener(IBufferChangedListener listener) {
+ Assert.isNotNull(listener);
+ fBufferListeners.remove(listener);
+ }
+
+
/**
* @see org.eclipse.cdt.internal.core.model.IBuffer#append(char)
*/
@@ -297,7 +250,10 @@ public class DocumentAdapter implements IBuffer, IDocumentListener {
* @see org.eclipse.cdt.internal.core.model.IBuffer#append(java.lang.String)
*/
public void append(String text) {
- fReplaceCmd.replace(fDocument.getLength(), 0, normalize(text));
+ if (DEBUG_LINE_DELIMITERS) {
+ validateLineDelimiters(text);
+ }
+ fReplaceCmd.replace(fDocument.getLength(), 0, text);
}
@@ -305,6 +261,7 @@ public class DocumentAdapter implements IBuffer, IDocumentListener {
* @see org.eclipse.cdt.internal.core.model.IBuffer#close()
*/
public void close() {
+
if (isClosed())
return;
@@ -312,8 +269,18 @@ public class DocumentAdapter implements IBuffer, IDocumentListener {
fDocument= null;
d.removePrenotifiedDocumentListener(this);
+ if (fTextFileBuffer != null) {
+ ITextFileBufferManager manager= FileBuffers.getTextFileBufferManager();
+ try {
+ manager.disconnect(fTextFileBuffer.getLocation(), new NullProgressMonitor());
+ } catch (CoreException x) {
+ // ignore
+ }
+ fTextFileBuffer= null;
+ }
+
fireBufferChanged(new BufferChangedEvent(this, 0, 0, null));
- fBufferListeners.clear();
+ fBufferListeners.clear();
}
/**
@@ -371,16 +338,14 @@ public class DocumentAdapter implements IBuffer, IDocumentListener {
* @see org.eclipse.cdt.internal.core.model.IBuffer#getUnderlyingResource()
*/
public IResource getUnderlyingResource() {
- //return null;
- return fProvider != null ? fProvider.getUnderlyingResource(fProviderKey) : null;
+ return fFile;
}
/**
* @see org.eclipse.cdt.internal.core.model.IBuffer#hasUnsavedChanges()
*/
public boolean hasUnsavedChanges() {
- //return false;
- return fProvider != null ? fProvider.canSaveDocument(fProviderKey) : false;
+ return fTextFileBuffer != null ? fTextFileBuffer.isDirty() : false;
}
/**
@@ -394,18 +359,10 @@ public class DocumentAdapter implements IBuffer, IDocumentListener {
* @see org.eclipse.cdt.internal.core.model.IBuffer#isReadOnly()
*/
public boolean isReadOnly() {
- //return false;
IResource resource= getUnderlyingResource();
return resource == null ? true : resource.isReadOnly();
}
- /*
- * @see IBuffer#removeBufferChangedListener(IBufferChangedListener)
- */
- public void removeBufferChangedListener(IBufferChangedListener listener) {
- Assert.isNotNull(listener);
- fBufferListeners.remove(listener);
- }
/**
* @see org.eclipse.cdt.internal.core.model.IBuffer#replace(int, int, char)
*/
@@ -417,20 +374,22 @@ public class DocumentAdapter implements IBuffer, IDocumentListener {
* @see org.eclipse.cdt.internal.core.model.IBuffer#replace(int, int, java.lang.String)
*/
public void replace(int position, int length, String text) {
- fReplaceCmd.replace(position, length, normalize(text));
+ if (DEBUG_LINE_DELIMITERS) {
+ validateLineDelimiters(text);
+ }
+ fReplaceCmd.replace(position, length, text);
}
/**
* @see org.eclipse.cdt.internal.core.model.IBuffer#save(org.eclipse.core.runtime.IProgressMonitor, boolean)
*/
public void save(IProgressMonitor progress, boolean force) throws CModelException {
- if (fProvider != null) {
- try {
- fProvider.saveDocumentContent(progress, fProviderKey, fDocument, force);
- } catch (CoreException e) {
- throw new CModelException(e);
- }
- }
+ try {
+ if (fTextFileBuffer != null)
+ fTextFileBuffer.commit(progress, force);
+ } catch (CoreException e) {
+ throw new CModelException(e);
+ }
}
/**
@@ -452,15 +411,64 @@ public class DocumentAdapter implements IBuffer, IDocumentListener {
fSetCmd.set(""); //$NON-NLS-1$
} else {
-
// set only if different
- String newContents= normalize(contents);
- int newLength= newContents.length();
+ if (DEBUG_LINE_DELIMITERS) {
+ validateLineDelimiters(contents);
+ }
+
+ int newLength= contents.length();
+ if (oldLength != newLength || !contents.equals(fDocument.get()))
+ fSetCmd.set(contents);
- if (oldLength != newLength || !newContents.equals(fDocument.get()))
- fSetCmd.set(newContents);
}
}
+
+ private void validateLineDelimiters(String contents) {
+
+ if (fLegalLineDelimiters == null) {
+ // collect all line delimiters in the document
+ HashSet existingDelimiters= new HashSet();
+
+ for (int i= fDocument.getNumberOfLines() - 1; i >= 0; i-- ) {
+ try {
+ String curr= fDocument.getLineDelimiter(i);
+ if (curr != null) {
+ existingDelimiters.add(curr);
+ }
+ } catch (BadLocationException e) {
+ CUIPlugin.getDefault().log(e);
+ }
+ }
+ if (existingDelimiters.isEmpty()) {
+ return; // first insertion of a line delimiter: no test
+ }
+ fLegalLineDelimiters= existingDelimiters;
+
+ }
+
+ DefaultLineTracker tracker= new DefaultLineTracker();
+ tracker.set(contents);
+
+ int lines= tracker.getNumberOfLines();
+ if (lines <= 1)
+ return;
+
+ for (int i= 0; i < lines; i++) {
+ try {
+ String curr= tracker.getLineDelimiter(i);
+ if (curr != null && !fLegalLineDelimiters.contains(curr)) {
+ StringBuffer buf= new StringBuffer("New line delimiter added to new code: "); //$NON-NLS-1$
+ for (int k= 0; k < curr.length(); k++) {
+ buf.append(String.valueOf((int) curr.charAt(k)));
+ }
+ CUIPlugin.getDefault().log(new Exception(buf.toString()));
+ }
+ } catch (BadLocationException e) {
+ CUIPlugin.getDefault().log(e);
+ }
+ }
+ }
+
/*
* @see IDocumentListener#documentAboutToBeChanged(DocumentEvent)
*/
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ITranslationUnitEditorInput.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ITranslationUnitEditorInput.java
new file mode 100644
index 00000000000..56522f3f0f6
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ITranslationUnitEditorInput.java
@@ -0,0 +1,25 @@
+/**********************************************************************
+ * Copyright (c) 2002,2003,2004 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * QNX Software Systems - Initial API and implementation
+ ***********************************************************************/
+
+package org.eclipse.cdt.internal.ui.editor;
+
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.ui.IStorageEditorInput;
+import org.eclipse.ui.editors.text.ILocationProvider;
+
+/**
+ * ITranslationUnitEditorInput
+ */
+public interface ITranslationUnitEditorInput extends IStorageEditorInput, ILocationProvider {
+
+ ITranslationUnit getTranslationUnit();
+
+}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/OpenIncludeAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/OpenIncludeAction.java
index bce4648a86b..b846bc019ee 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/OpenIncludeAction.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/OpenIncludeAction.java
@@ -11,10 +11,12 @@ import java.util.List;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.model.CModelException;
+import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
-import org.eclipse.cdt.core.resources.FileStorage;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.internal.ui.dialogs.ElementListSelectionDialog;
import org.eclipse.cdt.internal.ui.util.EditorUtility;
@@ -107,8 +109,11 @@ public class OpenIncludeAction extends Action {
if (file != null) {
EditorUtility.openInEditor(file);
} else {
- FileStorage storage = new FileStorage(null, fileToOpen);
- EditorUtility.openInEditor(storage);
+ ICProject cproject = include.getCProject();
+ ITranslationUnit unit = CoreModel.getDefault().createTranslationUnitFrom(cproject, fileToOpen);
+ if (unit != null) {
+ EditorUtility.openInEditor(unit);
+ }
}
}
} catch (CModelException e) {
@@ -160,7 +165,7 @@ public class OpenIncludeAction extends Action {
}
};
- ElementListSelectionDialog dialog= new ElementListSelectionDialog(CUIPlugin.getDefault().getActiveWorkbenchShell(), renderer, false, false);
+ ElementListSelectionDialog dialog= new ElementListSelectionDialog(CUIPlugin.getActiveWorkbenchShell(), renderer, false, false);
dialog.setTitle(CUIPlugin.getResourceString(DIALOG_TITLE));
dialog.setMessage(CUIPlugin.getResourceString(DIALOG_MESSAGE));
dialog.setElements(filesFound);
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/WorkingCopyManager.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/WorkingCopyManager.java
index d5be08fbb99..e3baf737e45 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/WorkingCopyManager.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/WorkingCopyManager.java
@@ -88,7 +88,7 @@ public class WorkingCopyManager implements IWorkingCopyManager, IWorkingCopyMana
* @see org.eclipse.cdt.internal.ui.editor.IWorkingCopyManagerExtension#setWorkingCopy(org.eclipse.ui.IEditorInput, org.eclipse.cdt.core.model.ITranslationUnit)
*/
public void setWorkingCopy(IEditorInput input, IWorkingCopy workingCopy) {
- if (fDocumentProvider.isConnected(input)) {
+ if (fDocumentProvider.getDocument(input) != null) {
if (fMap == null)
fMap= new HashMap();
fMap.put(input, workingCopy);
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CTextTools.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CTextTools.java
index e6fe8426818..92df676acdc 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CTextTools.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CTextTools.java
@@ -11,6 +11,8 @@ import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentExtension3;
import org.eclipse.jface.text.IDocumentPartitioner;
import org.eclipse.jface.text.rules.DefaultPartitioner;
import org.eclipse.jface.text.rules.IPartitionTokenScanner;
@@ -237,4 +239,33 @@ public class CTextTools {
if (fStringScanner.affectsBehavior(event))
fStringScanner.adaptToPreferenceChange(event);
}
+
+ /**
+ * Sets up the document partitioner for the given document for the given partitioning.
+ *
+ * @param document the document to be set up
+ * @param partitioning the document partitioning
+ * @since 3.0
+ */
+ public void setupCDocumentPartitioner(IDocument document, String partitioning) {
+ IDocumentPartitioner partitioner= createDocumentPartitioner();
+ if (document instanceof IDocumentExtension3) {
+ IDocumentExtension3 extension3= (IDocumentExtension3) document;
+ extension3.setDocumentPartitioner(partitioning, partitioner);
+ } else {
+ document.setDocumentPartitioner(partitioner);
+ }
+ partitioner.connect(document);
+ }
+
+ /**
+ * Sets up the given document for the default partitioning.
+ *
+ * @param document the document to be set up
+ * @since 3.0
+ */
+ public void setupCDocument(IDocument document) {
+ setupCDocumentPartitioner(document, IDocumentExtension3.DEFAULT_PARTITIONING);
+ }
+
} \ No newline at end of file
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 43ed9711f55..424216bbb9d 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
@@ -158,7 +158,7 @@ public class EditorUtility {
if (resource instanceof IFile) {
return new FileEditorInput((IFile) resource);
} else {
- return new ExternalEditorInput(getStorage(unit));
+ return new ExternalEditorInput(unit, getStorage(unit));
}
}
@@ -220,7 +220,7 @@ public class EditorUtility {
if (cu.isWorkingCopy())
return cu;
- return (ITranslationUnit)cu.findSharedWorkingCopy(CUIPlugin.getBufferFactory());
+ return (ITranslationUnit)cu.findSharedWorkingCopy(CUIPlugin.getDefault().getBufferFactory());
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/ExceptionHandler.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/ExceptionHandler.java
index 11dfbd084e4..0950245da02 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/ExceptionHandler.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/ExceptionHandler.java
@@ -55,7 +55,7 @@ public class ExceptionHandler {
* @param message message to be displayed by the dialog window
*/
public static void handle(CoreException e, String title, String message) {
- handle(e, CUIPlugin.getDefault().getActiveWorkbenchShell(), title, message);
+ handle(e, CUIPlugin.getActiveWorkbenchShell(), title, message);
}
/**
@@ -79,7 +79,7 @@ public class ExceptionHandler {
* @param message message to be displayed by the dialog window
*/
public static void handle(InvocationTargetException e, String title, String message) {
- handle(e, CUIPlugin.getDefault().getActiveWorkbenchShell(), title, message);
+ handle(e, CUIPlugin.getActiveWorkbenchShell(), title, message);
}
/**
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/ExternalEditorInput.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/ExternalEditorInput.java
index 34ba1e29312..c4ef4a12657 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/ExternalEditorInput.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/util/ExternalEditorInput.java
@@ -7,20 +7,25 @@ package org.eclipse.cdt.internal.ui.util;
import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.cdt.internal.ui.editor.ITranslationUnitEditorInput;
import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.ui.IEditorRegistry;
import org.eclipse.ui.IPersistableElement;
-import org.eclipse.ui.IStorageEditorInput;
import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.editors.text.ILocationProvider;
/**
* An EditorInput for a JarEntryFile.
*/
-public class ExternalEditorInput implements IStorageEditorInput {
+public class ExternalEditorInput implements ITranslationUnitEditorInput {
- IStorage externalFile;
+ private IStorage externalFile;
+ private ITranslationUnit unit;
/*
*/
@@ -45,7 +50,9 @@ public class ExternalEditorInput implements IStorageEditorInput {
* @see IAdaptable#getAdapter(Class)
*/
public Object getAdapter(Class adapter) {
- return null;
+ if (ILocationProvider.class.equals(adapter))
+ return this;
+ return Platform.getAdapterManager().getAdapter(this, adapter);
}
/*
@@ -101,4 +108,23 @@ public class ExternalEditorInput implements IStorageEditorInput {
public ExternalEditorInput(IStorage exFile) {
externalFile = exFile;
}
+
+ public ExternalEditorInput(ITranslationUnit unit, IStorage exFile) {
+ this(exFile);
+ this.unit = unit;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.ui.editor.ITranslationUnitEditorInput#getTranslationUnit()
+ */
+ public ITranslationUnit getTranslationUnit() {
+ return unit;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.editors.text.ILocationProvider#getPath(java.lang.Object)
+ */
+ public IPath getPath(Object element) {
+ return externalFile.getFullPath();
+ }
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CUIPlugin.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CUIPlugin.java
index 7d64a07d861..f7f2c5ab30e 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CUIPlugin.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CUIPlugin.java
@@ -34,6 +34,7 @@ import org.eclipse.cdt.internal.ui.ResourceAdapterFactory;
import org.eclipse.cdt.internal.ui.buildconsole.BuildConsoleManager;
import org.eclipse.cdt.internal.ui.cview.CView;
import org.eclipse.cdt.internal.ui.editor.CDocumentProvider;
+import org.eclipse.cdt.internal.ui.editor.CustomBufferFactory;
import org.eclipse.cdt.internal.ui.editor.SharedTextColors;
import org.eclipse.cdt.internal.ui.editor.WorkingCopyManager;
import org.eclipse.cdt.internal.ui.editor.asm.AsmTextTools;
@@ -110,15 +111,14 @@ public class CUIPlugin extends AbstractUIPlugin {
}
}
- public static IBufferFactory getBufferFactory() {
- CDocumentProvider provider= CUIPlugin.getDefault().getDocumentProvider();
- if (provider != null)
- return provider.getBufferFactory();
- return null;
+ public synchronized IBufferFactory getBufferFactory() {
+ if (fBufferFactory == null)
+ fBufferFactory= new CustomBufferFactory();
+ return fBufferFactory;
}
-
+
public static IWorkingCopy[] getSharedWorkingCopies() {
- return CCorePlugin.getSharedWorkingCopies(getBufferFactory());
+ return CCorePlugin.getSharedWorkingCopies(getDefault().getBufferFactory());
}
public static String getResourceString(String key) {
@@ -217,6 +217,7 @@ public class CUIPlugin extends AbstractUIPlugin {
private CoreModel fCoreModel;
private CDocumentProvider fDocumentProvider;
+ private IBufferFactory fBufferFactory;
private WorkingCopyManager fWorkingCopyManager;
private CTextTools fTextTools;
private AsmTextTools fAsmTextTools;
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java
index 4cb24f50b6c..5c6532fd0cb 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java
@@ -587,7 +587,7 @@ public class NewClassWizardPage extends WizardPage implements Listener {
if(parentHeaderTU != null){
String header = constructHeaderFileContent(parentHeaderTU, lineDelimiter);
- IWorkingCopy headerWC = parentHeaderTU.getSharedWorkingCopy(null, CUIPlugin.getDefault().getDocumentProvider().getBufferFactory());
+ IWorkingCopy headerWC = parentHeaderTU.getSharedWorkingCopy(null, CUIPlugin.getDefault().getBufferFactory());
headerWC.getBuffer().append(header);
synchronized(headerWC) {
headerWC.reconcile();
@@ -599,7 +599,7 @@ public class NewClassWizardPage extends WizardPage implements Listener {
}
if(parentBodyTU != null){
String body = constructBodyFileContent(lineDelimiter);
- IWorkingCopy bodyWC = parentBodyTU.getSharedWorkingCopy(null, CUIPlugin.getDefault().getDocumentProvider().getBufferFactory());
+ IWorkingCopy bodyWC = parentBodyTU.getSharedWorkingCopy(null, CUIPlugin.getDefault().getBufferFactory());
bodyWC.getBuffer().append(body);
synchronized(bodyWC){
bodyWC.reconcile();

Back to the top