public SignatureHelpRequestor(ICompilationUnit aUnit, int offset) { this.unit = aUnit; response = new CompletionResponse(); response.setOffset(offset); setRequireExtendedContext(true); }
public SignatureHelp getSignatureHelp(IProgressMonitor monitor) { SignatureHelp signatureHelp = new SignatureHelp(); response.setProposals(proposals); CompletionResponses.store(response); List<SignatureInformation> infos = new ArrayList<>(); for (int i = 0; i < proposals.size(); i++) { if (!monitor.isCanceled()) { infos.add(this.toSignatureInformation(proposals.get(i))); } else { return signatureHelp; } } infos.sort((SignatureInformation a, SignatureInformation b) -> a.getParameters().size() - b.getParameters().size()); signatureHelp.getSignatures().addAll(infos); return signatureHelp; }
public SignatureInformation toSignatureInformation(CompletionProposal methodProposal) { SignatureInformation $ = new SignatureInformation(); StringBuilder desription = descriptionProvider.createMethodProposalDescription(methodProposal); $.setLabel(desription.toString()); $.setDocumentation(this.computeJavaDoc(methodProposal)); char[] signature = SignatureUtil.fix83600(methodProposal.getSignature()); char[][] parameterNames = methodProposal.findParameterNames(null); char[][] parameterTypes = Signature.getParameterTypes(signature); for (int i = 0; i < parameterTypes.length; i++) { parameterTypes[i] = Signature.getSimpleName(Signature.toCharArray(SignatureUtil.getLowerBound(parameterTypes[i]))); } if (Flags.isVarargs(methodProposal.getFlags())) { int index = parameterTypes.length - 1; parameterTypes[index] = convertToVararg(parameterTypes[index]); } List<ParameterInformation> parameterInfos = new LinkedList<>(); for (int i = 0; i < parameterTypes.length; i++) { StringBuilder builder = new StringBuilder(); builder.append(parameterTypes[i]); builder.append(' '); builder.append(parameterNames[i]); parameterInfos.add(new ParameterInformation(builder.toString())); } $.setParameters(parameterInfos); return $; }
return help; SignatureHelpRequestor collector = new SignatureHelpRequestor(unit, contextInfomation[0] + 1); help = collector.getSignatureHelp(monitor);
@Override public void accept(CompletionProposal proposal) { if (!isIgnored(proposal.getKind())) { if (proposal.getKind() == CompletionProposal.PACKAGE_REF && unit.getParent() != null && String.valueOf(proposal.getCompletion()).equals(unit.getParent().getElementName())) { // Hacky way to boost relevance of current package, for package completions, until // https://bugs.eclipse.org/518140 is fixed proposal.setRelevance(proposal.getRelevance() + 1); } proposals.add(proposal); } }