List of usage examples for org.eclipse.jdt.core.search SearchEngine search
public void search(SearchPattern pattern, SearchParticipant[] participants, IJavaSearchScope scope, SearchRequestor requestor, IProgressMonitor monitor) throws CoreException
From source file:ca.uvic.chisel.javasketch.internal.JavaSearchUtils.java
License:Open Source License
private static IJavaElement searchForType(String classSignature, IJavaSearchScope scope, IProgressMonitor monitor) throws CoreException, InterruptedException { try {/*ww w . j a v a 2s . co m*/ synchronized (cachedTypes) { IType found = cachedTypes.get(classSignature); if (found != null) { return found; } SearchEngine engine = new SearchEngine(); SearchPattern pattern = null; SearchParticipant participant = SearchEngine.getDefaultSearchParticipant(); LocalSearchRequestor requestor = new LocalSearchRequestor(); pattern = SearchPattern.createPattern(classSignature.replace('$', '.'), IJavaSearchConstants.CLASS, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_EXACT_MATCH); engine.search(pattern, new SearchParticipant[] { participant }, scope, requestor, monitor); if (requestor.matches.size() > 0) { found = (IType) requestor.matches.get(0).getElement(); if (found.getFullyQualifiedName().equals(classSignature)) { cachedTypes.put(classSignature, found); return found; } } String[] className = classSignature.split("\\$"); found = cachedTypes.get(className[0]); if (found == null) { //find the class pattern = SearchPattern.createPattern(className[0], IJavaSearchConstants.CLASS, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_EXACT_MATCH); engine.search(pattern, new SearchParticipant[] { participant }, scope, requestor, monitor); if (monitor.isCanceled()) { throw new InterruptedException(); } if (requestor.matches.size() > 0) { found = (IType) requestor.matches.get(0).getElement(); if (found.getFullyQualifiedName().equals(classSignature)) { for (SearchMatch match : requestor.matches) { IType temp = (IType) match.getElement(); if (temp.getTypeRoot() instanceof ICompilationUnit) { //prefer source types. found = temp; break; } } if (cachedTypes.size() > 100) { cachedTypes.clear(); } cachedTypes.put(className[0], found); } else { found = null; } } } if (found == null) return null; StringBuilder childTypeName = new StringBuilder(); childTypeName.append(className[0]); //check each of the indexes for the sub-types for (int i = 1; i < className.length; i++) { childTypeName.append('$'); childTypeName.append(className[i]); IType parent = found; found = cachedTypes.get(childTypeName.toString()); if (found == null) { boolean isAnonymous = false; Integer occurrenceCount = -1; try { occurrenceCount = Integer.parseInt(className[i]); isAnonymous = true; } catch (NumberFormatException e) { isAnonymous = false; } if (isAnonymous) { if (!parent.isBinary()) { found = parent.getType("", occurrenceCount); if (found != null) { if (found.exists()) { cachedTypes.put(childTypeName.toString(), found); continue; } else { found = null; } } } else { //if it is a binary type, there is no hope for //finding an anonymous inner class. Use the number //as the type name, and cache the handle. found = parent.getType(className[i]); cachedTypes.put(childTypeName.toString(), found); continue; } } ArrayList<IType> childTypes = new ArrayList<IType>(); LinkedList<IJavaElement> children = new LinkedList<IJavaElement>(); children.addAll(Arrays.asList(parent.getChildren())); while (children.size() > 0) { IJavaElement child = children.removeFirst(); if (child instanceof IType) { childTypes.add((IType) child); } else if (child instanceof IMember) { children.addAll(Arrays.asList(((IMember) child).getChildren())); } } int numIndex = 0; while (numIndex < className[i].length() && Character.isDigit(className[i].charAt(numIndex))) { numIndex++; } String name = className[i]; try { //get a number at the beginning to find out if //there is an occurrence count if (numIndex <= name.length()) { occurrenceCount = parseInt(name.substring(0, numIndex)); if (occurrenceCount == null) { occurrenceCount = 1; } if (numIndex < name.length() - 1) { name = name.substring(numIndex); } else { name = ""; } } for (IType childType : childTypes) { if ("".equals(name)) { if (childType.getOccurrenceCount() == occurrenceCount) { found = childType; break; } } else { if (name.equals(childType.getElementName()) && childType.getOccurrenceCount() == occurrenceCount) { found = childType; break; } } } if (found == null) { if ("".equals(name)) { found = parent.getTypeRoot().getJavaProject().findType(classSignature); //found = parent.getType("" + occurrenceCount); } else { found = parent.getType(name, occurrenceCount); } } cachedTypes.put(childTypeName.toString(), found); } catch (Exception e) { e.printStackTrace(); } } } return found; } } catch (Exception e) { SketchPlugin.getDefault().log(e); return null; } }
From source file:ccw.editors.clojure.ClojureProposalProcessor.java
License:Open Source License
private List<ICompletionProposal> computeAndAddJavaInstanceMethodCompletionProposal( final PrefixInfo prefixInfo) { final List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(); if (!checkJavaPrefixLength(prefixInfo)) { return Collections.emptyList(); }/*from www . jav a2 s. co m*/ final String methodPrefix = prefixInfo.prefix.substring(1); System.out.println("method prefix:" + methodPrefix); boolean isPattern = (methodPrefix.contains("*") || methodPrefix.contains("?")); boolean autoAddEndWildcard = isPattern && !methodPrefix.endsWith("*"); SearchPattern pattern = SearchPattern.createPattern(autoAddEndWildcard ? methodPrefix + "*" : methodPrefix, IJavaSearchConstants.METHOD, // | IJavaSearchConstants.FIELD, // IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, isPattern ? SearchPattern.R_PATTERN_MATCH : SearchPattern.R_PREFIX_MATCH); if (pattern != null) { IJavaProject editedFileProject = editor.getAssociatedProject(); if (editedFileProject != null) { IJavaSearchScope scope = SearchEngine .createJavaSearchScope(new IJavaElement[] { editedFileProject }); SearchRequestor requestor = new SearchRequestor() { private int counter; @Override public void beginReporting() { super.beginReporting(); System.out.println("begin reporting"); counter = 0; } @Override public void acceptSearchMatch(SearchMatch match) throws CoreException { counter++; if (counter >= MAX_JAVA_SEARCH_RESULT_NUMBER) { System.out.println("too much results (>" + MAX_JAVA_SEARCH_RESULT_NUMBER + "), throwing exception"); throw new CoreException(Status.OK_STATUS); } proposals.add(new MethodLazyCompletionProposal((IMethod) match.getElement(), methodPrefix, prefixInfo.prefixOffset + 1, null, editor)); } @Override public void endReporting() { super.endReporting(); System.out.println("end reporting : count=" + counter); } }; SearchEngine searchEngine = new SearchEngine(); try { searchEngine.search(pattern, new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }, scope, requestor, null /* no progress monitor */); assistant.setStatusMessage(MESSAGE_JAVA_COMPLETION); } catch (CoreException e) { if (e.getStatus() != Status.OK_STATUS) { CCWPlugin.logWarning("java code proposal search error in clojure dev", e); } else { errorMessage = ERROR_MESSAGE_TOO_MANY_COMPLETIONS; assistant.setStatusMessage(ERROR_MESSAGE_TOO_MANY_COMPLETIONS); } } } } return proposals; }
From source file:ccw.editors.clojure.ClojureProposalProcessor.java
License:Open Source License
private List<ICompletionProposal> computeAndAddJavaStaticMethodCompletionProposal(final PrefixInfo prefixInfo, final JavaSearchType searchType) { final List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(); if (!checkJavaPrefixLength(prefixInfo)) { return Collections.emptyList(); }//from w ww. j a v a2s .c om int nbPatterns = searchType.matchRule().length; List<SearchPattern> combinedPattern = new ArrayList<SearchPattern>(); for (int i = 0; i < nbPatterns; i++) { if (prefixInfo.prefix.length() < searchType.prefixMinLength()[i]) { continue; } SearchPattern pattern = SearchPattern.createPattern(searchType.patternStr(prefixInfo)[i], searchType.searchFor()[i], IJavaSearchConstants.DECLARATIONS, searchType.matchRule()[i]); combinedPattern.add(pattern); } IJavaProject editedFileProject = editor.getAssociatedProject(); if (editedFileProject != null) { IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { editedFileProject }); SearchRequestor requestor = new SearchRequestor() { @Override public void acceptSearchMatch(SearchMatch match) throws CoreException { proposals.add(searchType.lazyCompletionProposal(prefixInfo, editor, match)); } }; SearchEngine searchEngine = new SearchEngine(); try { for (SearchPattern pattern : combinedPattern) { if (pattern != null) { searchEngine.search(pattern, new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }, scope, requestor, null /* no progress monitor */); assistant.setStatusMessage(MESSAGE_JAVA_COMPLETION); } } } catch (CoreException e) { if (e.getStatus() != Status.OK_STATUS) { CCWPlugin.logWarning("java code proposal search error in clojure dev", e); } else { errorMessage = ERROR_MESSAGE_TOO_MANY_COMPLETIONS; assistant.setStatusMessage(ERROR_MESSAGE_TOO_MANY_COMPLETIONS); } } } return proposals; }
From source file:com.android.ide.eclipse.adt.internal.editors.Hyperlinks.java
License:Open Source License
/** * Opens a Java method referenced by the given on click attribute method name * * @param project the project containing the click handler * @param method the method name of the on click handler * @return true if the method was opened, false otherwise *///from w w w . java 2s . com public static boolean openOnClickMethod(IProject project, String method) { // Search for the method in the Java index, filtering by the required click handler // method signature (public and has a single View parameter), and narrowing the scope // first to Activity classes, then to the whole workspace. final AtomicBoolean success = new AtomicBoolean(false); SearchRequestor requestor = new SearchRequestor() { @Override public void acceptSearchMatch(SearchMatch match) throws CoreException { Object element = match.getElement(); if (element instanceof IMethod) { IMethod methodElement = (IMethod) element; String[] parameterTypes = methodElement.getParameterTypes(); if (parameterTypes != null && parameterTypes.length == 1 && ("Qandroid.view.View;".equals(parameterTypes[0]) //$NON-NLS-1$ || "QView;".equals(parameterTypes[0]))) { //$NON-NLS-1$ // Check that it's public if (Flags.isPublic(methodElement.getFlags())) { JavaUI.openInEditor(methodElement); success.getAndSet(true); } } } } }; try { IJavaSearchScope scope = null; IType activityType = null; IJavaProject javaProject = BaseProjectHelper.getJavaProject(project); if (javaProject != null) { activityType = javaProject.findType(CLASS_ACTIVITY); if (activityType != null) { scope = SearchEngine.createHierarchyScope(activityType); } } if (scope == null) { scope = SearchEngine.createWorkspaceScope(); } SearchParticipant[] participants = new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }; int matchRule = SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE; SearchPattern pattern = SearchPattern.createPattern("*." + method, IJavaSearchConstants.METHOD, IJavaSearchConstants.DECLARATIONS, matchRule); SearchEngine engine = new SearchEngine(); engine.search(pattern, participants, scope, requestor, new NullProgressMonitor()); boolean ok = success.get(); if (!ok && activityType != null) { // TODO: Create a project+dependencies scope and search only that scope // Try searching again with a complete workspace scope this time scope = SearchEngine.createWorkspaceScope(); engine.search(pattern, participants, scope, requestor, new NullProgressMonitor()); // TODO: There could be more than one match; add code to consider them all // and pick the most likely candidate and open only that one. ok = success.get(); } return ok; } catch (CoreException e) { AdtPlugin.log(e, null); } return false; }
From source file:com.android.ide.eclipse.adt.internal.editors.layout.gle2.CustomViewFinder.java
License:Open Source License
private Pair<List<String>, List<String>> findViews(final boolean layoutsOnly) { final Set<String> customViews = new HashSet<String>(); final Set<String> thirdPartyViews = new HashSet<String>(); ProjectState state = Sdk.getProjectState(mProject); final List<IProject> libraries = state != null ? state.getFullLibraryProjects() : Collections.<IProject>emptyList(); SearchRequestor requestor = new SearchRequestor() { @Override// w w w.j ava 2 s .co m public void acceptSearchMatch(SearchMatch match) throws CoreException { // Ignore matches in comments if (match.isInsideDocComment()) { return; } Object element = match.getElement(); if (element instanceof ResolvedBinaryType) { // Third party view ResolvedBinaryType type = (ResolvedBinaryType) element; IPackageFragment fragment = type.getPackageFragment(); IPath path = fragment.getPath(); String last = path.lastSegment(); // Filter out android.jar stuff if (last.equals(FN_FRAMEWORK_LIBRARY)) { return; } if (!isValidView(type, layoutsOnly)) { return; } IProject matchProject = match.getResource().getProject(); if (mProject == matchProject || libraries.contains(matchProject)) { String fqn = type.getFullyQualifiedName(); thirdPartyViews.add(fqn); } } else if (element instanceof ResolvedSourceType) { // User custom view IProject matchProject = match.getResource().getProject(); if (mProject == matchProject || libraries.contains(matchProject)) { ResolvedSourceType type = (ResolvedSourceType) element; if (!isValidView(type, layoutsOnly)) { return; } String fqn = type.getFullyQualifiedName(); fqn = fqn.replace('$', '.'); customViews.add(fqn); } } } }; try { IJavaProject javaProject = BaseProjectHelper.getJavaProject(mProject); if (javaProject != null) { String className = layoutsOnly ? CLASS_VIEWGROUP : CLASS_VIEW; IType viewType = javaProject.findType(className); if (viewType != null) { IJavaSearchScope scope = SearchEngine.createHierarchyScope(viewType); SearchParticipant[] participants = new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }; int matchRule = SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE; SearchPattern pattern = SearchPattern.createPattern("*", IJavaSearchConstants.CLASS, IJavaSearchConstants.IMPLEMENTORS, matchRule); SearchEngine engine = new SearchEngine(); engine.search(pattern, participants, scope, requestor, new NullProgressMonitor()); } } } catch (CoreException e) { AdtPlugin.log(e, null); } List<String> custom = new ArrayList<String>(customViews); List<String> thirdParty = new ArrayList<String>(thirdPartyViews); if (!layoutsOnly) { // Update our cached answers (unless we were filtered on only layouts) mCustomViews = custom; mThirdPartyViews = thirdParty; } return Pair.of(custom, thirdParty); }
From source file:com.android.ide.eclipse.adt.internal.editors.manifest.ManifestInfo.java
License:Open Source License
/** * Performs a search using the given pattern, scope and handler. The search will abort * if it takes longer than {@link #SEARCH_TIMEOUT_MS} milliseconds. *///from w w w.j a v a2s.c o m private static void search(SearchRequestor requestor, IJavaProject javaProject, SearchPattern pattern) throws CoreException { // Find the package fragment specified in the manifest; the activities should // live there. IJavaSearchScope scope = createPackageScope(javaProject); SearchParticipant[] participants = new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }; SearchEngine engine = new SearchEngine(); final long searchStart = System.currentTimeMillis(); NullProgressMonitor monitor = new NullProgressMonitor() { private boolean mCancelled; @Override public void internalWorked(double work) { long searchEnd = System.currentTimeMillis(); if (searchEnd - searchStart > SEARCH_TIMEOUT_MS) { mCancelled = true; } } @Override public boolean isCanceled() { return mCancelled; } }; engine.search(pattern, participants, scope, requestor, monitor); }
From source file:com.android.ide.eclipse.adt.internal.editors.xml.Hyperlinks.java
License:Open Source License
/** * Opens a Java method referenced by the given on click attribute method name * * @param project the project containing the click handler * @param method the method name of the on click handler * @return true if the method was opened, false otherwise *//*from w ww . j a va 2 s.c o m*/ public static boolean openOnClickMethod(IProject project, String method) { // Search for the method in the Java index, filtering by the required click handler // method signature (public and has a single View parameter), and narrowing the scope // first to Activity classes, then to the whole workspace. final AtomicBoolean success = new AtomicBoolean(false); SearchRequestor requestor = new SearchRequestor() { @Override public void acceptSearchMatch(SearchMatch match) throws CoreException { Object element = match.getElement(); if (element instanceof IMethod) { IMethod methodElement = (IMethod) element; String[] parameterTypes = methodElement.getParameterTypes(); if (parameterTypes != null && parameterTypes.length == 1 && ("Qandroid.view.View;".equals(parameterTypes[0]) //$NON-NLS-1$ || "QView;".equals(parameterTypes[0]))) { //$NON-NLS-1$ // Check that it's public if (Flags.isPublic(methodElement.getFlags())) { JavaUI.openInEditor(methodElement); success.getAndSet(true); } } } } }; try { IJavaSearchScope scope = null; IType activityType = null; IJavaProject javaProject = BaseProjectHelper.getJavaProject(project); if (javaProject != null) { activityType = javaProject.findType(SdkConstants.CLASS_ACTIVITY); if (activityType != null) { scope = SearchEngine.createHierarchyScope(activityType); } } if (scope == null) { scope = SearchEngine.createWorkspaceScope(); } SearchParticipant[] participants = new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }; int matchRule = SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE; SearchPattern pattern = SearchPattern.createPattern("*." + method, IJavaSearchConstants.METHOD, IJavaSearchConstants.DECLARATIONS, matchRule); SearchEngine engine = new SearchEngine(); engine.search(pattern, participants, scope, requestor, new NullProgressMonitor()); boolean ok = success.get(); if (!ok && activityType != null) { // TODO: Create a project+dependencies scope and search only that scope // Try searching again with a complete workspace scope this time scope = SearchEngine.createWorkspaceScope(); engine.search(pattern, participants, scope, requestor, new NullProgressMonitor()); // TODO: There could be more than one match; add code to consider them all // and pick the most likely candidate and open only that one. ok = success.get(); } return ok; } catch (CoreException e) { AdtPlugin.log(e, null); } return false; }
From source file:com.android.ide.eclipse.adt.internal.refactoring.core.AndroidPackageRenameParticipant.java
License:Open Source License
@Override protected boolean initialize(final Object element) { mIsPackage = false;// ww w. ja v a 2s . c om try { if (element instanceof IPackageFragment) { mPackageFragment = (IPackageFragment) element; if (!mPackageFragment.containsJavaResources()) return false; IJavaProject javaProject = (IJavaProject) mPackageFragment.getAncestor(IJavaElement.JAVA_PROJECT); IProject project = javaProject.getProject(); IResource manifestResource = project .findMember(AdtConstants.WS_SEP + SdkConstants.FN_ANDROID_MANIFEST_XML); if (manifestResource == null || !manifestResource.exists() || !(manifestResource instanceof IFile)) { RefactoringUtil.logInfo("Invalid or missing the " + SdkConstants.FN_ANDROID_MANIFEST_XML + " in the " + project.getName() + " project."); return false; } mAndroidManifest = (IFile) manifestResource; String packageName = mPackageFragment.getElementName(); ManifestData manifestData; manifestData = AndroidManifestHelper.parseForData(mAndroidManifest); if (manifestData == null) { return false; } mAppPackage = manifestData.getPackage(); mOldName = packageName; mNewName = getArguments().getNewName(); if (mOldName == null || mNewName == null) { return false; } if (RefactoringUtil.isRefactorAppPackage() && mAppPackage != null && mAppPackage.equals(packageName)) { mIsPackage = true; } mAndroidElements = addAndroidElements(); try { final IType type = javaProject.findType(SdkConstants.CLASS_VIEW); SearchPattern pattern = SearchPattern.createPattern("*", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_REGEXP_MATCH); IJavaSearchScope scope = SearchEngine .createJavaSearchScope(new IJavaElement[] { mPackageFragment }); final HashSet<IType> elements = new HashSet<IType>(); SearchRequestor requestor = new SearchRequestor() { @Override public void acceptSearchMatch(SearchMatch match) throws CoreException { Object elem = match.getElement(); if (elem instanceof IType) { IType eType = (IType) elem; IType[] superTypes = JavaModelUtil.getAllSuperTypes(eType, new NullProgressMonitor()); for (int i = 0; i < superTypes.length; i++) { if (superTypes[i].equals(type)) { elements.add(eType); break; } } } } }; SearchEngine searchEngine = new SearchEngine(); searchEngine.search(pattern, new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }, scope, requestor, null); List<String> views = new ArrayList<String>(); for (IType elem : elements) { views.add(elem.getFullyQualifiedName()); } if (views.size() > 0) { String[] classNames = views.toArray(new String[0]); addLayoutChanges(project, classNames); } } catch (CoreException e) { RefactoringUtil.log(e); } return mIsPackage || mAndroidElements.size() > 0 || mFileChanges.size() > 0; } } catch (JavaModelException ignore) { } return false; }
From source file:com.android.ide.eclipse.adt.SourceRevealer.java
License:Open Source License
private List<SearchMatch> searchForPattern(String pattern, int searchFor, Predicate<SearchMatch> filterPredicate) { SearchEngine se = new SearchEngine(); SearchPattern searchPattern = SearchPattern.createPattern(pattern, searchFor, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE); SearchResultAccumulator requestor = new SearchResultAccumulator(filterPredicate); try {//from w w w. j a v a 2s.com se.search(searchPattern, new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }, SearchEngine.createWorkspaceScope(), requestor, new NullProgressMonitor()); } catch (CoreException e) { AdtPlugin.printErrorToConsole(e.getMessage()); return Collections.emptyList(); } return requestor.getMatches(); }
From source file:com.android.ide.eclipse.auidt.internal.editors.layout.gle2.CustomViewFinder.java
License:Open Source License
private Pair<List<String>, List<String>> findViews(final boolean layoutsOnly) { final Set<String> customViews = new HashSet<String>(); final Set<String> thirdPartyViews = new HashSet<String>(); ProjectState state = Sdk.getProjectState(mProject); final List<IProject> libraries = state != null ? state.getFullLibraryProjects() : Collections.<IProject>emptyList(); SearchRequestor requestor = new SearchRequestor() { @Override/*from w ww .ja v a 2 s . c o m*/ public void acceptSearchMatch(SearchMatch match) throws CoreException { // Ignore matches in comments if (match.isInsideDocComment()) { return; } Object element = match.getElement(); if (element instanceof ResolvedBinaryType) { // Third party view ResolvedBinaryType type = (ResolvedBinaryType) element; IPackageFragment fragment = type.getPackageFragment(); IPath path = fragment.getPath(); String last = path.lastSegment(); // Filter out android.jar stuff /* if (last.equals(FN_FRAMEWORK_LIBRARY)) { return; }*/ if (last.equals(FN_FRAMEWORK_LIBRARY)) { return; } if (!isValidView(type, layoutsOnly)) { return; } IProject matchProject = match.getResource().getProject(); if (mProject == matchProject || libraries.contains(matchProject)) { String fqn = type.getFullyQualifiedName(); thirdPartyViews.add(fqn); } } else if (element instanceof ResolvedSourceType) { // User custom view IProject matchProject = match.getResource().getProject(); if (mProject == matchProject || libraries.contains(matchProject)) { ResolvedSourceType type = (ResolvedSourceType) element; if (!isValidView(type, layoutsOnly)) { return; } String fqn = type.getFullyQualifiedName(); fqn = fqn.replace('$', '.'); customViews.add(fqn); } } } }; try { IJavaProject javaProject = BaseProjectHelper.getJavaProject(mProject); if (javaProject != null) { String className = layoutsOnly ? CLASS_VIEWGROUP : CLASS_VIEW; IType viewType = javaProject.findType(className); if (viewType != null) { IJavaSearchScope scope = SearchEngine.createHierarchyScope(viewType); SearchParticipant[] participants = new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }; int matchRule = SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE; SearchPattern pattern = SearchPattern.createPattern("*", IJavaSearchConstants.CLASS, IJavaSearchConstants.IMPLEMENTORS, matchRule); SearchEngine engine = new SearchEngine(); engine.search(pattern, participants, scope, requestor, new NullProgressMonitor()); } } } catch (CoreException e) { AdtPlugin.log(e, null); } List<String> custom = new ArrayList<String>(customViews); List<String> thirdParty = new ArrayList<String>(thirdPartyViews); if (!layoutsOnly) { // Update our cached answers (unless we were filtered on only layouts) mCustomViews = custom; mThirdPartyViews = thirdParty; } return Pair.of(custom, thirdParty); }