mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
new icons and improvement on the MakefileEditor
by using a working copy to maintain the parse makefile
This commit is contained in:
parent
0de973e3c5
commit
eaab8181d0
13 changed files with 540 additions and 62 deletions
BIN
build/org.eclipse.cdt.make.ui/icons/obj16/command_obj.gif
Normal file
BIN
build/org.eclipse.cdt.make.ui/icons/obj16/command_obj.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 125 B |
BIN
build/org.eclipse.cdt.make.ui/icons/obj16/relation_obj.gif
Normal file
BIN
build/org.eclipse.cdt.make.ui/icons/obj16/relation_obj.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 133 B |
Binary file not shown.
Before Width: | Height: | Size: 169 B After Width: | Height: | Size: 135 B |
|
@ -54,10 +54,19 @@ public class MakeUIImages {
|
||||||
|
|
||||||
public static final String IMG_OBJS_MAKEFILE_MACRO = NAME_PREFIX + "macro_obj.gif"; //$NON-NLS-1$
|
public static final String IMG_OBJS_MAKEFILE_MACRO = NAME_PREFIX + "macro_obj.gif"; //$NON-NLS-1$
|
||||||
public static final ImageDescriptor DESC_MAKEFILE_MACRO = createManaged(OBJ, IMG_OBJS_MAKEFILE_MACRO);
|
public static final ImageDescriptor DESC_MAKEFILE_MACRO = createManaged(OBJ, IMG_OBJS_MAKEFILE_MACRO);
|
||||||
|
|
||||||
public static final String IMG_OBJS_MAKEFILE_TARGET_RULE = NAME_PREFIX + "trule_obj.gif"; //$NON-NLS-1$
|
public static final String IMG_OBJS_MAKEFILE_TARGET_RULE = NAME_PREFIX + "trule_obj.gif"; //$NON-NLS-1$
|
||||||
public static final ImageDescriptor DESC_MAKEFILE_TARGET_RULE = createManaged(OBJ, IMG_OBJS_MAKEFILE_TARGET_RULE);
|
public static final ImageDescriptor DESC_MAKEFILE_TARGET_RULE = createManaged(OBJ, IMG_OBJS_MAKEFILE_TARGET_RULE);
|
||||||
|
|
||||||
public static final String IMG_OBJS_MAKEFILE_INFERENCE_RULE = NAME_PREFIX + "irule_obj.gif"; //$NON-NLS-1$
|
public static final String IMG_OBJS_MAKEFILE_INFERENCE_RULE = NAME_PREFIX + "irule_obj.gif"; //$NON-NLS-1$
|
||||||
public static final ImageDescriptor DESC_MAKEFILE_INFERENCE_RULE = createManaged(OBJ, IMG_OBJS_MAKEFILE_INFERENCE_RULE);
|
public static final ImageDescriptor DESC_MAKEFILE_INFERENCE_RULE = createManaged(OBJ, IMG_OBJS_MAKEFILE_INFERENCE_RULE);
|
||||||
|
|
||||||
|
public static final String IMG_OBJS_MAKEFILE_RELATION = NAME_PREFIX + "relation_obj.gif"; //$NON-NLS-1$
|
||||||
|
public static final ImageDescriptor DESC_MAKEFILE_RELATION = createManaged(OBJ, IMG_OBJS_MAKEFILE_RELATION);
|
||||||
|
|
||||||
|
public static final String IMG_OBJS_MAKEFILE_COMMAND = NAME_PREFIX + "command_obj.gif"; //$NON-NLS-1$
|
||||||
|
public static final ImageDescriptor DESC_MAKEFILE_COMMAND = createManaged(OBJ, IMG_OBJS_MAKEFILE_COMMAND);
|
||||||
|
|
||||||
public static final String IMG_TOOLS_MAKEFILE_SEGMENT_EDIT= NAME_PREFIX + "segment_edit.gif";
|
public static final String IMG_TOOLS_MAKEFILE_SEGMENT_EDIT= NAME_PREFIX + "segment_edit.gif";
|
||||||
|
|
||||||
private static ImageDescriptor createManaged(String prefix, String name) {
|
private static ImageDescriptor createManaged(String prefix, String name) {
|
||||||
|
|
|
@ -4,6 +4,10 @@ import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.MissingResourceException;
|
import java.util.MissingResourceException;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.internal.ui.editor.IMakefileDocumentProvider;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.editor.MakefileDocumentProvider;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.editor.WorkingCopyManager;
|
||||||
|
import org.eclipse.cdt.make.ui.IWorkingCopyManager;
|
||||||
import org.eclipse.cdt.make.ui.actions.UpdateMakeProjectAction;
|
import org.eclipse.cdt.make.ui.actions.UpdateMakeProjectAction;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IWorkspace;
|
import org.eclipse.core.resources.IWorkspace;
|
||||||
|
@ -30,6 +34,9 @@ public class MakeUIPlugin extends AbstractUIPlugin implements IStartup {
|
||||||
//Resource bundle.
|
//Resource bundle.
|
||||||
private ResourceBundle resourceBundle;
|
private ResourceBundle resourceBundle;
|
||||||
|
|
||||||
|
private IWorkingCopyManager fWorkingCopyManager;
|
||||||
|
private IMakefileDocumentProvider fMakefileDocumentProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The constructor.
|
* The constructor.
|
||||||
*/
|
*/
|
||||||
|
@ -215,4 +222,28 @@ public class MakeUIPlugin extends AbstractUIPlugin implements IStartup {
|
||||||
return windows[0].getShell();
|
return windows[0].getShell();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized IMakefileDocumentProvider getMakefileDocumentProvider() {
|
||||||
|
if (fMakefileDocumentProvider == null) {
|
||||||
|
fMakefileDocumentProvider= new MakefileDocumentProvider();
|
||||||
|
}
|
||||||
|
return fMakefileDocumentProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized IWorkingCopyManager getWorkingCopyManager() {
|
||||||
|
if (fWorkingCopyManager == null) {
|
||||||
|
IMakefileDocumentProvider provider= getMakefileDocumentProvider();
|
||||||
|
fWorkingCopyManager= new WorkingCopyManager(provider);
|
||||||
|
}
|
||||||
|
return fWorkingCopyManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void shutdown() throws CoreException {
|
||||||
|
super.shutdown();
|
||||||
|
if (fWorkingCopyManager != null) {
|
||||||
|
fWorkingCopyManager.shutdown();
|
||||||
|
fWorkingCopyManager= null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.make.internal.ui.editor;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.makefile.IMakefile;
|
||||||
|
import org.eclipse.ui.texteditor.IDocumentProvider;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
public interface IMakefileDocumentProvider extends IDocumentProvider {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shuts down this provider.
|
||||||
|
*/
|
||||||
|
void shutdown();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the working copy for the given element.
|
||||||
|
*
|
||||||
|
* @param element the element
|
||||||
|
* @return the working copy for the given element
|
||||||
|
*/
|
||||||
|
IMakefile getWorkingCopy(Object element);
|
||||||
|
|
||||||
|
}
|
|
@ -11,17 +11,22 @@
|
||||||
package org.eclipse.cdt.make.internal.ui.editor;
|
package org.eclipse.cdt.make.internal.ui.editor;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.makefile.ICommand;
|
||||||
|
import org.eclipse.cdt.make.core.makefile.IComment;
|
||||||
|
import org.eclipse.cdt.make.core.makefile.IEmptyLine;
|
||||||
import org.eclipse.cdt.make.core.makefile.IInferenceRule;
|
import org.eclipse.cdt.make.core.makefile.IInferenceRule;
|
||||||
import org.eclipse.cdt.make.core.makefile.IMacroDefinition;
|
import org.eclipse.cdt.make.core.makefile.IMacroDefinition;
|
||||||
import org.eclipse.cdt.make.core.makefile.IMakefile;
|
import org.eclipse.cdt.make.core.makefile.IMakefile;
|
||||||
|
import org.eclipse.cdt.make.core.makefile.IParent;
|
||||||
import org.eclipse.cdt.make.core.makefile.IRule;
|
import org.eclipse.cdt.make.core.makefile.IRule;
|
||||||
import org.eclipse.cdt.make.core.makefile.IStatement;
|
import org.eclipse.cdt.make.core.makefile.IDirective;
|
||||||
import org.eclipse.cdt.make.core.makefile.ITargetRule;
|
import org.eclipse.cdt.make.core.makefile.ITargetRule;
|
||||||
import org.eclipse.cdt.make.internal.core.makefile.NullMakefile;
|
import org.eclipse.cdt.make.internal.core.makefile.NullMakefile;
|
||||||
import org.eclipse.cdt.make.internal.ui.MakeUIImages;
|
import org.eclipse.cdt.make.internal.ui.MakeUIImages;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
||||||
|
import org.eclipse.cdt.make.ui.IWorkingCopyManager;
|
||||||
import org.eclipse.jface.text.BadLocationException;
|
import org.eclipse.jface.text.BadLocationException;
|
||||||
import org.eclipse.jface.text.IDocument;
|
import org.eclipse.jface.text.IDocument;
|
||||||
import org.eclipse.jface.viewers.ILabelProvider;
|
import org.eclipse.jface.viewers.ILabelProvider;
|
||||||
|
@ -35,7 +40,7 @@ import org.eclipse.jface.viewers.Viewer;
|
||||||
import org.eclipse.swt.graphics.Image;
|
import org.eclipse.swt.graphics.Image;
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
import org.eclipse.swt.widgets.Control;
|
import org.eclipse.swt.widgets.Control;
|
||||||
import org.eclipse.ui.texteditor.IDocumentProvider;
|
import org.eclipse.ui.IEditorInput;
|
||||||
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
|
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
|
||||||
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
|
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
|
||||||
|
|
||||||
|
@ -59,6 +64,8 @@ public class MakefileContentOutlinePage extends ContentOutlinePage implements IC
|
||||||
public Object[] getChildren(Object element) {
|
public Object[] getChildren(Object element) {
|
||||||
if (element == fInput) {
|
if (element == fInput) {
|
||||||
return getElements(element);
|
return getElements(element);
|
||||||
|
} else if (element instanceof IParent) {
|
||||||
|
return getElements(element);
|
||||||
}
|
}
|
||||||
return new Object[0];
|
return new Object[0];
|
||||||
}
|
}
|
||||||
|
@ -67,7 +74,7 @@ public class MakefileContentOutlinePage extends ContentOutlinePage implements IC
|
||||||
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
|
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
|
||||||
*/
|
*/
|
||||||
public Object getParent(Object element) {
|
public Object getParent(Object element) {
|
||||||
if (element instanceof IStatement)
|
if (element instanceof IDirective)
|
||||||
return fInput;
|
return fInput;
|
||||||
return fInput;
|
return fInput;
|
||||||
}
|
}
|
||||||
|
@ -76,22 +83,41 @@ public class MakefileContentOutlinePage extends ContentOutlinePage implements IC
|
||||||
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
|
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
|
||||||
*/
|
*/
|
||||||
public boolean hasChildren(Object element) {
|
public boolean hasChildren(Object element) {
|
||||||
return element == fInput;
|
if (element == fInput) {
|
||||||
|
return true;
|
||||||
|
} else if (element instanceof IParent) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
|
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
|
||||||
*/
|
*/
|
||||||
public Object[] getElements(Object inputElement) {
|
public Object[] getElements(Object inputElement) {
|
||||||
List list = new ArrayList();
|
IDirective[] statements;
|
||||||
if (showMacroDefinition) {
|
if (inputElement == fInput) {
|
||||||
list.addAll(Arrays.asList(makefile.getMacroDefinitions()));
|
statements = makefile.getStatements();
|
||||||
|
} else if (inputElement instanceof IParent) {
|
||||||
|
statements = ((IParent)inputElement).getStatements();
|
||||||
|
} else {
|
||||||
|
statements = new IDirective[0];
|
||||||
|
}
|
||||||
|
List list = new ArrayList(statements.length);
|
||||||
|
for (int i = 0; i < statements.length; i++) {
|
||||||
|
if (showMacroDefinition && statements[i] instanceof IMacroDefinition) {
|
||||||
|
list.add(statements[i]);
|
||||||
|
} else if (showInferenceRule && statements[i] instanceof IInferenceRule) {
|
||||||
|
list.add(statements[i]);
|
||||||
|
} else if (showTargetRule && statements[i] instanceof ITargetRule) {
|
||||||
|
list.add(statements[i]);
|
||||||
|
} else {
|
||||||
|
boolean irrelevant = (statements[i] instanceof IComment ||
|
||||||
|
statements[i] instanceof IEmptyLine);
|
||||||
|
if (!irrelevant) {
|
||||||
|
list.add(statements[i]);
|
||||||
}
|
}
|
||||||
if (showInferenceRule) {
|
|
||||||
list.addAll(Arrays.asList(makefile.getInferenceRules()));
|
|
||||||
}
|
}
|
||||||
if (showTargetRule) {
|
|
||||||
list.addAll(Arrays.asList(makefile.getTargetRules()));
|
|
||||||
}
|
}
|
||||||
return list.toArray();
|
return list.toArray();
|
||||||
}
|
}
|
||||||
|
@ -111,8 +137,19 @@ public class MakefileContentOutlinePage extends ContentOutlinePage implements IC
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newInput != null) {
|
if (newInput != null) {
|
||||||
IDocument document= fDocumentProvider.getDocument(newInput);
|
IWorkingCopyManager manager= MakeUIPlugin.getDefault().getWorkingCopyManager();
|
||||||
makefile = fEditor.getMakefile(document);
|
makefile = manager.getWorkingCopy((IEditorInput)newInput);
|
||||||
|
if (makefile == null) {
|
||||||
|
makefile = nullMakefile;
|
||||||
|
}
|
||||||
|
// IDocument document= fDocumentProvider.getDocument(newInput);
|
||||||
|
// makefile = fEditor.getMakefile();
|
||||||
|
// try {
|
||||||
|
// String content = document.get();
|
||||||
|
// Reader r = new StringReader(content);
|
||||||
|
// makefile.parse(r);
|
||||||
|
// } catch (IOException e) {
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,6 +167,10 @@ public class MakefileContentOutlinePage extends ContentOutlinePage implements IC
|
||||||
return MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_INFERENCE_RULE);
|
return MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_INFERENCE_RULE);
|
||||||
} else if (element instanceof IMacroDefinition) {
|
} else if (element instanceof IMacroDefinition) {
|
||||||
return MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_MACRO);
|
return MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_MACRO);
|
||||||
|
} else if (element instanceof IParent) {
|
||||||
|
return MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_RELATION);
|
||||||
|
} else if (element instanceof ICommand) {
|
||||||
|
return MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_COMMAND);
|
||||||
}
|
}
|
||||||
return super.getImage(element);
|
return super.getImage(element);
|
||||||
}
|
}
|
||||||
|
@ -138,23 +179,30 @@ public class MakefileContentOutlinePage extends ContentOutlinePage implements IC
|
||||||
* @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
|
* @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
|
||||||
*/
|
*/
|
||||||
public String getText(Object element) {
|
public String getText(Object element) {
|
||||||
|
String name;
|
||||||
if (element instanceof IRule) {
|
if (element instanceof IRule) {
|
||||||
return ((IRule) element).getTarget().toString();
|
name = ((IRule) element).getTarget().toString().trim();
|
||||||
} else if (element instanceof IMacroDefinition) {
|
} else if (element instanceof IMacroDefinition) {
|
||||||
return ((IMacroDefinition) element).getName();
|
name = ((IMacroDefinition) element).getName().trim();
|
||||||
|
} else {
|
||||||
|
name = super.getText(element);
|
||||||
}
|
}
|
||||||
return super.getText(element);
|
if (name != null) {
|
||||||
|
name = name.trim();
|
||||||
|
if (name.length() > 20) {
|
||||||
|
name = name.substring(0, 20) + "..."; //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IDocumentProvider fDocumentProvider;
|
|
||||||
protected MakefileEditor fEditor;
|
protected MakefileEditor fEditor;
|
||||||
protected Object fInput;
|
protected Object fInput;
|
||||||
|
|
||||||
public MakefileContentOutlinePage(IDocumentProvider provider, MakefileEditor editor) {
|
public MakefileContentOutlinePage(MakefileEditor editor) {
|
||||||
super();
|
super();
|
||||||
fDocumentProvider = provider;
|
|
||||||
fEditor = editor;
|
fEditor = editor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,8 +250,8 @@ public class MakefileContentOutlinePage extends ContentOutlinePage implements IC
|
||||||
fEditor.resetHighlightRange();
|
fEditor.resetHighlightRange();
|
||||||
} else if (selection instanceof IStructuredSelection){
|
} else if (selection instanceof IStructuredSelection){
|
||||||
Object element = ((IStructuredSelection) selection).getFirstElement();
|
Object element = ((IStructuredSelection) selection).getFirstElement();
|
||||||
if (element instanceof IStatement) {
|
if (element instanceof IDirective) {
|
||||||
IStatement statement = (IStatement)element;
|
IDirective statement = (IDirective)element;
|
||||||
int startLine = statement.getStartLine() - 1;
|
int startLine = statement.getStartLine() - 1;
|
||||||
int endLine = statement.getEndLine() - 1;
|
int endLine = statement.getEndLine() - 1;
|
||||||
try {
|
try {
|
||||||
|
@ -232,7 +280,7 @@ public class MakefileContentOutlinePage extends ContentOutlinePage implements IC
|
||||||
if (control != null && !control.isDisposed()) {
|
if (control != null && !control.isDisposed()) {
|
||||||
control.setRedraw(false);
|
control.setRedraw(false);
|
||||||
viewer.setInput(fInput);
|
viewer.setInput(fInput);
|
||||||
viewer.expandAll();
|
//viewer.expandAll();
|
||||||
control.setRedraw(true);
|
control.setRedraw(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,19 +10,47 @@
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
package org.eclipse.cdt.make.internal.ui.editor;
|
package org.eclipse.cdt.make.internal.ui.editor;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
||||||
|
import org.eclipse.cdt.make.core.makefile.IMakefile;
|
||||||
import org.eclipse.cdt.make.internal.ui.text.makefile.MakefilePartitionScanner;
|
import org.eclipse.cdt.make.internal.ui.text.makefile.MakefilePartitionScanner;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.jface.text.IDocument;
|
import org.eclipse.jface.text.IDocument;
|
||||||
import org.eclipse.jface.text.IDocumentPartitioner;
|
import org.eclipse.jface.text.IDocumentPartitioner;
|
||||||
import org.eclipse.jface.text.rules.DefaultPartitioner;
|
import org.eclipse.jface.text.rules.DefaultPartitioner;
|
||||||
|
import org.eclipse.jface.text.source.IAnnotationModel;
|
||||||
|
import org.eclipse.ui.IFileEditorInput;
|
||||||
import org.eclipse.ui.editors.text.FileDocumentProvider;
|
import org.eclipse.ui.editors.text.FileDocumentProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
public class MakefileDocumentProvider extends FileDocumentProvider {
|
public class MakefileDocumentProvider extends FileDocumentProvider implements IMakefileDocumentProvider {
|
||||||
|
|
||||||
private static MakefilePartitionScanner scanner = null;
|
private static MakefilePartitionScanner scanner = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bundle of all required informations to allow working copy management.
|
||||||
|
*/
|
||||||
|
protected class MakefileInfo extends FileInfo {
|
||||||
|
|
||||||
|
IMakefile fCopy;
|
||||||
|
|
||||||
|
public MakefileInfo(IDocument document, IAnnotationModel model, FileSynchronizer fileSynchronizer, IMakefile copy) {
|
||||||
|
super(document, model, fileSynchronizer);
|
||||||
|
fCopy = copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setModificationStamp(long timeStamp) {
|
||||||
|
fModificationStamp = timeStamp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for MakefileDocumentProvider.
|
* Constructor for MakefileDocumentProvider.
|
||||||
*/
|
*/
|
||||||
|
@ -53,4 +81,96 @@ public class MakefileDocumentProvider extends FileDocumentProvider {
|
||||||
return scanner;
|
return scanner;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see AbstractDocumentProvider#createElementInfo(Object)
|
||||||
|
*/
|
||||||
|
protected ElementInfo createElementInfo(Object element) throws CoreException {
|
||||||
|
if (element instanceof IFileEditorInput) {
|
||||||
|
|
||||||
|
IFileEditorInput input = (IFileEditorInput) element;
|
||||||
|
IMakefile makefile = createMakefile(input.getFile());
|
||||||
|
if (makefile == null) {
|
||||||
|
return super.createElementInfo(element);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
refreshFile(input.getFile());
|
||||||
|
} catch (CoreException x) {
|
||||||
|
handleCoreException(x, "FileDocumentProvider.createElementInfo");
|
||||||
|
}
|
||||||
|
|
||||||
|
IDocument d = null;
|
||||||
|
IStatus s = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
d = createDocument(element);
|
||||||
|
} catch (CoreException x) {
|
||||||
|
s = x.getStatus();
|
||||||
|
d = createEmptyDocument();
|
||||||
|
}
|
||||||
|
|
||||||
|
IAnnotationModel m = createAnnotationModel(element);
|
||||||
|
FileSynchronizer f = new FileSynchronizer(input);
|
||||||
|
f.install();
|
||||||
|
|
||||||
|
FileInfo info = new MakefileInfo(d, m, f, makefile);
|
||||||
|
info.fModificationStamp = computeModificationStamp(input.getFile());
|
||||||
|
info.fStatus = s;
|
||||||
|
info.fEncoding = getPersistedEncoding(input);
|
||||||
|
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.createElementInfo(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param file
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private IMakefile createMakefile(IFile file) {
|
||||||
|
return MakeCorePlugin.getDefault().createMakefile(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see AbstractDocumentProvider#doSaveDocument(IProgressMonitor, Object, IDocument, boolean)
|
||||||
|
*/
|
||||||
|
protected void doSaveDocument(IProgressMonitor monitor, Object element, IDocument document, boolean overwrite) throws CoreException {
|
||||||
|
|
||||||
|
// Update the makefile directives tree;
|
||||||
|
ElementInfo elementInfo= getElementInfo(element);
|
||||||
|
if (elementInfo instanceof MakefileInfo) {
|
||||||
|
MakefileInfo info= (MakefileInfo) elementInfo;
|
||||||
|
String content = document.get();
|
||||||
|
StringReader reader = new StringReader(content);
|
||||||
|
try {
|
||||||
|
info.fCopy.parse(reader);
|
||||||
|
} catch (IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
super.doSaveDocument(monitor, element, document, overwrite);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.make.internal.ui.editor.IMakefileDocumentProvider#shutdown()
|
||||||
|
*/
|
||||||
|
public void shutdown() {
|
||||||
|
Iterator e = getConnectedElements();
|
||||||
|
while (e.hasNext()) {
|
||||||
|
disconnect(e.next());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jdt.internal.ui.javaeditor.ICompilationUnitDocumentProvider#getWorkingCopy(java.lang.Object)
|
||||||
|
*/
|
||||||
|
public IMakefile getWorkingCopy(Object element) {
|
||||||
|
|
||||||
|
ElementInfo elementInfo = getElementInfo(element);
|
||||||
|
if (elementInfo instanceof MakefileInfo) {
|
||||||
|
MakefileInfo info = (MakefileInfo) elementInfo;
|
||||||
|
return info.fCopy;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,19 +10,13 @@
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
package org.eclipse.cdt.make.internal.ui.editor;
|
package org.eclipse.cdt.make.internal.ui.editor;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.Reader;
|
|
||||||
import java.io.StringReader;
|
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
import org.eclipse.cdt.make.core.makefile.IMakefile;
|
import org.eclipse.cdt.make.core.makefile.IMakefile;
|
||||||
import org.eclipse.cdt.make.internal.core.makefile.NullMakefile;
|
|
||||||
import org.eclipse.cdt.make.internal.core.makefile.posix.PosixMakefile;
|
|
||||||
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
||||||
import org.eclipse.cdt.make.internal.ui.text.MakefileColorManager;
|
import org.eclipse.cdt.make.internal.ui.text.MakefileColorManager;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.jface.action.IAction;
|
import org.eclipse.jface.action.IAction;
|
||||||
import org.eclipse.jface.text.IDocument;
|
|
||||||
import org.eclipse.jface.text.source.ISourceViewer;
|
import org.eclipse.jface.text.source.ISourceViewer;
|
||||||
import org.eclipse.ui.editors.text.TextEditor;
|
import org.eclipse.ui.editors.text.TextEditor;
|
||||||
import org.eclipse.ui.texteditor.DefaultRangeIndicator;
|
import org.eclipse.ui.texteditor.DefaultRangeIndicator;
|
||||||
|
@ -40,31 +34,45 @@ public class MakefileEditor extends TextEditor {
|
||||||
|
|
||||||
private MakefileContentOutlinePage getOutlinePage() {
|
private MakefileContentOutlinePage getOutlinePage() {
|
||||||
if (page == null) {
|
if (page == null) {
|
||||||
page = new MakefileContentOutlinePage(getDocumentProvider(), this);
|
page = new MakefileContentOutlinePage(this);
|
||||||
page.setInput(getEditorInput());
|
page.setInput(getEditorInput());
|
||||||
}
|
}
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IMakefile getMakefile() {
|
// public IMakefile getMakefile() {
|
||||||
IDocument document = getDocumentProvider().getDocument(getEditorInput());
|
// IDocument document = getDocumentProvider().getDocument(getEditorInput());
|
||||||
return getMakefile(document);
|
// if (makefile == null) {
|
||||||
}
|
// makefile = new GNUMakefile();
|
||||||
|
// try {
|
||||||
public IMakefile getMakefile(IDocument document) {
|
// String content = document.get();
|
||||||
if (document != null) {
|
// Reader r = new StringReader(content);
|
||||||
if (makefile == null || isDirty()) {
|
// makefile.parse(r);
|
||||||
try {
|
// } catch (IOException e) {
|
||||||
String content = document.get();
|
// }
|
||||||
Reader r = new StringReader(content);
|
// IEditorInput input = getEditorInput();
|
||||||
makefile = new PosixMakefile(r);
|
// if (makefile instanceof GNUMakefile) {
|
||||||
} catch (IOException e) {
|
// GNUMakefile gnu = (GNUMakefile)makefile;
|
||||||
makefile = new NullMakefile();
|
// if (input instanceof IFileEditorInput) {
|
||||||
}
|
// IFile file = ((IFileEditorInput)input).getFile();
|
||||||
}
|
// String[] dirs = gnu.getIncludeDirectories();
|
||||||
}
|
// String[] includes = new String[dirs.length + 1];
|
||||||
return makefile;
|
// System.arraycopy(dirs, 0, includes, 0, dirs.length);
|
||||||
}
|
// String cwd = file.getLocation().removeLastSegments(1).toOSString();
|
||||||
|
// includes[dirs.length] = cwd;
|
||||||
|
// gnu.setIncludeDirectories(includes);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else if (isDirty()) {
|
||||||
|
// try {
|
||||||
|
// String content = document.get();
|
||||||
|
// Reader r = new StringReader(content);
|
||||||
|
// makefile.parse(r);
|
||||||
|
// } catch (IOException e) {
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return makefile;
|
||||||
|
// }
|
||||||
|
|
||||||
public MakefileEditor() {
|
public MakefileEditor() {
|
||||||
super();
|
super();
|
||||||
|
@ -80,7 +88,7 @@ public class MakefileEditor extends TextEditor {
|
||||||
setRangeIndicator(new DefaultRangeIndicator());
|
setRangeIndicator(new DefaultRangeIndicator());
|
||||||
setEditorContextMenuId("#MakefileEditorContext"); //$NON-NLS-1$
|
setEditorContextMenuId("#MakefileEditorContext"); //$NON-NLS-1$
|
||||||
setRulerContextMenuId("#MakefileRulerContext"); //$NON-NLS-1$
|
setRulerContextMenuId("#MakefileRulerContext"); //$NON-NLS-1$
|
||||||
setDocumentProvider(new MakefileDocumentProvider());
|
setDocumentProvider(MakeUIPlugin.getDefault().getMakefileDocumentProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2003 IBM Corporation 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:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.editor;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.makefile.IMakefile;
|
||||||
|
import org.eclipse.cdt.make.ui.IWorkingCopyManager;
|
||||||
|
import org.eclipse.cdt.make.ui.IWorkingCopyManagerExtension;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.jface.text.Assert;
|
||||||
|
import org.eclipse.ui.IEditorInput;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This working copy manager works together with a given compilation unit document provider and
|
||||||
|
* additionally offers to "overwrite" the working copy provided by this document provider.
|
||||||
|
*/
|
||||||
|
public class WorkingCopyManager implements IWorkingCopyManager, IWorkingCopyManagerExtension {
|
||||||
|
|
||||||
|
private IMakefileDocumentProvider fDocumentProvider;
|
||||||
|
private Map fMap;
|
||||||
|
private boolean fIsShuttingDown;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new working copy manager that co-operates with the given
|
||||||
|
* compilation unit document provider.
|
||||||
|
*
|
||||||
|
* @param provider the provider
|
||||||
|
*/
|
||||||
|
public WorkingCopyManager(IMakefileDocumentProvider provider) {
|
||||||
|
Assert.isNotNull(provider);
|
||||||
|
fDocumentProvider= provider;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jdt.ui.IWorkingCopyManager#connect(org.eclipse.ui.IEditorInput)
|
||||||
|
*/
|
||||||
|
public void connect(IEditorInput input) throws CoreException {
|
||||||
|
fDocumentProvider.connect(input);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jdt.ui.IWorkingCopyManager#disconnect(org.eclipse.ui.IEditorInput)
|
||||||
|
*/
|
||||||
|
public void disconnect(IEditorInput input) {
|
||||||
|
fDocumentProvider.disconnect(input);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jdt.ui.IWorkingCopyManager#shutdown()
|
||||||
|
*/
|
||||||
|
public void shutdown() {
|
||||||
|
if (!fIsShuttingDown) {
|
||||||
|
fIsShuttingDown= true;
|
||||||
|
try {
|
||||||
|
if (fMap != null) {
|
||||||
|
fMap.clear();
|
||||||
|
fMap= null;
|
||||||
|
}
|
||||||
|
fDocumentProvider.shutdown();
|
||||||
|
} finally {
|
||||||
|
fIsShuttingDown= false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jdt.ui.IWorkingCopyManager#getWorkingCopy(org.eclipse.ui.IEditorInput)
|
||||||
|
*/
|
||||||
|
public IMakefile getWorkingCopy(IEditorInput input) {
|
||||||
|
IMakefile unit= fMap == null ? null : (IMakefile) fMap.get(input);
|
||||||
|
return unit != null ? unit : fDocumentProvider.getWorkingCopy(input);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jdt.internal.ui.javaeditor.IWorkingCopyManagerExtension#setWorkingCopy(org.eclipse.ui.IEditorInput, org.eclipse.jdt.core.ICompilationUnit)
|
||||||
|
*/
|
||||||
|
public void setWorkingCopy(IEditorInput input, IMakefile workingCopy) {
|
||||||
|
if (fDocumentProvider.getDocument(input) != null) {
|
||||||
|
if (fMap == null)
|
||||||
|
fMap= new HashMap();
|
||||||
|
fMap.put(input, workingCopy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jdt.internal.ui.javaeditor.IWorkingCopyManagerExtension#removeWorkingCopy(org.eclipse.ui.IEditorInput)
|
||||||
|
*/
|
||||||
|
public void removeWorkingCopy(IEditorInput input) {
|
||||||
|
fMap.remove(input);
|
||||||
|
if (fMap.isEmpty())
|
||||||
|
fMap= null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,10 +15,11 @@ import java.util.ArrayList;
|
||||||
import org.eclipse.cdt.make.core.makefile.IMacroDefinition;
|
import org.eclipse.cdt.make.core.makefile.IMacroDefinition;
|
||||||
import org.eclipse.cdt.make.core.makefile.IMakefile;
|
import org.eclipse.cdt.make.core.makefile.IMakefile;
|
||||||
import org.eclipse.cdt.make.core.makefile.IRule;
|
import org.eclipse.cdt.make.core.makefile.IRule;
|
||||||
import org.eclipse.cdt.make.core.makefile.IStatement;
|
import org.eclipse.cdt.make.core.makefile.IDirective;
|
||||||
import org.eclipse.cdt.make.internal.ui.MakeUIImages;
|
import org.eclipse.cdt.make.internal.ui.MakeUIImages;
|
||||||
import org.eclipse.cdt.make.internal.ui.editor.MakefileEditor;
|
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
||||||
import org.eclipse.cdt.make.internal.ui.text.WordPartDetector;
|
import org.eclipse.cdt.make.internal.ui.text.WordPartDetector;
|
||||||
|
import org.eclipse.cdt.make.ui.IWorkingCopyManager;
|
||||||
import org.eclipse.jface.text.BadLocationException;
|
import org.eclipse.jface.text.BadLocationException;
|
||||||
import org.eclipse.jface.text.IDocument;
|
import org.eclipse.jface.text.IDocument;
|
||||||
import org.eclipse.jface.text.ITextViewer;
|
import org.eclipse.jface.text.ITextViewer;
|
||||||
|
@ -31,6 +32,7 @@ import org.eclipse.jface.text.contentassist.IContextInformation;
|
||||||
import org.eclipse.jface.text.contentassist.IContextInformationPresenter;
|
import org.eclipse.jface.text.contentassist.IContextInformationPresenter;
|
||||||
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
|
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
|
||||||
import org.eclipse.swt.graphics.Image;
|
import org.eclipse.swt.graphics.Image;
|
||||||
|
import org.eclipse.ui.IEditorPart;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MakefileCompletionProcessor
|
* MakefileCompletionProcessor
|
||||||
|
@ -70,10 +72,13 @@ public class MakefileCompletionProcessor implements IContentAssistProcessor {
|
||||||
protected IContextInformationValidator fValidator = new Validator();
|
protected IContextInformationValidator fValidator = new Validator();
|
||||||
protected Image imageMacro = MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_MACRO);
|
protected Image imageMacro = MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_MACRO);
|
||||||
protected Image imageTarget = MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_TARGET_RULE);
|
protected Image imageTarget = MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_TARGET_RULE);
|
||||||
protected MakefileEditor fEditor;
|
|
||||||
|
|
||||||
public MakefileCompletionProcessor(MakefileEditor editor) {
|
protected IEditorPart fEditor;
|
||||||
|
protected IWorkingCopyManager fManager;
|
||||||
|
|
||||||
|
public MakefileCompletionProcessor(IEditorPart editor) {
|
||||||
fEditor = editor;
|
fEditor = editor;
|
||||||
|
fManager = MakeUIPlugin.getDefault().getWorkingCopyManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
@ -81,8 +86,12 @@ public class MakefileCompletionProcessor implements IContentAssistProcessor {
|
||||||
*/
|
*/
|
||||||
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentOffset) {
|
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentOffset) {
|
||||||
boolean macro = inMacro(viewer, documentOffset);
|
boolean macro = inMacro(viewer, documentOffset);
|
||||||
IMakefile makefile = fEditor.getMakefile(viewer.getDocument());
|
IMakefile makefile = fManager.getWorkingCopy(fEditor.getEditorInput());
|
||||||
IStatement[] statements = null;
|
// IMakefile makefile = fEditor.getMakefile();
|
||||||
|
// String content = viewer.getDocument().get();
|
||||||
|
// Reader r = new StringReader(content);
|
||||||
|
// makefile.parse(r);
|
||||||
|
IDirective[] statements = null;
|
||||||
if (macro) {
|
if (macro) {
|
||||||
statements = makefile.getMacroDefinitions();
|
statements = makefile.getMacroDefinitions();
|
||||||
} else {
|
} else {
|
||||||
|
@ -100,7 +109,7 @@ public class MakefileCompletionProcessor implements IContentAssistProcessor {
|
||||||
if (statements[i] instanceof IMacroDefinition) {
|
if (statements[i] instanceof IMacroDefinition) {
|
||||||
name = ((IMacroDefinition) statements[i]).getName();
|
name = ((IMacroDefinition) statements[i]).getName();
|
||||||
image = imageMacro;
|
image = imageMacro;
|
||||||
infoString = ((IMacroDefinition)statements[i]).getValue();
|
infoString = ((IMacroDefinition)statements[i]).getValue().toString();
|
||||||
} else if (statements[i] instanceof IRule) {
|
} else if (statements[i] instanceof IRule) {
|
||||||
name = ((IRule) statements[i]).getTarget().toString();
|
name = ((IRule) statements[i]).getTarget().toString();
|
||||||
image = imageTarget;
|
image = imageTarget;
|
||||||
|
@ -131,15 +140,17 @@ public class MakefileCompletionProcessor implements IContentAssistProcessor {
|
||||||
public IContextInformation[] computeContextInformation(ITextViewer viewer, int documentOffset) {
|
public IContextInformation[] computeContextInformation(ITextViewer viewer, int documentOffset) {
|
||||||
WordPartDetector wordPart = new WordPartDetector(viewer, documentOffset);
|
WordPartDetector wordPart = new WordPartDetector(viewer, documentOffset);
|
||||||
boolean macro = inMacro(viewer, documentOffset);
|
boolean macro = inMacro(viewer, documentOffset);
|
||||||
IMakefile makefile = fEditor.getMakefile(viewer.getDocument());
|
IMakefile makefile = fManager.getWorkingCopy(fEditor.getEditorInput());
|
||||||
|
//IMakefile makefile = fEditor.getMakefile(viewer.getDocument());
|
||||||
|
//IMakefile makefile = fEditor.getMakefile();
|
||||||
ArrayList contextList = new ArrayList();
|
ArrayList contextList = new ArrayList();
|
||||||
if (macro) {
|
if (macro) {
|
||||||
IStatement[] statements = makefile.getMacroDefinitions();
|
IDirective[] statements = makefile.getMacroDefinitions();
|
||||||
for (int i = 0; i < statements.length; i++) {
|
for (int i = 0; i < statements.length; i++) {
|
||||||
if (statements[i] instanceof IMacroDefinition) {
|
if (statements[i] instanceof IMacroDefinition) {
|
||||||
String name = ((IMacroDefinition) statements[i]).getName();
|
String name = ((IMacroDefinition) statements[i]).getName();
|
||||||
if (name != null && name.equals(wordPart.getString())) {
|
if (name != null && name.equals(wordPart.getString())) {
|
||||||
String value = ((IMacroDefinition) statements[i]).getValue();
|
String value = ((IMacroDefinition) statements[i]).getValue().toString();
|
||||||
if (value != null && value.length() > 0) {
|
if (value != null && value.length() > 0) {
|
||||||
contextList.add(value);
|
contextList.add(value);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2003 IBM Corporation 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:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.make.ui;
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
|
import org.eclipse.ui.IEditorInput;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.makefile.IMakefile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface for accessing working copies of <code>IMakefile</code>
|
||||||
|
* objects. The original unit is only given indirectly by means
|
||||||
|
* of an <code>IEditorInput</code>. The life cycle is as follows:
|
||||||
|
* <ul>
|
||||||
|
* <li> <code>connect</code> creates and remembers a working copy of the
|
||||||
|
* unit which is encoded in the given editor input</li>
|
||||||
|
* <li> <code>getWorkingCopy</code> returns the working copy remembered on
|
||||||
|
* <code>connect</code></li>
|
||||||
|
* <li> <code>disconnect</code> destroys the working copy remembered on
|
||||||
|
* <code>connect</code></li>
|
||||||
|
* </ul>
|
||||||
|
* <p>
|
||||||
|
* This interface is not intended to be implemented by clients.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface IWorkingCopyManager {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connects the given editor input to this manager. After calling
|
||||||
|
* this method, a working copy will be available for the compilation unit encoded
|
||||||
|
* in the given editor input (does nothing if there is no encoded compilation unit).
|
||||||
|
*
|
||||||
|
* @param input the editor input
|
||||||
|
* @exception CoreException if the working copy cannot be created for the
|
||||||
|
* unit
|
||||||
|
*/
|
||||||
|
void connect(IEditorInput input) throws CoreException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects the given editor input from this manager. After calling
|
||||||
|
* this method, a working copy for the compilation unit encoded
|
||||||
|
* in the given editor input will no longer be available. Does nothing if there
|
||||||
|
* is no encoded compilation unit, or if there is no remembered working copy for
|
||||||
|
* the compilation unit.
|
||||||
|
*
|
||||||
|
* @param input the editor input
|
||||||
|
*/
|
||||||
|
void disconnect(IEditorInput input);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the working copy remembered for the compilation unit encoded in the
|
||||||
|
* given editor input.
|
||||||
|
*
|
||||||
|
* @param input the editor input
|
||||||
|
* @return the working copy of the compilation unit, or <code>null</code> if the
|
||||||
|
* input does not encode an editor input, or if there is no remembered working
|
||||||
|
* copy for this compilation unit
|
||||||
|
*/
|
||||||
|
IMakefile getWorkingCopy(IEditorInput input);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shuts down this working copy manager. All working copies still remembered
|
||||||
|
* by this manager are destroyed.
|
||||||
|
*/
|
||||||
|
void shutdown();
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2003 IBM Corporation 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:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.ui;
|
||||||
|
|
||||||
|
import org.eclipse.ui.IEditorInput;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.makefile.IMakefile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extension interface for <code>IWorkingCopyManager</code>.
|
||||||
|
* @since 2.1
|
||||||
|
*/
|
||||||
|
public interface IWorkingCopyManagerExtension {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the given working copy for the given editor input. If the given editor input
|
||||||
|
* is not connected to this working copy manager, this call has no effect. <p>
|
||||||
|
* This working copy manager does not assume the ownership of this working copy, i.e.,
|
||||||
|
* the given working copy is not automatically be freed when this manager is shut down.
|
||||||
|
*
|
||||||
|
* @param input the editor input
|
||||||
|
* @param workingCopy the working copy
|
||||||
|
*/
|
||||||
|
void setWorkingCopy(IEditorInput input, IMakefile workingCopy);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the working copy set for the given editor input. If there is no
|
||||||
|
* working copy set for this input or this input is not connected to this
|
||||||
|
* working copy manager, this call has no effect.
|
||||||
|
*
|
||||||
|
* @param input the editor input
|
||||||
|
*/
|
||||||
|
void removeWorkingCopy(IEditorInput input);
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue