diff options
Diffstat (limited to 'rdt/org.eclipse.ptp.rdt.ui/src/org/eclipse/ptp/rdt/ui/subsystems/RSECIndexSubsystem.java')
-rwxr-xr-x | rdt/org.eclipse.ptp.rdt.ui/src/org/eclipse/ptp/rdt/ui/subsystems/RSECIndexSubsystem.java | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/rdt/org.eclipse.ptp.rdt.ui/src/org/eclipse/ptp/rdt/ui/subsystems/RSECIndexSubsystem.java b/rdt/org.eclipse.ptp.rdt.ui/src/org/eclipse/ptp/rdt/ui/subsystems/RSECIndexSubsystem.java index 449debdb6..ae3c5e3d5 100755 --- a/rdt/org.eclipse.ptp.rdt.ui/src/org/eclipse/ptp/rdt/ui/subsystems/RSECIndexSubsystem.java +++ b/rdt/org.eclipse.ptp.rdt.ui/src/org/eclipse/ptp/rdt/ui/subsystems/RSECIndexSubsystem.java @@ -64,6 +64,7 @@ import org.eclipse.ptp.internal.rdt.core.index.RemoteIndexerTask; import org.eclipse.ptp.internal.rdt.core.index.IRemoteFastIndexerUpdateEvent.EventType; 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; @@ -873,6 +874,58 @@ public class RSECIndexSubsystem extends SubSystem implements ICIndexSubsystem { return ""; //$NON-NLS-1$ } + /** + * @since 4.1 + */ + 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 = StatusMonitorFactory.getInstance().getStatusMonitorFor(getConnectorService(), 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; + } + @SuppressWarnings("unchecked") public List<Proposal> computeCompletionProposals(Scope scope, RemoteContentAssistInvocationContext context, ITranslationUnit unit) { checkAllProjects(new NullProgressMonitor()); |