mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-12 10:45:37 +02:00
Move the MakefileDocumentProvider to use Eclipse-3.0
TextFileBuffer management this will allow us to open external files also
This commit is contained in:
parent
1ffaa3cf23
commit
9bf3b2ef78
8 changed files with 372 additions and 133 deletions
|
@ -423,6 +423,8 @@
|
||||||
</action>
|
</action>
|
||||||
</actionSet>
|
</actionSet>
|
||||||
</extension>
|
</extension>
|
||||||
|
|
||||||
|
<!-- Makefile Editor extensions. -->
|
||||||
<extension
|
<extension
|
||||||
id="org.eclipse.cdt.make.editor"
|
id="org.eclipse.cdt.make.editor"
|
||||||
name="MakefileEditor"
|
name="MakefileEditor"
|
||||||
|
@ -436,6 +438,26 @@
|
||||||
id="org.eclipse.cdt.make.editor">
|
id="org.eclipse.cdt.make.editor">
|
||||||
</editor>
|
</editor>
|
||||||
</extension>
|
</extension>
|
||||||
|
<extension
|
||||||
|
id="org.eclipse.cdt.make.ui.MakefileDocumentFactory"
|
||||||
|
name="%MakefileDocumentFactory.name"
|
||||||
|
point="org.eclipse.core.filebuffers.documentCreation">
|
||||||
|
<factory
|
||||||
|
extensions="*"
|
||||||
|
class="org.eclipse.cdt.make.internal.ui.editor.MakefileDocumentFactory">
|
||||||
|
</factory>
|
||||||
|
</extension>
|
||||||
|
<extension
|
||||||
|
id="org.eclipse.cdt.make.ui.MakefileDocumentSetupParticipant"
|
||||||
|
name="%MakefileDocumentSetupParticipant.name"
|
||||||
|
point="org.eclipse.core.filebuffers.documentSetup">
|
||||||
|
<participant
|
||||||
|
extensions="*"
|
||||||
|
class="org.eclipse.cdt.make.internal.ui.editor.MakefileDocumentSetupParticipant">
|
||||||
|
</participant>
|
||||||
|
</extension>
|
||||||
|
|
||||||
|
|
||||||
<extension
|
<extension
|
||||||
point="org.eclipse.ui.startup">
|
point="org.eclipse.ui.startup">
|
||||||
<startup
|
<startup
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* 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.make.internal.ui.editor;
|
||||||
|
|
||||||
|
import org.eclipse.jface.text.IDocument;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MakefileDocumentFactory
|
||||||
|
*/
|
||||||
|
public class MakefileDocumentFactory {
|
||||||
|
public MakefileDocumentFactory() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.core.filebuffers.IDocumentFactory#createDocument()
|
||||||
|
*/
|
||||||
|
public IDocument createDocument() {
|
||||||
|
return new PartiallySynchronizedDocument();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -10,168 +10,157 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
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 java.util.Iterator;
|
||||||
|
|
||||||
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
||||||
import org.eclipse.cdt.make.core.makefile.IMakefile;
|
import org.eclipse.cdt.make.core.makefile.IMakefile;
|
||||||
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
|
||||||
import org.eclipse.cdt.make.internal.ui.text.makefile.MakefilePartitionScanner;
|
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
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.ISynchronizable;
|
||||||
import org.eclipse.jface.text.rules.DefaultPartitioner;
|
|
||||||
import org.eclipse.jface.text.source.IAnnotationModel;
|
import org.eclipse.jface.text.source.IAnnotationModel;
|
||||||
import org.eclipse.ui.IFileEditorInput;
|
import org.eclipse.ui.IFileEditorInput;
|
||||||
import org.eclipse.ui.editors.text.FileDocumentProvider;
|
import org.eclipse.ui.editors.text.ForwardingDocumentProvider;
|
||||||
|
import org.eclipse.ui.editors.text.TextFileDocumentProvider;
|
||||||
|
import org.eclipse.ui.texteditor.IDocumentProvider;
|
||||||
|
import org.eclipse.ui.texteditor.ResourceMarkerAnnotationModel;
|
||||||
|
|
||||||
|
public class MakefileDocumentProvider extends TextFileDocumentProvider implements IMakefileDocumentProvider {
|
||||||
|
|
||||||
|
IMakefile fMakefile;
|
||||||
|
|
||||||
|
protected class MakefileAnnotationModel extends ResourceMarkerAnnotationModel /*implements IProblemRequestor */{
|
||||||
/**
|
/**
|
||||||
|
* @param resource
|
||||||
*/
|
*/
|
||||||
public class MakefileDocumentProvider extends FileDocumentProvider implements IMakefileDocumentProvider {
|
public MakefileAnnotationModel(IResource resource) {
|
||||||
|
super(resource);
|
||||||
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;
|
* @param makefile
|
||||||
|
*/
|
||||||
|
public void setMakefile(IMakefile makefile) {
|
||||||
|
fMakefile = makefile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for MakefileDocumentProvider.
|
* Remembers a IMakefile for each element.
|
||||||
*/
|
*/
|
||||||
|
protected class MakefileFileInfo extends FileInfo {
|
||||||
|
public IMakefile fCopy;
|
||||||
|
}
|
||||||
|
|
||||||
public MakefileDocumentProvider() {
|
public MakefileDocumentProvider() {
|
||||||
super();
|
IDocumentProvider provider= new TextFileDocumentProvider(new MakefileStorageDocumentProvider());
|
||||||
|
provider= new ForwardingDocumentProvider(MakefileDocumentSetupParticipant.MAKEFILE_PARTITIONING, new MakefileDocumentSetupParticipant(), provider);
|
||||||
|
setParentDocumentProvider(provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.eclipse.ui.texteditor.AbstractDocumentProvider#createDocument(Object)
|
|
||||||
*/
|
|
||||||
protected IDocument createDocument(Object element) throws CoreException {
|
|
||||||
IDocument document = super.createDocument(element);
|
|
||||||
if (document != null) {
|
|
||||||
IDocumentPartitioner partitioner = createPartitioner();
|
|
||||||
partitioner.connect(document);
|
|
||||||
document.setDocumentPartitioner(partitioner);
|
|
||||||
}
|
|
||||||
return document;
|
|
||||||
}
|
|
||||||
|
|
||||||
private IDocumentPartitioner createPartitioner() {
|
|
||||||
return new DefaultPartitioner(getPartitionScanner(), MakefilePartitionScanner.TYPES);
|
|
||||||
}
|
|
||||||
|
|
||||||
private MakefilePartitionScanner getPartitionScanner() {
|
|
||||||
if (scanner == null)
|
|
||||||
scanner = new MakefilePartitionScanner();
|
|
||||||
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, MakeUIPlugin.getResourceString("MakeDocumentProvider.exception.createElementInfo")); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
|
|
||||||
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) {
|
private IMakefile createMakefile(IFile file) {
|
||||||
return MakeCorePlugin.getDefault().createMakefile(file);
|
return MakeCorePlugin.getDefault().createMakefile(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* (non-Javadoc)
|
||||||
* @see AbstractDocumentProvider#doSaveDocument(IProgressMonitor, Object, IDocument, boolean)
|
* @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createAnnotationModel(org.eclipse.core.resources.IFile)
|
||||||
*/
|
*/
|
||||||
protected void doSaveDocument(IProgressMonitor monitor, Object element, IDocument document, boolean overwrite) throws CoreException {
|
protected IAnnotationModel createAnnotationModel(IFile file) {
|
||||||
|
return new MakefileAnnotationModel(file);
|
||||||
|
}
|
||||||
|
|
||||||
// Update the makefile directives tree;
|
/*
|
||||||
ElementInfo elementInfo= getElementInfo(element);
|
* @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createFileInfo(java.lang.Object)
|
||||||
if (elementInfo instanceof MakefileInfo) {
|
*/
|
||||||
MakefileInfo info= (MakefileInfo) elementInfo;
|
protected FileInfo createFileInfo(Object element) throws CoreException {
|
||||||
String content = document.get();
|
if (!(element instanceof IFileEditorInput))
|
||||||
StringReader reader = new StringReader(content);
|
return null;
|
||||||
try {
|
|
||||||
info.fCopy.parse(info.fCopy.getFileName(), reader);
|
IFileEditorInput input= (IFileEditorInput) element;
|
||||||
} catch (IOException e) {
|
IMakefile original= createMakefile(input.getFile());
|
||||||
|
if (original == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
FileInfo info= super.createFileInfo(element);
|
||||||
|
if (!(info instanceof MakefileFileInfo)) {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MakefileFileInfo makefileInfo= (MakefileFileInfo) info;
|
||||||
|
setUpSynchronization(makefileInfo);
|
||||||
|
|
||||||
|
// IProblemRequestor requestor= cuInfo.fModel instanceof IProblemRequestor ? (IProblemRequestor) cuInfo.fModel : null;
|
||||||
|
|
||||||
|
//original.becomeWorkingCopy(requestor, getProgressMonitor());
|
||||||
|
makefileInfo.fCopy = original;
|
||||||
|
|
||||||
|
if (makefileInfo.fModel instanceof MakefileAnnotationModel) {
|
||||||
|
MakefileAnnotationModel model= (MakefileAnnotationModel) makefileInfo.fModel;
|
||||||
|
model.setMakefile(makefileInfo.fCopy);
|
||||||
}
|
}
|
||||||
super.doSaveDocument(monitor, element, document, overwrite);
|
|
||||||
|
// if (requestor instanceof IProblemRequestorExtension) {
|
||||||
|
// IProblemRequestorExtension extension= (IProblemRequestorExtension) requestor;
|
||||||
|
// extension.setIsActive(isHandlingTemporaryProblems());
|
||||||
|
// }
|
||||||
|
|
||||||
|
return makefileInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.make.internal.ui.editor.IMakefileDocumentProvider#shutdown()
|
* @see org.eclipse.ui.editors.text.TextFileDocumentProvider#disposeFileInfo(java.lang.Object, org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo)
|
||||||
*/
|
*/
|
||||||
public void shutdown() {
|
protected void disposeFileInfo(Object element, FileInfo info) {
|
||||||
Iterator e = getConnectedElements();
|
if (info instanceof MakefileFileInfo) {
|
||||||
while (e.hasNext()) {
|
MakefileFileInfo makefileInfo= (MakefileFileInfo) info;
|
||||||
disconnect(e.next());
|
if (makefileInfo.fCopy != null) {
|
||||||
|
//makefileInfo.fCopy.dispose();
|
||||||
|
makefileInfo.fCopy = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
super.disposeFileInfo(element, info);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @see org.eclipse.cdt.make.internal.ui.editor.ICompilationUnitDocumentProvider#getWorkingCopy(java.lang.Object)
|
* @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createEmptyFileInfo()
|
||||||
|
*/
|
||||||
|
protected FileInfo createEmptyFileInfo() {
|
||||||
|
return new MakefileFileInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.make.internal.ui.IMakefileDocumentProvider#getWorkingCopy(java.lang.Object)
|
||||||
*/
|
*/
|
||||||
public IMakefile getWorkingCopy(Object element) {
|
public IMakefile getWorkingCopy(Object element) {
|
||||||
|
FileInfo fileInfo= getFileInfo(element);
|
||||||
ElementInfo elementInfo = getElementInfo(element);
|
if (fileInfo instanceof MakefileFileInfo) {
|
||||||
if (elementInfo instanceof MakefileInfo) {
|
MakefileFileInfo info= (MakefileFileInfo) fileInfo;
|
||||||
MakefileInfo info = (MakefileInfo) elementInfo;
|
|
||||||
return info.fCopy;
|
return info.fCopy;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.make.internal.ui.IMakefileDocumentProvider#shutdown()
|
||||||
|
*/
|
||||||
|
public void shutdown() {
|
||||||
|
Iterator e= getConnectedElementsIterator();
|
||||||
|
while (e.hasNext())
|
||||||
|
disconnect(e.next());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void setUpSynchronization(MakefileFileInfo antInfo) {
|
||||||
|
IDocument document= antInfo.fTextFileBuffer.getDocument();
|
||||||
|
IAnnotationModel model= antInfo.fModel;
|
||||||
|
|
||||||
|
if (document instanceof ISynchronizable && model instanceof ISynchronizable) {
|
||||||
|
Object lock= ((ISynchronizable) document).getLockObject();
|
||||||
|
((ISynchronizable) model).setLockObject(lock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.make.internal.ui.editor;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.internal.ui.text.makefile.MakefilePartitionScanner;
|
||||||
|
import org.eclipse.core.filebuffers.IDocumentSetupParticipant;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MakefileDocumentSetupParticipant
|
||||||
|
* The document setup participant for Ant.
|
||||||
|
*/
|
||||||
|
public class MakefileDocumentSetupParticipant implements IDocumentSetupParticipant {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the Makefiile partitioning.
|
||||||
|
*/
|
||||||
|
public final static String MAKEFILE_PARTITIONING= "___makefile_partitioning"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
public MakefileDocumentSetupParticipant() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.core.filebuffers.IDocumentSetupParticipant#setup(org.eclipse.jface.text.IDocument)
|
||||||
|
*/
|
||||||
|
public void setup(IDocument document) {
|
||||||
|
if (document instanceof IDocumentExtension3) {
|
||||||
|
IDocumentExtension3 extension3= (IDocumentExtension3) document;
|
||||||
|
IDocumentPartitioner partitioner = createDocumentPartitioner();
|
||||||
|
extension3.setDocumentPartitioner(MAKEFILE_PARTITIONING, partitioner);
|
||||||
|
partitioner.connect(document);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private IDocumentPartitioner createDocumentPartitioner() {
|
||||||
|
return new DefaultPartitioner(
|
||||||
|
new MakefilePartitionScanner(), MakefilePartitionScanner.TYPES);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* 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.make.internal.ui.editor;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.internal.ui.text.makefile.MakefilePartitionScanner;
|
||||||
|
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.ui.editors.text.StorageDocumentProvider;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MakefileStorageDocumentProvider
|
||||||
|
*/
|
||||||
|
public class MakefileStorageDocumentProvider extends StorageDocumentProvider {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @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) {
|
||||||
|
IDocumentPartitioner partitioner= createDocumentPartitioner();
|
||||||
|
if (document instanceof IDocumentExtension3) {
|
||||||
|
IDocumentExtension3 extension3= (IDocumentExtension3) document;
|
||||||
|
extension3.setDocumentPartitioner(MakefileDocumentSetupParticipant.MAKEFILE_PARTITIONING, partitioner);
|
||||||
|
} else {
|
||||||
|
document.setDocumentPartitioner(partitioner);
|
||||||
|
}
|
||||||
|
partitioner.connect(document);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private IDocumentPartitioner createDocumentPartitioner() {
|
||||||
|
return new DefaultPartitioner(
|
||||||
|
new MakefilePartitionScanner(), MakefilePartitionScanner.TYPES);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,97 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* 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:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.editor;
|
||||||
|
|
||||||
|
import org.eclipse.jface.text.BadLocationException;
|
||||||
|
import org.eclipse.jface.text.Document;
|
||||||
|
import org.eclipse.jface.text.ISynchronizable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PartiallySynchronizedDocument
|
||||||
|
* Document that can also be used by a background reconciler.
|
||||||
|
*/
|
||||||
|
public class PartiallySynchronizedDocument extends Document implements ISynchronizable {
|
||||||
|
|
||||||
|
private final Object fInternalLockObject= new Object();
|
||||||
|
private Object fLockObject;
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.text.IDocumentExtension#startSequentialRewrite(boolean)
|
||||||
|
*/
|
||||||
|
synchronized public void startSequentialRewrite(boolean normalized) {
|
||||||
|
super.startSequentialRewrite(normalized);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.text.IDocumentExtension#stopSequentialRewrite()
|
||||||
|
*/
|
||||||
|
synchronized public void stopSequentialRewrite() {
|
||||||
|
super.stopSequentialRewrite();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.text.IDocument#get()
|
||||||
|
*/
|
||||||
|
synchronized public String get() {
|
||||||
|
return super.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.text.IDocument#get(int, int)
|
||||||
|
*/
|
||||||
|
synchronized public String get(int offset, int length) throws BadLocationException {
|
||||||
|
return super.get(offset, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.text.IDocument#getChar(int)
|
||||||
|
*/
|
||||||
|
synchronized public char getChar(int offset) throws BadLocationException {
|
||||||
|
return super.getChar(offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.text.IDocument#replace(int, int, java.lang.String)
|
||||||
|
*/
|
||||||
|
synchronized public void replace(int offset, int length, String text) throws BadLocationException {
|
||||||
|
super.replace(offset, length, text);
|
||||||
|
//TODO to be used for incremental parsing...not for 3.0
|
||||||
|
// if (length == 0 && text != null) {
|
||||||
|
// // Insert
|
||||||
|
// } else if (text == null || text.length() == 0) {
|
||||||
|
// // Remove
|
||||||
|
// } else {
|
||||||
|
// fAntModel.setReplaceHasOccurred();
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.text.IDocument#set(java.lang.String)
|
||||||
|
*/
|
||||||
|
synchronized public void set(String text) {
|
||||||
|
super.set(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jface.text.ISynchronizable#setLockObject(java.lang.Object)
|
||||||
|
*/
|
||||||
|
public void setLockObject(Object lockObject) {
|
||||||
|
fLockObject= lockObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jface.text.ISynchronizable#getLockObject()
|
||||||
|
*/
|
||||||
|
public Object getLockObject() {
|
||||||
|
return fLockObject == null ? fInternalLockObject : fLockObject;
|
||||||
|
}
|
||||||
|
}
|
|
@ -57,7 +57,7 @@ public class MakefileCodeScanner extends RuleBasedScanner {
|
||||||
List rules = new ArrayList();
|
List rules = new ArrayList();
|
||||||
|
|
||||||
// Add rule for single line comments.
|
// Add rule for single line comments.
|
||||||
rules.add(new EndOfLineRule("#", comment, '\\')); //$NON-NLS-1$
|
rules.add(new EndOfLineRule("#", comment, '\\', true)); //$NON-NLS-1$
|
||||||
|
|
||||||
// Add generic whitespace rule.
|
// Add generic whitespace rule.
|
||||||
rules.add(new WhitespaceRule(new IWhitespaceDetector() {
|
rules.add(new WhitespaceRule(new IWhitespaceDetector() {
|
||||||
|
|
|
@ -77,6 +77,7 @@ public class MakefileReconcilingStrategy implements IReconcilingStrategy {
|
||||||
|
|
||||||
private void reconcile() {
|
private void reconcile() {
|
||||||
IMakefile makefile = fManager.getWorkingCopy(fEditor.getEditorInput());
|
IMakefile makefile = fManager.getWorkingCopy(fEditor.getEditorInput());
|
||||||
|
if (makefile != null) {
|
||||||
String content = fDocumentProvider.getDocument(fEditor.getEditorInput()).get();
|
String content = fDocumentProvider.getDocument(fEditor.getEditorInput()).get();
|
||||||
StringReader reader = new StringReader(content);
|
StringReader reader = new StringReader(content);
|
||||||
try {
|
try {
|
||||||
|
@ -87,3 +88,4 @@ public class MakefileReconcilingStrategy implements IReconcilingStrategy {
|
||||||
fOutliner.update();
|
fOutliner.update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue