blob: b7b8a36831dccea8b7b8a3f44949d9e699cf365c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2009 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
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
*******************************************************************************/
package org.eclipse.ptp.internal.rdt.core.subsystems;
import java.util.List;
import org.eclipse.cdt.core.index.IIndexFileLocation;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.ptp.internal.rdt.core.IRemoteIndexerInfoProvider;
import org.eclipse.ptp.internal.rdt.core.callhierarchy.CalledByResult;
import org.eclipse.ptp.internal.rdt.core.callhierarchy.CallsToResult;
import org.eclipse.ptp.internal.rdt.core.contentassist.Proposal;
import org.eclipse.ptp.internal.rdt.core.contentassist.RemoteContentAssistInvocationContext;
import org.eclipse.ptp.internal.rdt.core.includebrowser.IIndexIncludeValue;
import org.eclipse.ptp.internal.rdt.core.index.RemoteIndexerTask;
import org.eclipse.ptp.internal.rdt.core.model.Scope;
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;
import org.eclipse.ptp.internal.rdt.core.typehierarchy.THGraph;
/**
* @author crecoskie
*
* Provides index related services from a remote host.
*
* This interface is implemented by the indexing subsystem. It is not meant to be implemented by clients.
*
* It is expected that there is only one ICIndexSubsystem active on a given connector service.
*
*/
public interface ICIndexSubsystem {
/**
* Checks the state of the given project to ensure it is indexing services
* for it is initialized and consistent.
*
* @param project
* @param monitor
*/
public void checkProject(IProject project, IProgressMonitor monitor);
/**
* Checks the state of all the projects in the workspace to ensure
* indexing services for them are all initialized and consistent.
*
* @param monitor
*/
public void checkAllProjects(IProgressMonitor monitor);
// index management
/**
* Re-indexes the given scope.
*
* As a precaution the index location is taken as a parameter to ensure
* that the index file is always generated in the correct location.
*
* @param scope
* @param monitor
* @param indexLocation Path to the location of the index file.
* @param task that this operation originates from
* @return IStatus indicating success or failure
*/
public IStatus reindexScope(Scope scope, IRemoteIndexerInfoProvider provider, String indexLocation, IProgressMonitor monitor, RemoteIndexerTask task);
/**
* Incrementally indexes based on a delta of added, changed, and removed elements. Valid elements can be
* of type ITranslationUnit, ICContainer, or ICProject.
*
* @param scope
* @param newElements
* @param changedElements
* @param deletedElements
* @param monitor
* @param task that this operation originates from
* @return IStatus indicating success or failure
*/
public IStatus indexDelta(Scope scope, IRemoteIndexerInfoProvider provider, List<ICElement> newElements, List<ICElement> changedElements,
List<ICElement> deletedElements, IProgressMonitor monitor, RemoteIndexerTask task);
// scope management
/**
* Registers a scope for later reference.
*
* @param scope
* @param elements The elements which comprise the scope. Valid element types are ITranslationUnit, ICContainer, and ICProject
* @param indexLocation The path of the directory that contains the index file.
* @param monitor
* @return IStatus indicating success or failure.
*/
public IStatus registerScope(Scope scope, List<ICElement> elements, String indexLocation, IProgressMonitor monitor);
/**
* Unregisters a scope. Effectively, the scope manager will remove it from its list of managed scopes.
*
* @param scope
* @param monitor
* @return
*/
public IStatus unregisterScope(Scope scope, IProgressMonitor monitor);
/**
* Remove index file on remote host.
*
* @param scope
* @param monitor
* @return
*/
public IStatus removeIndexFile(Scope scope, IProgressMonitor monitor);
// call hierarchy service
/**
* Gets the callers of a given selection. This method will only succeed if the selection corresponds to
* a function, method, or constructor.
*
* @param scope
* @param subject The ICElement that is the subject of the operation.
* @param monitor
*/
public CalledByResult getCallers(Scope scope, ICElement subject, IProgressMonitor monitor);
/**
* Gets the callees of a given selection. This method will only succeed if the selection corresponds to
* a function, method, or constructor.
*
* @param scope
* @param subject The name of the ICElement that is the subject of the operation.
* @param filePath The path to the file in which the subject resides.
* @param selectionStart The offset into the file at which the subject was selected.
* @param selectionLength The length of the selection in which the subject was selected.
* @param monitor
*/
public CallsToResult getCallees(Scope scope, ICElement subject, IProgressMonitor monitor);
/**
* Gets the definition of the element in a given selection.
*
* @param scope
* @param subject The name of the ICElement that is the subject of the operation.
* @param monitor
* @return the ICElements corresponding to each known definition of the subject.
*/
public ICElement[] getCHDefinitions(Scope scope, ICElement subject, IProgressMonitor monitor);
/**
* Gets the definition of the element in a given selection.
*
* @param scope
* @param unit The ITranslationUnit that contains the selection
* @param selectionStart The offset into the translation unit at which the subject was selected.
* @param selectionLength The length of the selection in which the subject was selected.
* @param monitor
* @return the ICElements corresponding to each known definition of the subject.
*/
public ICElement[] getCHDefinitions(Scope scope, ITranslationUnit unit, int selectionStart, int selectionLength, IProgressMonitor pm);
/**
* Runs the following search query and returns the results.
*
* @param scope
* @param query The query to be run.
* @param monitor
* @return A List of RemoteSearchMatch objects containing the search results.
*/
public List<RemoteSearchMatch> runQuery(Scope scope, RemoteSearchQuery query, IProgressMonitor monitor);
/**
* Returns content assist completion proposals for the given context.
*
* @param scope
* @param context describes the conditions under which content assist was
* invoked.
* @param unit the translation unit in which content assist was invoked.
* @return completion proposals for the given context.
*/
public List<Proposal> computeCompletionProposals(Scope scope, RemoteContentAssistInvocationContext context, ITranslationUnit unit);
/**
* Returns the supertype and subtype graph for the class associated with
* with given input.
*
* @param scope
* @param input the element for which a supertype and subtype graph should be
* computed.
* @param monitor
* @return
*/
public THGraph computeTypeGraph(Scope scope, ICElement input, IProgressMonitor monitor);
/**
* Returns a pair of <code>ICElement</code>s corresponding to the
* definition of the associated type of the given input, as well as the
* definition of the input.
*
* @param scope
* @param input the element from which the associated type will be computed.
* @return
*/
public ICElement[] findTypeHierarchyInput(Scope scope, ICElement input);
/**
* Returns a pair of <code>ICElement</code>s corresponding to the
* definition of the parent type of the given selection in the
* <code>ITranslationUnit</code>, as well as the definition of the
* selection.
*
* @param scope
* @param unit the <code>ITranslationUnit</code> that should be searched.
* @param selectionStart the character offset of the selection.
* @param selectionLength the total characters in the selection.
* @return
*/
public ICElement[] findTypeHierarchyInput(Scope scope, ITranslationUnit unit, int selectionStart, int selectionLength);
/**
* Returns a list of names that represent the declarations of the
* given selection in the ITranslationUnit.
*
* @param scope
* @param unit the <code>ITranslationUnit</code> that should be searched.
* @param selectedText used as a fallback for searching the index
* @param selectionStart the character offset of the selection.
* @param selectionLength the total characters in the selection.
* @param monitor
* @return
*/
public OpenDeclarationResult openDeclaration(Scope scope, ITranslationUnit unit, String selectedText, int selectionStart, int selectionLength, IProgressMonitor monitor);
public IIndexIncludeValue[] findIncludesTo(Scope scope, IIndexFileLocation location, IProgressMonitor monitor);
public IIndexIncludeValue[] findIncludedBy(Scope scope, IIndexFileLocation location, IProgressMonitor monitor);
public boolean isIndexed(Scope scope, IIndexFileLocation location, IProgressMonitor monitor);
public IIndexIncludeValue findInclude(Scope scope, IIndexFileLocation location, String name, int offset, IProgressMonitor monitor);
/**
* Returns a model built using the content of the given translation unit
* @param unit
* @param monitor
* @return
*/
public ITranslationUnit getModel(ITranslationUnit unit, IProgressMonitor monitor);
public String moveIndexFile(String scopeName, String newIndexLocation, IProgressMonitor monitor);
}