Example usage for org.eclipse.jdt.internal.codeassist InternalCompletionProposal getKind

List of usage examples for org.eclipse.jdt.internal.codeassist InternalCompletionProposal getKind

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.codeassist InternalCompletionProposal getKind.

Prototype

@Override
    public int getKind() 

Source Link

Usage

From source file:org.eclipse.recommenders.args.completion.rcp.ParameterCompletionProposalComputer.java

License:Open Source License

@Override
public final List<ICompletionProposal> computeCompletionProposals(
        final ContentAssistInvocationContext javaContext, final IProgressMonitor monitor) {
    List<ICompletionProposal> output = new ArrayList<ICompletionProposal>();

    this.jdtContext = (JavaContentAssistInvocationContext) javaContext;
    this.crContext = ctxFactory.create(jdtContext);

    //get the type of the node, and the index of parameter
    ASTNode completeNode = crContext.getCompletionNode().orNull();
    String declarationSignature = null;
    int index = 0;
    if (completeNode instanceof MessageSend) {
        MessageSend mn = (MessageSend) completeNode;
        if (mn.actualReceiverType == null) {
            return Collections.emptyList();
        }//from   w ww  .j  a v  a2 s  .  c om
        declarationSignature = new String(mn.actualReceiverType.closestMatch().signature()).replace('/', '.');

        if (mn.arguments != null) {
            index = mn.arguments.length;
        }
    } else if (completeNode instanceof CompletionOnQualifiedAllocationExpression) {
        CompletionOnQualifiedAllocationExpression cn = (CompletionOnQualifiedAllocationExpression) completeNode;
        declarationSignature = new String(cn.resolvedType.signature()).replace('/', '.');
        if (cn.arguments != null) {
            index = cn.arguments.length;
        }
    } else {
        return Collections.EMPTY_LIST;
    }

    //calculate the possible parameters for every proposal 
    Map<IJavaCompletionProposal, CompletionProposal> proposals = crContext.getProposals();
    for (IJavaCompletionProposal k : proposals.keySet()) {
        try {
            InternalCompletionProposal proposol = (InternalCompletionProposal) proposals.get(k);
            int kind = proposol.getKind();

            //if is an anonymous class declaration then continue
            if (kind == CompletionProposal.ANONYMOUS_CLASS_DECLARATION) {
                continue;
            }

            if (getParameterTypes(proposol).length <= index) {
                continue;
            }

            char[][] parameterNames = proposol.findParameterNames(null);
            PreciseParamRecommender preciseParamRecommender = new PreciseParamRecommender();
            preciseParamRecommender.setIcu(jdtContext.getCompilationUnit());
            preciseParamRecommender.setClassName(declarationSignature);
            preciseParamRecommender.setSrcString(jdtContext.getCompilationUnit().getSource());
            String methodName = "";

            if (proposol.getName() == null) {
                String s = declarationSignature;
                s = s.substring(1, s.length() - 1);
                Class ownClass = Class.forName(s);
                methodName = ownClass.getSimpleName();
            } else {
                methodName = new String(proposol.getName());
            }
            preciseParamRecommender.setMethodName(new StringBuffer().append(methodName));
            preciseParamRecommender.setParameterNames(proposol.findParameterNames(null));
            preciseParamRecommender.setParameterTypes(getParameterTypes(proposol));
            preciseParamRecommender.setInvocationOffset(jdtContext.getInvocationOffset());
            preciseParamRecommender.setCurrentPosition(index);

            // TODO: find a better solution to take into account info other than names
            List<IField> visibleFields = crContext.getVisibleFields();
            List<ILocalVariable> visibleLocals = crContext.getVisibleLocals();
            List<String> visibleNames = new ArrayList<String>();
            for (IField f : visibleFields) {
                visibleNames.add(f.getElementName());
            }
            for (ILocalVariable v : visibleLocals) {
                visibleNames.add(v.getElementName());
            }
            preciseParamRecommender.setVisibleNames(visibleNames);

            preciseParamRecommender.parse();
            preciseParamRecommender.recommend();

            ICompletionProposal[] argsProposals = integrateProposals(
                    preciseParamRecommender.getRecommendationsList().get(index));
            output.addAll(0, Arrays.asList(argsProposals));
        } catch (JavaModelException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    List<ICompletionProposal> temp = output;
    Set<String> containsProposal = new HashSet<String>();
    output = new ArrayList<ICompletionProposal>();

    for (ICompletionProposal proposal : temp) {
        if (containsProposal.contains(proposal.getDisplayString())) {
            continue;
        }

        containsProposal.add(proposal.getDisplayString());
        output.add(proposal);
    }

    if (output.size() > RECOMMENDATION_LIMIT) {
        output = output.subList(0, RECOMMENDATION_LIMIT - 1);
    }

    if (output.size() == 0) {
        return Collections.emptyList();
    }
    return output;
}