blob: 217f472543008b82023093fd872b173d1711d390 [file] [log] [blame]
package org.eclipse.jdt.internal.core.builder;
public interface ISearchFactory
{
/* Flags for search context */
/**
* Context flag indicating that declarations are to be searched.
* Searches using this flag search over type, inner type,
* field, method and constructor declarations.
*/
int SEARCH_FOR_DECLS = 0x01;
/**
* Context flag indicating that references in the principle structure
* are to be searched. The only references which are contained in the
* principle structure are references to types and packages -- in field
* declarations, superclass/superinterface declarations, parameter, exception,
* and method return types.
*/
int SEARCH_FOR_PRINCIPLE_STRUCTURE_REFS = 0x02;
/**
* Context flag indicating that references in the source are to be
* searched. Only references made within the body of methods/constructors,
* in static and instance initializers, or in import declarations are
* treated as source references. References such as superclass names and
* parameter, exception and method return types, etc. are found in the
* principle structure.
*/
int SEARCH_FOR_SOURCE_REFS = 0x04;
/**
* Returns an <code>ISearch</code> that will look for fields with a matching
* name.
* <p>
* <b>Example:</b> Searching for declarations of fields named <code>width</code>
* in package <code>java.awt</code>.
* <pre><code>
* IImage image = dc.getImage();
* ISearchFactory sf = image.newSearchFactory();
* IHandle[] scope = {image.getPackageHandle("java.awt", false)};
* ISearch search =
* sf.searchForField(
* "width",
* scope,
* ISearchFactory.SEARCH_FOR_DECLS);
* search.run();
* </code></pre>
* @param fieldName the name of the field to search for, possibly containing
* wildcards ("*")
* @param scope the packages and types to search in
* @param context the context flags. SEARCH_FOR_DECLS, and
* SEARCH_FOR_SOURCE_REFS are valid flags for field searches.
* SEARCH_FOR_PRINCIPLE_STRUCTURE_REFS will not have any effect on
* the search because there are no field references in the principle
* structure.
*
*
* @see ISearch
*/
ISearch searchForField(
String fieldName,
IHandle[] scope,
int context);
/**
* Returns an <code>ISearch</code> that will look for methods or constructors
* with matching name, parameter types, and return type.
* <p>
* When searching for a constructor, the return type is ignored.
* <p>
* <b>Example:</b> Search for declarations of methods named <code>toString</code>
* whose second argument is <code>int</code>. The search will be conducted
* in the scope of the <code>hanoiExample</code> package.
* <code><pre>
* IImage image = dc.getImage();
* ISearchFactory factory = image.newSearchFactory();
* IHandle[] scope = {image.getPackageHandle("hanoiExample")};
* ISearch search =
* factory.searchForMethod(
* "toString",
* new String[] {"*", "int"},
* "*",
* scope,
* SEARCH_FOR_DECLS);
* search.run();
* </code></pre>
* <br>
* @param methodName the method name to search for, possibly containing wildcards ("*")
* @param paramTypes the names of parameter types the method being searched for must
* have, possibly containing wildcards. An empty array indicates a method with
* zero parameters.
* @param returnType the name of the return type the method being
* searched for must have, possibly containing wildcards. A return type
* of "*" effectively ignores the return type.
* @param scope the packages and types to search in
* @param context the context flags. SEARCH_FOR_DECLS make sense as a flag for
* this method search. Using SEARCH_FOR_PRINCIPLE_STRUCTURE_REFS will have no effect since methods
* cannot be referenced in the principle structure. When searching the source,
* SEARCH_FOR_SOURCE_REFS will ignore the return type, and only use the
* number of parameters, not the parameter types. This is because at the source
* level only the method name and number of parameters are
* known.
* @see ISearch
*/
ISearch searchForMethod(
String methodName,
String[] paramTypes,
String returnType,
IHandle[] scope,
int context);
/**
* Returns an <code>ISearch</code> that will look for methods or constructors
* with matching name, number of parameters, and return type. A parameter count
* of -1 indicates that the number of parameters doesn't matter.
* <p>
* When searching for a constructor, the return type is ignored.
* <p>
* <b>Example 1:</b> Search for declarations and references to methods named <code>add</code>
* which have 2 arguments. The search will be conducted in the scope of the <code>hanoiExample</code>
* package. Note that the principle structure is not searched for references
* since it never contains information about references to methods.
* <code><pre>
* IImage image = dc.getImage();
* ISearchFactory factory = image.newSearchFactory();
* IHandle[] scope = {image.getPackageHandle("hanoiExample")};
* ISearch search =
* factory.searchForMethod(
* "add",
* 2,
* "*",
* scope,
* SEARCH_FOR_DECLS |
* SEARCH_FOR_SOURCE_REFS);
* search.run();
* </code></pre>
* <br>
* <b>Example 2:</b> Search for references to a constructor for a class named
* <code>Disk</code> which takes any number of arguments. The search will be conducted in
* the scope of the <code>hanoiExample</code> package. Note that the principle structure is not searched for references
* since it never contains information about references to methods.
* <code><pre>
* IImage image = dc.getImage();
* ISearchFactory factory = image.newSearchFactory();
* IHandle[] scope = {image.getPackageHandle("hanoiExample")};
* ISearch search =
* factory.searchForMethod(
* "Disk",
* -1,
* "", // return type ignored for constructors
* scope,
* SEARCH_FOR_SOURCE_REFS);
* search.run();
* </code></pre>
*
* @param methodName the method name to search for, possibly containing wildcards ("*")
* @param parameterCount the number of parameters the method being
* searched for has. Use -1 if number of parameters doesn't matter
* @param returnType the name of the return type the method being
* searched for must have, possibly containing wildcards. A return type of
* "*" effectively ignores return type.
* @param scope the packages and types to search in
* @param context the context flags. SEARCH_FOR_DECLS and
* SEARCH_FOR_SOURCE_REFS make sense as flags for this method search.
* SEARCH_FOR_PRINCIPLE_STRUCTURE_REFS will not have any effect since
* principle structures cannot reference methods.
*
* @see ISearch
*/
ISearch searchForMethod(
String methodName,
int parameterCount,
String returnType,
IHandle[] scope,
int context);
/**
* Returns an <code>ISearch</code> that will look for packages with a matching
* name.
* <p>
* <b>Example:</b><br>
* Searching for all references (principle structure and source) to packages
* matching <code>java.aw*</code> in the scope of the <code>hanoiExample</code>
* package.
* <pre><code>
* IImage image = dc.getImage();
* ISearchFactory sf = image.newSearchFactory();
* IHandle[] scope = {image.getPackageHandle("hanoiExample", false)};
* ISearch search =
* sf.searchForPackage(
* "java.aw*",
* scope,
* ISearchFactory.SEARCH_FOR_PRINCIPLE_STRUCTURE_REFS |
* ISearchFactory.SEARCH_FOR_SOURCE_REFS);
* search.run();
* </code></pre>
*
* @param packageName the name of the package to search for, possibly
* containing wildcards ("*")
* @param scope the packages and types to search in
* @param context the context flags. SEARCH_FOR_PRINCIPLE_STRUCTURE_REFS,
* and SEARCH_FOR_SOURCE_REFS make sense as flags for package
* searches. Using SEARCH_FOR_DECLS will not have any effect because
* packages are not declared anywhere.
*
* @see ISearch
*/
ISearch searchForPackage(
String packageName,
IHandle[] scope,
int context);
/**
* Returns an <code>ISearch</code> that will look for types with a matching
* name.
* <p>
* <b>Example:</b><br>
* Searching for all declarations of a type named <code>Post</code> in the scope of
* package <code>hanoiExample</code>.
* <pre><code>
* IImage image = dc.getImage();
* ISearchFactory sf = image.newSearchFactory();
* IHandle[] scope = {image.getPackageHandle("hanoiExample", false)};
* ISearch search =
* sf.searchForType(
* "Post",
* scope,
* ISearchFactory.SEARCH_FOR_DECLS);
* search.run();
* </code></pre>
* @param typeName the simple name of the type to search for, possibly
* containing wildcards ("*")
* @param scope the packages and types to search in
* @param context the context flags. SEARCH_FOR_DECLS, SEARCH_FOR_PRINCIPLE_STRUCTURE_REFS,
* and SEARCH_FOR_SOURCE_REFS all make sense as flags for type searches.
*
* @see ISearch
*/
ISearch searchForType(
String typeName,
IHandle[] scope,
int context);
}