Example usage for org.eclipse.jdt.core CompletionRequestor setAllowsRequiredProposals

List of usage examples for org.eclipse.jdt.core CompletionRequestor setAllowsRequiredProposals

Introduction

In this page you can find the example usage for org.eclipse.jdt.core CompletionRequestor setAllowsRequiredProposals.

Prototype

public void setAllowsRequiredProposals(int proposalKind, int requiredProposalKind, boolean allow) 

Source Link

Document

Sets whether a proposal of a given kind with a required proposal of the given kind is allowed.

Usage

From source file:org.eclipse.flux.jdt.services.ContentAssistService.java

License:Open Source License

protected JSONArray computeContentAssist(String username, String resourcePath, int offset, String prefix)
        throws JSONException {
    final List<CompletionProposal> proposals = new ArrayList<CompletionProposal>();
    final CompletionContext[] completionContextParam = new CompletionContext[] { null };

    ICompilationUnit liveEditUnit = liveEditUnits.getLiveEditUnit(username, resourcePath);
    try {/*from   w  w  w .j  ava 2 s .  c  om*/
        if (liveEditUnit != null) {
            CompletionRequestor collector = new CompletionRequestor() {
                @Override
                public void accept(CompletionProposal proposal) {
                    proposals.add(proposal);
                }

                @Override
                public void acceptContext(CompletionContext context) {
                    super.acceptContext(context);
                    completionContextParam[0] = context;
                }

            };

            // Allow completions for unresolved types - since 3.3
            collector.setAllowsRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.TYPE_REF,
                    true);
            collector.setAllowsRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.TYPE_IMPORT,
                    true);
            collector.setAllowsRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.FIELD_IMPORT,
                    true);

            collector.setAllowsRequiredProposals(CompletionProposal.METHOD_REF, CompletionProposal.TYPE_REF,
                    true);
            collector.setAllowsRequiredProposals(CompletionProposal.METHOD_REF, CompletionProposal.TYPE_IMPORT,
                    true);
            collector.setAllowsRequiredProposals(CompletionProposal.METHOD_REF,
                    CompletionProposal.METHOD_IMPORT, true);

            collector.setAllowsRequiredProposals(CompletionProposal.CONSTRUCTOR_INVOCATION,
                    CompletionProposal.TYPE_REF, true);

            collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION,
                    CompletionProposal.TYPE_REF, true);
            collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_DECLARATION,
                    CompletionProposal.TYPE_REF, true);

            collector.setAllowsRequiredProposals(CompletionProposal.TYPE_REF, CompletionProposal.TYPE_REF,
                    true);

            liveEditUnit.codeComplete(offset, collector, new NullProgressMonitor());
        }
    } catch (JavaModelException e) {
        e.printStackTrace();
    }

    List<JSONObject> jsonProposals = new ArrayList<JSONObject>(proposals.size());
    CompletionContext completionContext = completionContextParam[0];
    for (CompletionProposal proposal : proposals) {
        JSONObject jsonDescription = getDescription(proposal, completionContext);
        ProposalReplcamentInfo replacementInfo = new CompletionProposalReplacementProvider(liveEditUnit,
                proposal, completionContext, offset, prefix).createReplacement();

        JSONObject jsonProposal = new JSONObject();
        jsonProposal.put("description", jsonDescription);
        jsonProposal.put("proposal", replacementInfo.replacement);
        int initOffset = offset - prefix.length();
        if (replacementInfo.extraChanges != null) {
            jsonProposal.put("additionalEdits", Utils.editsToJsonArray(replacementInfo.extraChanges));
            initOffset += Utils.getOffsetAdjustment(replacementInfo.extraChanges, initOffset);
        }
        if (replacementInfo.positions != null && !replacementInfo.positions.isEmpty()) {
            jsonProposal.put("positions", getPositions(replacementInfo.positions, initOffset));
        }
        jsonProposal.put("escapePosition", initOffset + replacementInfo.replacement.length());
        jsonProposal.put("style", "attributedString");
        jsonProposal.put("replace", true);
        jsonProposal.put("relevance", proposal.getRelevance());

        jsonProposals.add(jsonProposal);
    }

    Collections.sort(jsonProposals, new Comparator<JSONObject>() {
        @Override
        public int compare(JSONObject o1, JSONObject o2) {
            try {
                int diff = o2.getInt("relevance") - o1.getInt("relevance");
                if (diff == 0) {
                    JSONArray nameDescription1 = o1.getJSONObject("description").getJSONArray("segments");
                    JSONArray nameDescription2 = o2.getJSONObject("description").getJSONArray("segments");
                    StringBuilder nameBuffer1 = new StringBuilder();
                    for (int i = 0; i < nameDescription1.length(); i++) {
                        nameBuffer1.append(nameDescription1.getJSONObject(i).getString("value"));
                    }
                    StringBuilder nameBuffer2 = new StringBuilder();
                    for (int i = 0; i < nameDescription2.length(); i++) {
                        nameBuffer2.append(nameDescription2.getJSONObject(i).getString("value"));
                    }
                    return nameBuffer1.toString().compareTo(nameBuffer2.toString());
                } else {
                    return diff;
                }
            } catch (JSONException e) {
                return -1;
            }
        }
    });

    return new JSONArray(jsonProposals);
}

From source file:org.jboss.tools.vscode.java.internal.handlers.CompletionHandler.java

License:Open Source License

private List<CompletionItem> computeContentAssist(ICompilationUnit unit, int line, int column) {
    if (unit == null)
        return Collections.emptyList();
    final List<CompletionItem> proposals = new ArrayList<>();
    final CompletionContext[] completionContextParam = new CompletionContext[] { null };
    try {/*from   w  w w . j  a v a 2s.  com*/
        CompletionRequestor collector = new CompletionProposalRequestor(unit, proposals);
        // Allow completions for unresolved types - since 3.3
        collector.setAllowsRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.TYPE_REF, true);
        collector.setAllowsRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.TYPE_IMPORT,
                true);
        collector.setAllowsRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.FIELD_IMPORT,
                true);

        collector.setAllowsRequiredProposals(CompletionProposal.METHOD_REF, CompletionProposal.TYPE_REF, true);
        collector.setAllowsRequiredProposals(CompletionProposal.METHOD_REF, CompletionProposal.TYPE_IMPORT,
                true);
        collector.setAllowsRequiredProposals(CompletionProposal.METHOD_REF, CompletionProposal.METHOD_IMPORT,
                true);

        collector.setAllowsRequiredProposals(CompletionProposal.CONSTRUCTOR_INVOCATION,
                CompletionProposal.TYPE_REF, true);

        collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION,
                CompletionProposal.TYPE_REF, true);
        collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_DECLARATION,
                CompletionProposal.TYPE_REF, true);

        collector.setAllowsRequiredProposals(CompletionProposal.TYPE_REF, CompletionProposal.TYPE_REF, true);

        unit.codeComplete(JsonRpcHelpers.toOffset(unit.getBuffer(), line, column), collector,
                new NullProgressMonitor());
    } catch (JavaModelException e) {
        JavaLanguageServerPlugin.logException("Problem with codeComplete for" + unit.getElementName(), e);
    }
    return proposals;
}