/** * Find type * * @param className * @param monitor * @return type or <code>null</code> */ public IType findType(String className, IProgressMonitor monitor) { final IType[] result = { null }; TypeNameMatchRequestor nameMatchRequestor = new TypeNameMatchRequestor() { @Override public void acceptTypeNameMatch(TypeNameMatch match) { result[0] = match.getType(); } }; int lastDot = className.lastIndexOf('.'); char[] packageName = lastDot >= 0 ? className.substring(0, lastDot).toCharArray() : null; char[] typeName = (lastDot >= 0 ? className.substring(lastDot + 1) : className).toCharArray(); SearchEngine engine = new SearchEngine(); int packageMatchRule = SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE; try { engine.searchAllTypeNames(packageName, packageMatchRule, typeName, packageMatchRule, IJavaSearchConstants.TYPE, SearchEngine.createWorkspaceScope(), nameMatchRequestor, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, monitor); } catch (JavaModelException e) { EditorUtil.INSTANCE.logError("Was not able to search all type names",e); } return result[0]; }
private List<IType> findTypeByFqn(char[][] packages, char[][] names, IJavaSearchScope scope) throws JavaModelException { List<IType> result = new ArrayList<>(); SearchEngine searchEngine = new SearchEngine(); searchEngine.searchAllTypeNames( packages, names, scope, new TypeNameMatchRequestor() { @Override public void acceptTypeNameMatch(TypeNameMatch typeNameMatch) { result.add(typeNameMatch.getType()); } }, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, new NullProgressMonitor()); return result; }
public TypeNameMatchRequestorWrapper(TypeNameMatchRequestor requestor, IJavaSearchScope scope) { this.requestor = requestor; this.scope = scope; if (!(scope instanceof AbstractJavaSearchScope)) { this.handleFactory = new HandleFactory(); } }
public SelectionTypeNameMatchRequestorWrapper(TypeNameMatchRequestor requestor, IJavaSearchScope scope, ImportReference[] importReferences) { super(requestor, scope); this.importReferences = importReferences; }
public static IType findTypeDeclarationExact( IProject project, int searchFor, String packageName, String typeName) { final List<TypeNameMatch> matches = new ArrayList<TypeNameMatch>(); SearchEngine searchEngine = new SearchEngine(); try { IJavaSearchScope scope = SearchEngine.createJavaSearchScope( new IJavaElement[] { JavaCore.create(project) }, true); IProgressMonitor progressMonitor = null; searchEngine.searchAllTypeNames( packageName.toCharArray(), SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE, typeName.toCharArray(), SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE, searchFor, scope, new TypeNameMatchRequestor() { @Override public void acceptTypeNameMatch(TypeNameMatch match) { matches.add(match); } }, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, progressMonitor); } catch (CoreException e) { // XXX May happen, say, if classpath is incorrectly set. // Probably shouldn't invoke this method if classpath errors can be detected Activator.getDefault().logWarning("Error performing search", e); } return matches.isEmpty() ? null : matches.get(0).getType(); }