use of org.eclipse.wst.sse.core.internal.ltk.parser.StructuredDocumentRegionParser in project webtools.sourceediting by eclipse.
the class DocumentRegionProcessor method uninstall.
/**
* @see org.eclipse.wst.sse.ui.internal.reconcile.DirtyRegionProcessor#uninstall()
*/
public void uninstall() {
if (isInstalled()) {
IReconcilingStrategy validatorStrategy = getValidatorStrategy();
if (validatorStrategy != null) {
if (validatorStrategy instanceof IReleasable)
((IReleasable) validatorStrategy).release();
}
if (fSpellcheckStrategy != null) {
fSpellcheckStrategy.setDocument(null);
fSpellcheckStrategy = null;
}
fReconcileListeners = new ISourceReconcilingListener[0];
if (getDocument() instanceof IStructuredDocument) {
RegionParser parser = ((IStructuredDocument) getDocument()).getParser();
if (parser instanceof StructuredDocumentRegionParser) {
((StructuredDocumentRegionParser) parser).removeStructuredDocumentRegionHandler(fResetHandler);
}
}
}
super.uninstall();
}
use of org.eclipse.wst.sse.core.internal.ltk.parser.StructuredDocumentRegionParser in project webtools.sourceediting by eclipse.
the class AbstractModelLoader method transformInstance.
/**
* this work is done better elsewhere, but done here for this version to
* reduce changes. especially since the need for it should go away once we
* no longer need to re-use old document instance.
*/
private void transformInstance(IStructuredDocument oldInstance, IStructuredDocument newInstance) {
/**
* https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=4920
*
* JSP taglib support broken, correct by duplicating extended setup
* information (BlockTagParser extension,
* StructuredDocumentRegionParser extensions)
*/
RegionParser oldParser = oldInstance.getParser();
RegionParser newParser = newInstance.getParser().newInstance();
// parser
if (oldParser instanceof StructuredDocumentRegionParserExtension && newParser instanceof StructuredDocumentRegionParserExtension) {
List oldHandlers = ((StructuredDocumentRegionParserExtension) oldParser).getStructuredDocumentRegionHandlers();
for (int i = 0; i < oldHandlers.size(); i++) {
StructuredDocumentRegionHandler handler = ((StructuredDocumentRegionHandler) oldHandlers.get(i));
if (handler instanceof StructuredDocumentRegionHandlerExtension) {
/**
* Skip the transferring here, the handler will do this
* after everything else but the source is transferred.
*/
} else {
((StructuredDocumentRegionParser) oldParser).removeStructuredDocumentRegionHandler(handler);
((StructuredDocumentRegionParser) newParser).addStructuredDocumentRegionHandler(handler);
handler.resetNodes();
}
}
}
// Add any global BlockMarkers to the new parser
if (oldParser instanceof BlockTagParser && newParser instanceof BlockTagParser) {
List oldBlockMarkers = ((BlockTagParser) oldParser).getBlockMarkers();
for (int i = 0; i < oldBlockMarkers.size(); i++) {
BlockMarker blockMarker = ((BlockMarker) oldBlockMarkers.get(i));
if (blockMarker.isGlobal()) {
((BlockTagParser) newParser).addBlockMarker(blockMarker);
}
}
}
((BasicStructuredDocument) oldInstance).setParser(newParser);
((BasicStructuredDocument) oldInstance).setReParser(newInstance.getReParser().newInstance());
if (newInstance.getDocumentPartitioner() instanceof StructuredTextPartitioner) {
StructuredTextPartitioner partitioner = null;
if (oldInstance instanceof IDocumentExtension3 && newInstance instanceof IDocumentExtension3) {
partitioner = ((StructuredTextPartitioner) ((IDocumentExtension3) newInstance).getDocumentPartitioner(IStructuredPartitioning.DEFAULT_STRUCTURED_PARTITIONING));
if (partitioner != null) {
partitioner = (StructuredTextPartitioner) partitioner.newInstance();
}
((IDocumentExtension3) oldInstance).setDocumentPartitioner(IStructuredPartitioning.DEFAULT_STRUCTURED_PARTITIONING, partitioner);
}
if (partitioner == null) {
partitioner = (StructuredTextPartitioner) ((StructuredTextPartitioner) newInstance.getDocumentPartitioner()).newInstance();
oldInstance.setDocumentPartitioner(partitioner);
}
if (partitioner != null) {
partitioner.connect(oldInstance);
}
}
String existingLineDelimiter = null;
try {
existingLineDelimiter = newInstance.getLineDelimiter(0);
} catch (BadLocationException e) {
// if empty file, assume platform default
// TODO: should be using user set preference, per content type?
// $NON-NLS-1$
existingLineDelimiter = System.getProperty("line.separator");
}
// $NON-NLS-1$);
oldInstance.setLineDelimiter(existingLineDelimiter);
if (newInstance.getEncodingMemento() != null) {
oldInstance.setEncodingMemento((EncodingMemento) newInstance.getEncodingMemento().clone());
}
/**
* https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=4920
*
* JSP taglib support broken, correct by duplicating extended setup
* information (BlockTagParser extension,
* StructuredDocumentRegionParser extensions)
*/
if (oldParser instanceof StructuredDocumentRegionParserExtension && newParser instanceof StructuredDocumentRegionParserExtension) {
List oldHandlers = ((StructuredDocumentRegionParserExtension) oldParser).getStructuredDocumentRegionHandlers();
for (int i = 0; i < oldHandlers.size(); i++) {
StructuredDocumentRegionHandler handler = ((StructuredDocumentRegionHandler) oldHandlers.get(i));
if (handler instanceof StructuredDocumentRegionHandlerExtension) {
StructuredDocumentRegionHandlerExtension handlerExtension = (StructuredDocumentRegionHandlerExtension) handler;
handlerExtension.setStructuredDocument(oldInstance);
}
}
}
String holdString = newInstance.get();
newInstance = null;
oldInstance.set(holdString);
}
use of org.eclipse.wst.sse.core.internal.ltk.parser.StructuredDocumentRegionParser in project webtools.sourceediting by eclipse.
the class StructuredFileTaskScanner method findTasks.
private void findTasks(IFile file, final TaskTag[] taskTags, final IProgressMonitor monitor) {
try {
IModelHandler handler = ModelHandlerRegistry.getInstance().getHandlerFor(file);
// records if the optimized streamish parse was possible
boolean didStreamParse = false;
final IEncodedDocument defaultDocument = handler.getDocumentLoader().createNewStructuredDocument();
if (defaultDocument instanceof IStructuredDocument) {
RegionParser parser = ((IStructuredDocument) defaultDocument).getParser();
if (parser instanceof StructuredDocumentRegionParser) {
didStreamParse = true;
String charset = detectCharset(file);
StructuredDocumentRegionParser documentParser = (StructuredDocumentRegionParser) parser;
final IDocument textDocument = new Document();
setDocumentContent(textDocument, file.getContents(true), charset);
monitor.beginTask("", textDocument.getLength());
documentParser.reset(new DocumentReader(textDocument));
documentParser.addStructuredDocumentRegionHandler(new StructuredDocumentRegionHandler() {
public void nodeParsed(IStructuredDocumentRegion documentRegion) {
ITextRegionList regions = documentRegion.getRegions();
for (int j = 0; j < regions.size(); j++) {
ITextRegion comment = regions.get(j);
findTasks(textDocument, taskTags, documentRegion, comment);
}
// disconnect the document regions
if (documentRegion.getPrevious() != null) {
documentRegion.getPrevious().setPrevious(null);
documentRegion.getPrevious().setNext(null);
}
if (monitor.isCanceled()) {
// $NON-NLS-1$
textDocument.set("");
}
monitor.worked(documentRegion.getLength());
}
public void resetNodes() {
}
});
documentParser.getDocumentRegions();
}
}
if (!didStreamParse) {
// Use a StructuredDocument
IEncodedDocument document = handler.getDocumentLoader().createNewStructuredDocument(file);
monitor.beginTask("", document.getLength());
if (document instanceof IStructuredDocument) {
IStructuredDocumentRegion documentRegion = ((IStructuredDocument) document).getFirstStructuredDocumentRegion();
while (documentRegion != null) {
ITextRegionList regions = documentRegion.getRegions();
for (int j = 0; j < regions.size(); j++) {
ITextRegion comment = regions.get(j);
findTasks(document, taskTags, documentRegion, comment);
}
monitor.worked(documentRegion.getLength());
documentRegion = documentRegion.getNext();
}
}
}
} catch (CoreException e) {
// $NON-NLS-1$
Logger.logException("Exception with " + file.getFullPath().toString(), e);
} catch (CharacterCodingException e) {
// $NON-NLS-1$
Logger.log(Logger.INFO, "StructuredFileTaskScanner encountered CharacterCodingException reading " + file.getFullPath());
} catch (Exception e) {
// $NON-NLS-1$
Logger.logException("Exception with " + file.getFullPath().toString(), e);
}
monitor.done();
}
use of org.eclipse.wst.sse.core.internal.ltk.parser.StructuredDocumentRegionParser in project webtools.sourceediting by eclipse.
the class DocumentRegionProcessor method setDocument.
public void setDocument(IDocument doc) {
if (getDocument() instanceof IStructuredDocument) {
RegionParser parser = ((IStructuredDocument) getDocument()).getParser();
if (parser instanceof StructuredDocumentRegionParser) {
((StructuredDocumentRegionParser) parser).removeStructuredDocumentRegionHandler(fResetHandler);
}
}
super.setDocument(doc);
IReconcilingStrategy validatorStrategy = getValidatorStrategy();
if (validatorStrategy != null) {
validatorStrategy.setDocument(doc);
}
if (fSemanticHighlightingStrategy != null) {
fSemanticHighlightingStrategy.setDocument(doc);
}
fSpellcheckStrategy = null;
if (fFoldingStrategy != null) {
fFoldingStrategy.uninstall();
}
fFoldingStrategy = null;
if (getDocument() instanceof IStructuredDocument) {
RegionParser parser = ((IStructuredDocument) doc).getParser();
if (parser instanceof StructuredDocumentRegionParser) {
((StructuredDocumentRegionParser) parser).addStructuredDocumentRegionHandler(fResetHandler);
}
}
}
Aggregations