Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java107
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;
+ }
+
}

Back to the top