List of usage examples for org.eclipse.jdt.internal.core.search BasicSearchEngine searchAllTypeNames
public void searchAllTypeNames(final char[] packageName, final int packageMatchRule, final char[] typeName, final int typeMatchRule, int searchFor, IJavaSearchScope scope, final IRestrictedAccessTypeRequestor nameRequestor, int waitingPolicy, IProgressMonitor progressMonitor) throws JavaModelException
From source file:org.eclipse.xtext.common.types.xtext.ui.JdtTypesProposalProvider.java
License:Open Source License
protected void searchAndCreateProposals(IJavaSearchScope scope, final ICompletionProposalFactory proposalFactory, ContentAssistContext context, EReference typeReference, final Filter filter, final IValueConverter<String> valueConverter, final ICompletionProposalAcceptor acceptor) throws JavaModelException { String prefix = context.getPrefix(); List<String> split = Strings.split(prefix, '.'); char[] typeName = null; char[] packageName = null; if (prefix.length() > 0 && !split.isEmpty()) { CharMatcher dotMatcher = CharMatcher.is('.'); if (Character.isUpperCase(split.get(split.size() - 1).charAt(0))) { typeName = split.get(split.size() - 1).toCharArray(); if (split.size() > 1) packageName = ("*" + dotMatcher .replaceFrom(prefix.substring(0, prefix.length() - (typeName.length + 1)), "*.") + "*") .toCharArray(); } else {/*from w ww. j ava 2 s . c o m*/ if (prefix.endsWith(".")) prefix = prefix.substring(0, prefix.length() - 1); packageName = ("*" + dotMatcher.replaceFrom(prefix, "*.") + "*").toCharArray(); } } IScope typeScope = null; if (context.getCurrentModel() != null) { typeScope = scopeProvider.getScope(context.getCurrentModel(), typeReference); } final IReplacementTextApplier textApplier = createTextApplier(context, typeScope, qualifiedNameConverter, valueConverter); final ICompletionProposalAcceptor scopeAware = textApplier != null ? new ICompletionProposalAcceptor.Delegate(acceptor) { @Override public void accept(ICompletionProposal proposal) { if (proposal instanceof ConfigurableCompletionProposal) { ((ConfigurableCompletionProposal) proposal).setTextApplier(textApplier); } super.accept(proposal); } } : acceptor; Builder contextBuilder = context.copy(); final PrefixMatcher original = context.getMatcher(); contextBuilder.setMatcher(new PrefixMatcher() { @Override public boolean isCandidateMatchingPrefix(String name, String prefix) { if (original.isCandidateMatchingPrefix(name, prefix)) return true; String nameWithoutDollars = name.replace('$', '.'); String prefixWithoutDollars = prefix.replace('$', '.'); final boolean nameOrPrefixHasDollars = (nameWithoutDollars != name) || (prefixWithoutDollars != prefix); if (nameOrPrefixHasDollars && original.isCandidateMatchingPrefix(nameWithoutDollars, prefixWithoutDollars)) return true; String sub = nameWithoutDollars; int delimiter = sub.indexOf('.'); while (delimiter != -1) { sub = sub.substring(delimiter + 1); delimiter = sub.indexOf('.'); if (delimiter == -1 || prefixWithoutDollars.length() > 0 && Character.isLowerCase(prefixWithoutDollars.charAt(0))) { if (original.isCandidateMatchingPrefix(sub, prefixWithoutDollars)) return true; } } return false; } }); final ContentAssistContext myContext = contextBuilder.toContext(); final IJvmTypeProvider jvmTypeProvider = jdtTypeProviderFactory .findOrCreateTypeProvider(context.getResource().getResourceSet()); final Set<String> filteredTypeNames = getDirtyTypeNames(); final Filter dirtyTypenameFilter = new ITypesProposalProvider.Filter() { @Override public boolean accept(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path) { if (path == null || path.endsWith(".class") || path.endsWith(".java")) { // Java index match String identifier = getIdentifier(packageName, simpleTypeName, enclosingTypeNames); if (filteredTypeNames.contains(identifier)) { return false; } } return true; } @Override public int getSearchFor() { return filter.getSearchFor(); } }; BasicSearchEngine searchEngine = new BasicSearchEngine(); searchEngine.searchAllTypeNames(packageName, SearchPattern.R_PATTERN_MATCH, typeName, SearchPattern.R_PREFIX_MATCH | SearchPattern.R_CAMELCASE_MATCH, filter.getSearchFor(), scope, new IRestrictedAccessTypeRequestor() { @Override public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path, AccessRestriction access) { if (dirtyTypenameFilter.accept(modifiers, packageName, simpleTypeName, enclosingTypeNames, path) && filter.accept(modifiers, packageName, simpleTypeName, enclosingTypeNames, path) && (!checkAccessRestriction() || (access == null || access.getProblemId() != IProblem.ForbiddenReference && !access.ignoreIfBetter()))) { StringBuilder fqName = new StringBuilder( packageName.length + simpleTypeName.length + 1); if (packageName.length != 0) { fqName.append(packageName); fqName.append('.'); } for (char[] enclosingType : enclosingTypeNames) { /* * the JDT index sometimes yields enclosingTypeNames in the form * char[][] { { Outer$Middle } } * rather than * char[][] { { Outer }, { Middle } } * thus we create the fqName as the binary name and post process the proposal later on */ fqName.append(enclosingType); fqName.append('$'); } fqName.append(simpleTypeName); String fqNameAsString = fqName.toString(); createTypeProposal(fqNameAsString, modifiers, enclosingTypeNames.length > 0, proposalFactory, myContext, scopeAware, jvmTypeProvider, valueConverter); } } }, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, new NullProgressMonitor() { @Override public boolean isCanceled() { return !acceptor.canAcceptMoreProposals(); } }); if (acceptor.canAcceptMoreProposals()) { Iterable<IEObjectDescription> allDirtyTypes = dirtyStateManager .getExportedObjectsByType(TypesPackage.Literals.JVM_TYPE); for (IEObjectDescription description : allDirtyTypes) { QualifiedName qualifiedName = description.getQualifiedName(); final int modifiers = getDirtyStateModifiers(context, description); if (filter.accept(modifiers, qualifiedName.skipLast(1).toString().toCharArray(), qualifiedName.getLastSegment().toCharArray(), new char[0][0], description.getEObjectURI().toPlatformString(true))) { String fqName = description.getQualifiedName().toString(); createTypeProposal(fqName, modifiers, fqName.indexOf('$') > 0, proposalFactory, myContext, scopeAware, jvmTypeProvider, valueConverter); } } } }
From source file:org.eclipse.xtext.xbase.ui.imports.InteractiveUnresolvedTypeResolver.java
License:Open Source License
protected void findCandidateTypes(final JvmDeclaredType contextType, final String typeSimpleName, IJavaSearchScope searchScope, final IAcceptor<JvmDeclaredType> acceptor) throws JavaModelException { BasicSearchEngine searchEngine = new BasicSearchEngine(); final IVisibilityHelper contextualVisibilityHelper = new ContextualVisibilityHelper(visibilityHelper, contextType);/* w ww .j ava2 s. co m*/ searchEngine.searchAllTypeNames(null, SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE, typeSimpleName.toCharArray(), SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE, IJavaSearchConstants.TYPE, searchScope, new IRestrictedAccessTypeRequestor() { @Override public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path, AccessRestriction access) { final String qualifiedTypeName = getQualifiedTypeName(packageName, enclosingTypeNames, simpleTypeName); if ((access == null || (access.getProblemId() != IProblem.ForbiddenReference && !access.ignoreIfBetter())) && !TypeFilter.isFiltered(packageName, simpleTypeName)) { JvmType importType = typeRefs.findDeclaredType(qualifiedTypeName, contextType.eResource()); if (importType instanceof JvmDeclaredType && contextualVisibilityHelper.isVisible((JvmDeclaredType) importType)) { acceptor.accept((JvmDeclaredType) importType); } } } }, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, new NullProgressMonitor()); }
From source file:org.eclipse.xtext.xbase.ui.quickfix.JavaTypeQuickfixes.java
License:Open Source License
@SuppressWarnings("restriction") protected void createImportProposals(final JvmDeclaredType contextType, final Issue issue, String typeName, IJavaSearchScope searchScope, final IssueResolutionAcceptor acceptor) throws JavaModelException { if (contextType != null) { final IVisibilityHelper visibilityHelper = getVisibilityHelper(contextType); final Pair<String, String> packageAndType = typeNameGuesser.guessPackageAndTypeName(contextType, typeName);/*from ww w. ja v a2 s . c om*/ final String wantedPackageName = packageAndType.getFirst(); org.eclipse.jdt.internal.core.search.BasicSearchEngine searchEngine = new org.eclipse.jdt.internal.core.search.BasicSearchEngine(); final char[] wantedPackageChars = (isEmpty(wantedPackageName)) ? null : wantedPackageName.toCharArray(); final String wantedTypeName = packageAndType.getSecond(); searchEngine.searchAllTypeNames(wantedPackageChars, SearchPattern.R_EXACT_MATCH, wantedTypeName.toCharArray(), SearchPattern.R_EXACT_MATCH, IJavaSearchConstants.TYPE, searchScope, new org.eclipse.jdt.internal.core.search.IRestrictedAccessTypeRequestor() { @Override public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path, org.eclipse.jdt.internal.compiler.env.AccessRestriction access) { final String qualifiedTypeName = getQualifiedTypeName(packageName, enclosingTypeNames, simpleTypeName); if (access == null || (access.getProblemId() != IProblem.ForbiddenReference && !access.ignoreIfBetter())) { JvmType importType = services.getTypeReferences() .findDeclaredType(qualifiedTypeName, contextType); if (importType instanceof JvmDeclaredType && visibilityHelper.isVisible((JvmDeclaredType) importType)) { StringBuilder label = new StringBuilder("Import '"); label.append(simpleTypeName); label.append("' ("); label.append(packageName); if (enclosingTypeNames.length > 0) { for (char[] enclosingTypeName : enclosingTypeNames) { label.append("."); label.append(enclosingTypeName); } } label.append(")"); acceptor.accept(issue, label.toString(), label.toString(), "impc_obj.gif", new ISemanticModification() { @Override public void apply(EObject element, IModificationContext context) throws Exception { ReplacingAppendable appendable = appendableFactory.create( context.getXtextDocument(), (XtextResource) element.eResource(), 0, 0); appendable.append(services.getTypeReferences() .findDeclaredType(qualifiedTypeName, element)); appendable.insertNewImports(); } }, jdtTypeRelevance.getRelevance(qualifiedTypeName, wantedTypeName) + 100); } } } }, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, new NullProgressMonitor()); } }
From source file:org.eclipse.xtext.xbase.ui.quickfix.JavaTypeQuickfixes.java
License:Open Source License
@SuppressWarnings("restriction") protected boolean createConstructorProposals(final JvmDeclaredType contextType, final Issue issue, String typeName, IJavaSearchScope searchScope, final IssueResolutionAcceptor acceptor) throws JavaModelException { final boolean[] result = new boolean[] { false }; if (contextType != null) { final IVisibilityHelper visibilityHelper = getVisibilityHelper(contextType); final Pair<String, String> packageAndType = typeNameGuesser.guessPackageAndTypeName(contextType, typeName);// w w w . j a v a2 s. c o m final String wantedPackageName = packageAndType.getFirst(); final String wantedTypeName = packageAndType.getSecond(); if (typeName.endsWith(wantedTypeName)) { return false; } org.eclipse.jdt.internal.core.search.BasicSearchEngine searchEngine = new org.eclipse.jdt.internal.core.search.BasicSearchEngine(); final char[] wantedPackageChars = (isEmpty(wantedPackageName)) ? null : wantedPackageName.toCharArray(); searchEngine.searchAllTypeNames(wantedPackageChars, SearchPattern.R_EXACT_MATCH, wantedTypeName.toCharArray(), SearchPattern.R_EXACT_MATCH, IJavaSearchConstants.TYPE, searchScope, new org.eclipse.jdt.internal.core.search.IRestrictedAccessTypeRequestor() { @Override public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path, org.eclipse.jdt.internal.compiler.env.AccessRestriction access) { final String qualifiedTypeName = getQualifiedTypeName(packageName, enclosingTypeNames, simpleTypeName); if (access == null || (access.getProblemId() != IProblem.ForbiddenReference && !access.ignoreIfBetter())) { JvmType importType = services.getTypeReferences() .findDeclaredType(qualifiedTypeName, contextType); if (importType instanceof JvmDeclaredType && visibilityHelper.isVisible((JvmDeclaredType) importType)) { result[0] = true; StringBuilder label = new StringBuilder("Change to constructor call 'new "); label.append(simpleTypeName); label.append("()'"); if (!equal(wantedPackageName, new String(packageName))) { label.append(" ("); label.append(packageName); if (enclosingTypeNames.length > 0) { for (char[] enclosingTypeName : enclosingTypeNames) { label.append("."); label.append(enclosingTypeName); } } label.append(")"); } acceptor.accept(issue, label.toString(), label.toString(), "impc_obj.gif", new ISemanticModification() { @Override public void apply(EObject element, IModificationContext context) throws Exception { IXtextDocument document = context.getXtextDocument(); DocumentRewriter rewriter = rewriterFactory.create(document, (XtextResource) element.eResource()); final int typeEndOffset = document.get().indexOf(wantedTypeName, issue.getOffset() + wantedPackageName.length()) + wantedTypeName.length(); final Section section = rewriter.newSection(issue.getOffset(), typeEndOffset - issue.getOffset()); section.append(services.getTypeReferences() .findDeclaredType(qualifiedTypeName, element)); section.append("()"); final TextEdit textEdit = replaceConverter .convertToTextEdit(rewriter.getChanges()); textEdit.apply(document); } }, jdtTypeRelevance.getRelevance(qualifiedTypeName, wantedTypeName) + 100); } } } }, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, new NullProgressMonitor()); } return result[0]; }
From source file:org.summer.dsl.model.types.xtext.ui.JdtTypesProposalProvider.java
License:Open Source License
protected void searchAndCreateProposals(IJavaSearchScope scope, final ICompletionProposalFactory proposalFactory, ContentAssistContext context, EReference typeReference, final Filter filter, final IValueConverter<String> valueConverter, final ICompletionProposalAcceptor acceptor) throws JavaModelException { String prefix = context.getPrefix(); List<String> split = Strings.split(prefix, '.'); char[] typeName = null; char[] packageName = null; if (prefix.length() > 0 && !split.isEmpty()) { CharMatcher dotMatcher = CharMatcher.is('.'); if (Character.isUpperCase(split.get(split.size() - 1).charAt(0))) { typeName = split.get(split.size() - 1).toCharArray(); if (split.size() > 1) packageName = ("*" + dotMatcher .replaceFrom(prefix.substring(0, prefix.length() - (typeName.length + 1)), "*.") + "*") .toCharArray(); } else {//from ww w .java 2 s.c om if (prefix.endsWith(".")) prefix = prefix.substring(0, prefix.length() - 1); packageName = ("*" + dotMatcher.replaceFrom(prefix, "*.") + "*").toCharArray(); } } IScope typeScope = null; if (context.getCurrentModel() != null) { typeScope = scopeProvider.getScope(context.getCurrentModel(), typeReference); } final IReplacementTextApplier textApplier = createTextApplier(context, typeScope, qualifiedNameConverter, valueConverter); final ICompletionProposalAcceptor scopeAware = new ICompletionProposalAcceptor.Delegate(acceptor) { @Override public void accept(ICompletionProposal proposal) { if (proposal instanceof ConfigurableCompletionProposal) { ((ConfigurableCompletionProposal) proposal).setTextApplier(textApplier); } super.accept(proposal); } }; Builder contextBuilder = context.copy(); final PrefixMatcher original = context.getMatcher(); contextBuilder.setMatcher(new PrefixMatcher() { @Override public boolean isCandidateMatchingPrefix(String name, String prefix) { if (original.isCandidateMatchingPrefix(name, prefix)) return true; String withoutDollars = name.replace('$', '.'); String prefixWithoutDollars = prefix.replace('$', '.'); if ((withoutDollars != name || prefixWithoutDollars != prefix) && original.isCandidateMatchingPrefix(withoutDollars, prefixWithoutDollars)) return true; String sub = withoutDollars; int delimiter = sub.indexOf('.'); while (delimiter != -1) { sub = sub.substring(delimiter + 1); delimiter = sub.indexOf('.'); if (delimiter == -1 || prefixWithoutDollars.length() > 0 && Character.isLowerCase(prefixWithoutDollars.charAt(0))) { if (original.isCandidateMatchingPrefix(sub, prefixWithoutDollars)) return true; } } return false; } }); final ContentAssistContext myContext = contextBuilder.toContext(); final IJvmTypeProvider jvmTypeProvider = jdtTypeProviderFatory .findOrCreateTypeProvider(context.getResource().getResourceSet()); BasicSearchEngine searchEngine = new BasicSearchEngine(); searchEngine.searchAllTypeNames(packageName, SearchPattern.R_PATTERN_MATCH, typeName, SearchPattern.R_PREFIX_MATCH | SearchPattern.R_CAMELCASE_MATCH, filter.getSearchFor(), scope, new IRestrictedAccessTypeRequestor() { public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path, AccessRestriction access) { if (filter.accept(modifiers, packageName, simpleTypeName, enclosingTypeNames, path) && (!checkAccessRestriction() || (access == null || access.getProblemId() != IProblem.ForbiddenReference && !access.ignoreIfBetter()))) { StringBuilder fqName = new StringBuilder( packageName.length + simpleTypeName.length + 1); if (packageName.length != 0) { fqName.append(packageName); fqName.append('.'); } for (char[] enclosingType : enclosingTypeNames) { /* * the JDT index sometimes yields enclosingTypeNames in the form * char[][] { { Outer$Middle } } * rather than * char[][] { { Outer }, { Middle } } * thus we create the fqName as the binary name and post process the proposal later on */ fqName.append(enclosingType); fqName.append('$'); } fqName.append(simpleTypeName); String fqNameAsString = fqName.toString(); createTypeProposal(fqNameAsString, modifiers, enclosingTypeNames.length > 0, proposalFactory, myContext, scopeAware, jvmTypeProvider, valueConverter); } } }, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, new NullProgressMonitor() { @Override public boolean isCanceled() { return !acceptor.canAcceptMoreProposals(); } }); if (acceptor.canAcceptMoreProposals()) { Iterable<IEObjectDescription> allDirtyTypes = dirtyStateManager .getExportedObjectsByType(TypesPackage.Literals.JVM_TYPE); for (IEObjectDescription description : allDirtyTypes) { QualifiedName qualifiedName = description.getQualifiedName(); if (filter.accept(Flags.AccPublic, qualifiedName.skipLast(1).toString().toCharArray(), qualifiedName.getLastSegment().toCharArray(), new char[0][0], description.getEObjectURI().toPlatformString(true))) { String fqName = description.getQualifiedName().toString(); createTypeProposal(fqName, Flags.AccPublic, false, proposalFactory, myContext, scopeAware, jvmTypeProvider, valueConverter); } } } }
From source file:org.summer.dsl.xbase.ui.imports.InteractiveUnresolvedTypeResolver.java
License:Open Source License
protected void findCandidateTypes(final JvmDeclaredType contextType, final String typeSimpleName, IJavaSearchScope searchScope, final IAcceptor<JvmDeclaredType> acceptor) throws JavaModelException { BasicSearchEngine searchEngine = new BasicSearchEngine(); searchEngine.searchAllTypeNames(null, SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE, typeSimpleName.toCharArray(), SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE, IJavaSearchConstants.TYPE, searchScope, new IRestrictedAccessTypeRequestor() { public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path, AccessRestriction access) { final String qualifiedTypeName = getQualifiedTypeName(packageName, enclosingTypeNames, simpleTypeName); if (access == null || (access.getProblemId() != IProblem.ForbiddenReference && !access.ignoreIfBetter())) { JvmType importType = typeRefs.findDeclaredType(qualifiedTypeName, contextType.eResource()); if (importType instanceof JvmDeclaredType && visibilityService.isVisible((JvmDeclaredType) importType, contextType)) { acceptor.accept((JvmDeclaredType) importType); }/*from w w w .ja v a2 s . c om*/ } } }, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, new NullProgressMonitor()); }
From source file:org.summer.dsl.xbase.ui.quickfix.JavaTypeQuickfixes.java
License:Open Source License
protected void createImportProposals(final JvmDeclaredType contextType, final Issue issue, String typeName, IJavaSearchScope searchScope, final IssueResolutionAcceptor acceptor) throws JavaModelException { if (contextType != null) { final IVisibilityHelper visibilityHelper = getVisibilityHelper(contextType); final Pair<String, String> packageAndType = typeNameGuesser.guessPackageAndTypeName(contextType, typeName);//from w ww. ja v a 2s .co m final String wantedPackageName = packageAndType.getFirst(); BasicSearchEngine searchEngine = new BasicSearchEngine(); final char[] wantedPackageChars = (isEmpty(wantedPackageName)) ? null : wantedPackageName.toCharArray(); final String wantedTypeName = packageAndType.getSecond(); searchEngine.searchAllTypeNames(wantedPackageChars, SearchPattern.R_EXACT_MATCH, wantedTypeName.toCharArray(), SearchPattern.R_EXACT_MATCH, IJavaSearchConstants.TYPE, searchScope, new IRestrictedAccessTypeRequestor() { public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path, AccessRestriction access) { final String qualifiedTypeName = getQualifiedTypeName(packageName, enclosingTypeNames, simpleTypeName); if (access == null || (access.getProblemId() != IProblem.ForbiddenReference && !access.ignoreIfBetter())) { JvmType importType = services.getTypeReferences() .findDeclaredType(qualifiedTypeName, contextType); if (importType instanceof JvmDeclaredType && visibilityHelper.isVisible((JvmDeclaredType) importType)) { StringBuilder label = new StringBuilder("Import '"); label.append(simpleTypeName); label.append("' ("); label.append(packageName); if (enclosingTypeNames != null && enclosingTypeNames.length > 0) { for (char[] enclosingTypeName : enclosingTypeNames) { label.append("."); label.append(enclosingTypeName); } } label.append(")"); acceptor.accept(issue, label.toString(), label.toString(), "impc_obj.gif", new ISemanticModification() { public void apply(EObject element, IModificationContext context) throws Exception { ReplacingAppendable appendable = appendableFactory.create( context.getXtextDocument(), (XtextResource) element.eResource(), 0, 0); appendable.append(services.getTypeReferences() .findDeclaredType(qualifiedTypeName, element)); appendable.insertNewImports(); } }, jdtTypeRelevance.getRelevance(qualifiedTypeName, wantedTypeName) + 100); } } } }, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, new NullProgressMonitor()); } }
From source file:org.summer.dsl.xbase.ui.quickfix.JavaTypeQuickfixes.java
License:Open Source License
protected boolean createConstructorProposals(final JvmDeclaredType contextType, final Issue issue, String typeName, IJavaSearchScope searchScope, final IssueResolutionAcceptor acceptor) throws JavaModelException { final boolean[] result = new boolean[] { false }; if (contextType != null) { final IVisibilityHelper visibilityHelper = getVisibilityHelper(contextType); final Pair<String, String> packageAndType = typeNameGuesser.guessPackageAndTypeName(contextType, typeName);// w ww . j av a2 s . c o m final String wantedPackageName = packageAndType.getFirst(); final String wantedTypeName = packageAndType.getSecond(); BasicSearchEngine searchEngine = new BasicSearchEngine(); final char[] wantedPackageChars = (isEmpty(wantedPackageName)) ? null : wantedPackageName.toCharArray(); searchEngine.searchAllTypeNames(wantedPackageChars, SearchPattern.R_EXACT_MATCH, wantedTypeName.toCharArray(), SearchPattern.R_EXACT_MATCH, IJavaSearchConstants.TYPE, searchScope, new IRestrictedAccessTypeRequestor() { public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path, AccessRestriction access) { final String qualifiedTypeName = getQualifiedTypeName(packageName, enclosingTypeNames, simpleTypeName); if (access == null || (access.getProblemId() != IProblem.ForbiddenReference && !access.ignoreIfBetter())) { JvmType importType = services.getTypeReferences() .findDeclaredType(qualifiedTypeName, contextType); if (importType instanceof JvmDeclaredType && visibilityHelper.isVisible((JvmDeclaredType) importType)) { result[0] = true; StringBuilder label = new StringBuilder("Change to constructor call 'new "); label.append(simpleTypeName); label.append("()'"); if (!equal(wantedPackageName, new String(packageName))) { label.append(" ("); label.append(packageName); if (enclosingTypeNames != null && enclosingTypeNames.length > 0) { for (char[] enclosingTypeName : enclosingTypeNames) { label.append("."); label.append(enclosingTypeName); } } label.append(")"); } acceptor.accept(issue, label.toString(), label.toString(), "impc_obj.gif", new ISemanticModification() { public void apply(EObject element, IModificationContext context) throws Exception { IXtextDocument document = context.getXtextDocument(); DocumentRewriter rewriter = rewriterFactory.create(document, (XtextResource) element.eResource()); final int typeEndOffset = document.get().indexOf(wantedTypeName, issue.getOffset() + wantedPackageName.length()) + wantedTypeName.length(); final Section section = rewriter.newSection(issue.getOffset(), typeEndOffset - issue.getOffset()); section.append(services.getTypeReferences() .findDeclaredType(qualifiedTypeName, element)); section.append("()"); final TextEdit textEdit = replaceConverter .convertToTextEdit(rewriter.getChanges()); textEdit.apply(document); } }, jdtTypeRelevance.getRelevance(qualifiedTypeName, wantedTypeName) + 100); } } } }, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, new NullProgressMonitor()); } return result[0]; }