/** * Creates a new context information. * * @param proposal the JDT Core completion proposal */ public ProposalContextInformation(CompletionProposal proposal) { // don't cache the core proposal because the ContentAssistant might // hang on to the context info. CompletionProposalLabelProvider labelProvider= new CompletionProposalLabelProvider(); fInformationDisplayString= labelProvider.createParameterList(proposal); ImageDescriptor descriptor= labelProvider.createImageDescriptor(proposal); if (descriptor != null) fImage= JavaPlugin.getImageDescriptorRegistry().get(descriptor); else fImage= null; if (proposal.getCompletion().length == 0) fPosition= proposal.getCompletionLocation() + 1; else fPosition= -1; fContextDisplayString= labelProvider.createLabel(proposal); }
/** * Creates and returns a parameter list of the given method or type proposal * suitable for display. The list does not include parentheses. The lower * bound of parameter types is returned. * <p> * Examples: * <pre> * "void method(int i, Strings)" -> "int i, String s" * "? extends Number method(java.lang.String s, ? super Number n)" -> "String s, Number n" * </pre> * </p> * * @param proposal the proposal to create the parameter list * for. Must be of kind {@link CompletionProposal#METHOD_REF} or * {@link CompletionProposal#TYPE_REF}. * @return the list of comma-separated parameters suitable for display */ public String createParameterList(CompletionProposal proposal) { int kind= proposal.getKind(); switch (kind) { case CompletionProposal.METHOD_REF: return appendUnboundedParameterList(new StringBuffer(), proposal).toString(); case CompletionProposal.TYPE_REF: return appendTypeParameterList(new StringBuffer(), proposal).toString(); default: Assert.isLegal(false); return null; // dummy } }
case CompletionProposal.POTENTIAL_METHOD_DECLARATION: if (fContext != null && fContext.isInJavadoc()) return createJavadocMethodProposalLabel(proposal); return createMethodProposalLabel(proposal); case CompletionProposal.METHOD_DECLARATION: return createOverrideMethodProposalLabel(proposal); case CompletionProposal.ANONYMOUS_CLASS_DECLARATION: return createAnonymousTypeLabel(proposal); case CompletionProposal.TYPE_REF: return createTypeProposalLabel(proposal); case CompletionProposal.JAVADOC_TYPE_REF: return createJavadocTypeProposalLabel(proposal); case CompletionProposal.JAVADOC_FIELD_REF: case CompletionProposal.JAVADOC_VALUE_REF: case CompletionProposal.JAVADOC_INLINE_TAG: case CompletionProposal.JAVADOC_PARAM_REF: return createJavadocSimpleProposalLabel(proposal); case CompletionProposal.JAVADOC_METHOD_REF: return createJavadocMethodProposalLabel(proposal); case CompletionProposal.PACKAGE_REF: return createPackageProposalLabel(proposal); case CompletionProposal.ANNOTATION_ATTRIBUTE_REF: case CompletionProposal.FIELD_REF: return createLabelWithTypeAndDeclaration(proposal); case CompletionProposal.LOCAL_VARIABLE_REF: case CompletionProposal.VARIABLE_DECLARATION: return createSimpleLabelWithType(proposal); case CompletionProposal.KEYWORD:
String createOverrideMethodProposalLabel(CompletionProposal methodProposal) { StringBuffer nameBuffer= new StringBuffer(); // method name nameBuffer.append(methodProposal.getName()); // parameters nameBuffer.append('('); appendUnboundedParameterList(nameBuffer, methodProposal); nameBuffer.append(") "); //$NON-NLS-1$ // return type // TODO remove SignatureUtil.fix83600 call when bugs are fixed char[] returnType= createTypeDisplayName(SignatureUtil.getUpperBound(Signature.getReturnType(SignatureUtil.fix83600(methodProposal.getSignature())))); nameBuffer.append(returnType); // declaring type nameBuffer.append(" - "); //$NON-NLS-1$ String declaringType= extractDeclaringTypeFQN(methodProposal); declaringType= Signature.getSimpleName(declaringType); nameBuffer.append(Messages.format(JavaTextMessages.ResultCollector_overridingmethod, new String(declaringType))); return nameBuffer.toString(); }
/** * Appends the parameter list to <code>buffer</code>. * * @param buffer the buffer to append to * @param methodProposal the method proposal * @return the modified <code>buffer</code> */ private StringBuffer appendUnboundedParameterList(StringBuffer buffer, CompletionProposal methodProposal) { // TODO remove once https://bugs.eclipse.org/bugs/show_bug.cgi?id=85293 // gets fixed. 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]= createTypeDisplayName(SignatureUtil.getLowerBound(parameterTypes[i])); if (Flags.isVarargs(methodProposal.getFlags())) { int index= parameterTypes.length - 1; parameterTypes[index]= convertToVararg(parameterTypes[index]); } return appendParameterSignature(buffer, parameterTypes, parameterNames); }
protected Image computeImage() { return JavaPlugin.getImageDescriptorRegistry().get(fInvocationContext.getLabelProvider().createImageDescriptor(fProposal)); }
private IJavaCompletionProposal createFieldProposal(CompletionProposal proposal) { String completion= String.valueOf(proposal.getCompletion()); int start= proposal.getReplaceStart(); int length= getLength(proposal); StyledString label= fLabelProvider.createStyledLabel(proposal); Image image= getImage(fLabelProvider.createFieldImageDescriptor(proposal)); int relevance= computeRelevance(proposal); JavaCompletionProposal javaProposal= new JavaCompletionProposal(completion, start, length, image, label, relevance, getContext().isInJavadoc(), getInvocationContext()); if (fJavaProject != null) javaProposal.setProposalInfo(new FieldProposalInfo(fJavaProject, proposal)); javaProposal.setTriggerCharacters(VAR_TRIGGER); return javaProposal; }
private IJavaCompletionProposal createFieldProposal(CompletionProposal proposal) { String completion= String.valueOf(proposal.getCompletion()); int start= proposal.getReplaceStart(); int length= getLength(proposal); String label= fLabelProvider.createLabel(proposal); Image image= getImage(fLabelProvider.createFieldImageDescriptor(proposal)); int relevance= computeRelevance(proposal); JavaCompletionProposal javaProposal= new JavaCompletionProposal(completion, start, length, image, label, relevance, getContext().isInJavadoc(), getInvocationContext()); if (fJavaProject != null) javaProposal.setProposalInfo(new FieldProposalInfo(fJavaProject, proposal)); javaProposal.setTriggerCharacters(VAR_TRIGGER); return javaProposal; }
private IJavaCompletionProposal createAnonymousTypeProposal(CompletionProposal proposal) { if (fCompilationUnit == null || fJavaProject == null) return null; String completion= String.valueOf(proposal.getCompletion()); int start= proposal.getReplaceStart(); int length= getLength(proposal); int relevance= computeRelevance(proposal); String label= fLabelProvider.createAnonymousTypeLabel(proposal); JavaCompletionProposal javaProposal= new AnonymousTypeCompletionProposal(fJavaProject, fCompilationUnit, start, length, completion, label, String.valueOf(proposal.getDeclarationSignature()), relevance); javaProposal.setProposalInfo(new AnonymousTypeProposalInfo(fJavaProject, proposal)); return javaProposal; }
String createAnonymousTypeLabel(CompletionProposal proposal) { char[] declaringTypeSignature= proposal.getDeclarationSignature(); StringBuffer buffer= new StringBuffer(); buffer.append(Signature.getSignatureSimpleName(declaringTypeSignature)); buffer.append('('); appendUnboundedParameterList(buffer, proposal); buffer.append(')'); buffer.append(" "); //$NON-NLS-1$ buffer.append(JavaTextMessages.ResultCollector_anonymous_type); return buffer.toString(); }
/** * Returns a label provider that can be used to compute proposal labels. * * @return a label provider that can be used to compute proposal labels */ public CompletionProposalLabelProvider getLabelProvider() { if (fLabelProvider == null) { if (fCollector != null) fLabelProvider= fCollector.getLabelProvider(); else fLabelProvider= new CompletionProposalLabelProvider(); } return fLabelProvider; }
/** * Appends the type parameter list to <code>buffer</code>. * * @param buffer the buffer to append to * @param typeProposal the type proposal * @return the modified <code>buffer</code> * @since 3.2 */ private StringBuffer appendTypeParameterList(StringBuffer buffer, CompletionProposal typeProposal) { // TODO remove once https://bugs.eclipse.org/bugs/show_bug.cgi?id=85293 // gets fixed. char[] signature= SignatureUtil.fix83600(typeProposal.getSignature()); char[][] typeParameters= Signature.getTypeArguments(signature); for (int i= 0; i < typeParameters.length; i++) { char[] param= typeParameters[i]; typeParameters[i]= Signature.toCharArray(param); } return appendParameterSignature(buffer, typeParameters, null); }
appendUnboundedParameterList(nameBuffer, methodProposal); nameBuffer.append(')'); char[] returnType= createTypeDisplayName(SignatureUtil.getUpperBound(Signature.getReturnType(SignatureUtil.fix83600(methodProposal.getSignature())))); nameBuffer.append(" "); //$NON-NLS-1$ nameBuffer.append(returnType); String declaringType= extractDeclaringTypeFQN(methodProposal); declaringType= Signature.getSimpleName(declaringType); nameBuffer.append(declaringType);
/** * Appends the parameter list to <code>buffer</code>. * * @param buffer the buffer to append to * @param methodProposal the method proposal * @return the modified <code>buffer</code> */ private StyledString appendUnboundedParameterList(StyledString buffer, CompletionProposal methodProposal) { // TODO remove once https://bugs.eclipse.org/bugs/show_bug.cgi?id=85293 // gets fixed. 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]= createTypeDisplayName(SignatureUtil.getLowerBound(parameterTypes[i])); if (Flags.isVarargs(methodProposal.getFlags())) { int index= parameterTypes.length - 1; parameterTypes[index]= convertToVararg(parameterTypes[index]); } return appendParameterSignature(buffer, parameterTypes, parameterNames); }
protected Image computeImage() { return JavaPlugin.getImageDescriptorRegistry().get(fInvocationContext.getLabelProvider().createImageDescriptor(fProposal)); }
private IJavaCompletionProposal createFieldProposal(CompletionProposal proposal) { String completion= String.valueOf(proposal.getCompletion()); int start= proposal.getReplaceStart(); int length= getLength(proposal); StyledString label= fLabelProvider.createStyledLabel(proposal); Image image= getImage(fLabelProvider.createFieldImageDescriptor(proposal)); int relevance= computeRelevance(proposal); JavaCompletionProposal javaProposal= new JavaCompletionProposal(completion, start, length, image, label, relevance, getContext().isInJavadoc(), getInvocationContext()); if (fJavaProject != null) javaProposal.setProposalInfo(new FieldProposalInfo(fJavaProject, proposal)); javaProposal.setTriggerCharacters(VAR_TRIGGER); return javaProposal; }
private IJavaCompletionProposal createAnonymousTypeProposal(CompletionProposal proposal, JavaContentAssistInvocationContext invocationContext) { if (fCompilationUnit == null || fJavaProject == null) return null; char[] declarationKey= proposal.getDeclarationKey(); if (declarationKey == null) return null; try { IJavaElement element= fJavaProject.findElement(new String(declarationKey), null); if (!(element instanceof IType)) return null; IType type= (IType) element; String completion= String.valueOf(proposal.getCompletion()); int start= proposal.getReplaceStart(); int length= getLength(proposal); int relevance= computeRelevance(proposal); StyledString label= fLabelProvider.createAnonymousTypeLabel(proposal); JavaCompletionProposal javaProposal= new AnonymousTypeCompletionProposal(fJavaProject, fCompilationUnit, invocationContext, start, length, completion, label, String.valueOf(proposal .getDeclarationSignature()), type, relevance); javaProposal.setProposalInfo(new AnonymousTypeProposalInfo(fJavaProject, proposal)); return javaProposal; } catch (JavaModelException e) { return null; } }
StyledString createAnonymousTypeLabel(CompletionProposal proposal) { char[] declaringTypeSignature= proposal.getDeclarationSignature(); declaringTypeSignature= Signature.getTypeErasure(declaringTypeSignature); StyledString buffer= new StyledString(); buffer.append(Signature.getSignatureSimpleName(declaringTypeSignature)); buffer.append('('); appendUnboundedParameterList(buffer, proposal); buffer.append(')'); buffer.append(" "); //$NON-NLS-1$ buffer.append(JavaTextMessages.ResultCollector_anonymous_type); if (proposal.getRequiredProposals() != null) { char[] signatureQualifier= Signature.getSignatureQualifier(declaringTypeSignature); if (signatureQualifier.length > 0) { buffer.append(JavaElementLabels.CONCAT_STRING, StyledString.QUALIFIER_STYLER); buffer.append(signatureQualifier, StyledString.QUALIFIER_STYLER); } } return Strings.markJavaElementLabelLTR(buffer); }
/** * Returns a label provider that can be used to compute proposal labels. * * @return a label provider that can be used to compute proposal labels */ public CompletionProposalLabelProvider getLabelProvider() { if (fLabelProvider == null) { if (fCollector != null) fLabelProvider= fCollector.getLabelProvider(); else fLabelProvider= new CompletionProposalLabelProvider(); } return fLabelProvider; }
/** * Appends the type parameter list to <code>buffer</code>. * * @param buffer the buffer to append to * @param typeProposal the type proposal * @return the modified <code>buffer</code> * @since 3.2 */ private StyledString appendTypeParameterList(StyledString buffer, CompletionProposal typeProposal) { // TODO remove once https://bugs.eclipse.org/bugs/show_bug.cgi?id=85293 // gets fixed. char[] signature= SignatureUtil.fix83600(typeProposal.getSignature()); char[][] typeParameters= Signature.getTypeArguments(signature); for (int i= 0; i < typeParameters.length; i++) { char[] param= typeParameters[i]; typeParameters[i]= Signature.toCharArray(param); } return appendParameterSignature(buffer, typeParameters, null); }