diff options
Diffstat (limited to 'rdt/org.eclipse.ptp.rdt.server.dstore/src/org/eclipse/ptp/rdt/server/dstore/core/RemoteToolsCIndexSubsystem.java')
-rw-r--r-- | rdt/org.eclipse.ptp.rdt.server.dstore/src/org/eclipse/ptp/rdt/server/dstore/core/RemoteToolsCIndexSubsystem.java | 107 |
1 files changed, 105 insertions, 2 deletions
diff --git a/rdt/org.eclipse.ptp.rdt.server.dstore/src/org/eclipse/ptp/rdt/server/dstore/core/RemoteToolsCIndexSubsystem.java b/rdt/org.eclipse.ptp.rdt.server.dstore/src/org/eclipse/ptp/rdt/server/dstore/core/RemoteToolsCIndexSubsystem.java index 4a055fed2..159e09d04 100644 --- a/rdt/org.eclipse.ptp.rdt.server.dstore/src/org/eclipse/ptp/rdt/server/dstore/core/RemoteToolsCIndexSubsystem.java +++ b/rdt/org.eclipse.ptp.rdt.server.dstore/src/org/eclipse/ptp/rdt/server/dstore/core/RemoteToolsCIndexSubsystem.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2011 IBM Corporation and others. + * Copyright (c) 2008, 2012 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -16,7 +16,6 @@ import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -66,6 +65,7 @@ import org.eclipse.ptp.internal.rdt.core.index.RemoteIndexerProgress; import org.eclipse.ptp.internal.rdt.core.index.RemoteIndexerTask; import org.eclipse.ptp.internal.rdt.core.miners.CDTMiner; import org.eclipse.ptp.internal.rdt.core.model.Scope; +import org.eclipse.ptp.internal.rdt.core.navigation.FoldingRegionsResult; import org.eclipse.ptp.internal.rdt.core.navigation.OpenDeclarationResult; import org.eclipse.ptp.internal.rdt.core.search.RemoteSearchMatch; import org.eclipse.ptp.internal.rdt.core.search.RemoteSearchQuery; @@ -1215,4 +1215,107 @@ public class RemoteToolsCIndexSubsystem implements ICIndexSubsystem { public EventType getReIndexEventType() { return IRemoteFastIndexerUpdateEvent.EventType.EVENT_REINDEX; } + + /** + * @since 3.0 + */ + public String computeHighlightPositions(ITranslationUnit targetUnit) { + // If something goes wrong, return an empty string. + + checkAllProjects(new NullProgressMonitor()); + DataStore dataStore = getDataStore(null); + if (dataStore == null) { + return ""; //$NON-NLS-1$ + } + DataElement queryCmd = dataStore.localDescriptorQuery(dataStore.getDescriptorRoot(), CDTMiner.C_SEMANTIC_HIGHTLIGHTING_COMPUTE_POSITIONS); + if (queryCmd == null) { + return ""; //$NON-NLS-1$ + } + NullProgressMonitor monitor = new NullProgressMonitor(); + StatusMonitor smonitor = StatusMonitor.getStatusMonitorFor(fProvider.getConnection(), dataStore); + ArrayList<Object> args = new ArrayList<Object>(); + Scope scope = new Scope(targetUnit.getCProject().getProject()); + DataElement dataElement = dataStore.createObject(null, CDTMiner.T_SCOPE_SCOPENAME_DESCRIPTOR, scope.getName()); + + args.add(dataElement); + args.add(createSerializableElement(dataStore, targetUnit)); + + // execute the command + DataElement status = dataStore.command(queryCmd, args, dataStore.getDescriptorRoot()); + + try { + smonitor.waitForUpdate(status, monitor); + } + catch (Exception e) { + RDTLog.logError(e); + } + + DataElement element = status.get(0); + String data = element.getName(); + try { + Object result = Serializer.deserialize(data); + if (result == null || !(result instanceof String)) { + return ""; //$NON-NLS-1$; + } + return (String) result; + } catch (IOException e) { + RDTLog.logError(e); + } catch (ClassNotFoundException e) { + RDTLog.logError(e); + } + return ""; //$NON-NLS-1$ + } + + /** + * @since 3.0 + */ + public FoldingRegionsResult computeFoldingRegions(ITranslationUnit targetUnit, int docLength, boolean fPreprocessorBranchFoldingEnabled, boolean fStatementsFoldingEnabled) { + checkAllProjects(new NullProgressMonitor()); + DataStore dataStore = getDataStore(null); + if (dataStore == null) { + return null; + } + DataElement queryCmd = dataStore.localDescriptorQuery(dataStore.getDescriptorRoot(), CDTMiner.C_CODE_FOLDING_COMPUTE_REGIONS); + if (queryCmd == null) { + return null; + } + NullProgressMonitor monitor = new NullProgressMonitor(); + StatusMonitor smonitor = StatusMonitor.getStatusMonitorFor(fProvider.getConnection(), dataStore); + ArrayList<Object> args = new ArrayList<Object>(); + Scope scope = new Scope(targetUnit.getCProject().getProject()); + DataElement dataElement = dataStore.createObject(null, CDTMiner.T_SCOPE_SCOPENAME_DESCRIPTOR, scope.getName()); + + args.add(dataElement); + args.add(createSerializableElement(dataStore, targetUnit)); + args.add(dataStore.createObject(null, CDTMiner.T_INDEX_INT_DESCRIPTOR, Integer.toString(docLength))); + args.add(dataStore.createObject(null, CDTMiner.T_INDEX_BOOLEAN_DESCRIPTOR, Boolean.toString(fPreprocessorBranchFoldingEnabled))); + args.add(dataStore.createObject(null, CDTMiner.T_INDEX_BOOLEAN_DESCRIPTOR, Boolean.toString(fStatementsFoldingEnabled))); + + // execute the command + DataElement status = dataStore.command(queryCmd, args, dataStore.getDescriptorRoot()); + + try { + smonitor.waitForUpdate(status, monitor); + } + catch (Exception e) { + RDTLog.logError(e); + } + + DataElement element = status.get(0); + + String data = element.getName(); + try { + Object result = Serializer.deserialize(data); + if (result == null || !(result instanceof FoldingRegionsResult)) { + return null; + } + return (FoldingRegionsResult) result; + } catch (IOException e) { + RDTLog.logError(e); + } catch (ClassNotFoundException e) { + RDTLog.logError(e); + } + return null; + } + } |