Example usage for org.eclipse.jdt.internal.core.search BasicSearchEngine searchAllTypeNames

List of usage examples for org.eclipse.jdt.internal.core.search BasicSearchEngine searchAllTypeNames

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.core.search BasicSearchEngine searchAllTypeNames.

Prototype

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 

Source Link

Document

Searches for all top-level types and member types in the given scope.

Usage

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];
}