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.java53
1 files changed, 52 insertions, 1 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 02c416b24..659e215d0 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
@@ -81,6 +81,7 @@ import org.eclipse.ptp.services.core.IService;
import org.eclipse.ptp.services.core.IServiceConfiguration;
import org.eclipse.ptp.services.core.IServiceProvider;
import org.eclipse.ptp.services.core.ServiceModelManager;
+import org.eclipse.rse.connectorservice.dstore.util.StatusMonitorFactory;
/**
@@ -1203,4 +1204,54 @@ public class RemoteToolsCIndexSubsystem implements ICIndexSubsystem {
return IRemoteFastIndexerUpdateEvent.EventType.EVENT_REINDEX;
}
+ /**
+ * @since 2.1
+ */
+ 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$
+ }
+
}

Back to the top