/** * Returns the signature for the binding. Returns an empty string if a signature is not required * for the binding. * * @param binding * @return the signature or an empty string * @throws CoreException * @throws DOMException */ public static String getSignature(IBinding binding) throws CoreException, DOMException { StringBuilder buffer = new StringBuilder(); if (binding instanceof ICPPDeferredClassInstance) { buffer.append(getSignature(((ICPPDeferredClassInstance) binding).getTemplateDefinition())); } if (binding instanceof ICPPTemplateInstance) { ICPPTemplateInstance inst = (ICPPTemplateInstance) binding; buffer.append(getTemplateArgString(inst.getTemplateArguments(), true)); } else if (binding instanceof ICPPUnknownMemberClassInstance) { ICPPUnknownMemberClassInstance inst = (ICPPUnknownMemberClassInstance) binding; buffer.append(getTemplateArgString(inst.getArguments(), true)); } else if (binding instanceof ICPPClassTemplatePartialSpecialization) { ICPPClassTemplatePartialSpecialization partial = (ICPPClassTemplatePartialSpecialization) binding; buffer.append(getTemplateArgString(partial.getTemplateArguments(), false)); } if (binding instanceof ICPPFunction) { IFunction function = (ICPPFunction) binding; final IFunctionType ftype = function.getType(); buffer.append(getFunctionParameterString(ftype)); if (binding instanceof ICPPTemplateDefinition) { ICPPTemplateDefinition tdef = (ICPPTemplateDefinition) binding; appendTemplateParameters(tdef.getTemplateParameters(), buffer); ASTTypeUtil.appendType(ftype.getReturnType(), true, buffer); } } if (binding instanceof ICPPMethod && !(binding instanceof ICPPConstructor)) { ICPPFunctionType ft = ((ICPPMethod) binding).getType(); if (ft.isConst()) buffer.append('c'); if (ft.isVolatile()) buffer.append('v'); } return buffer.toString(); }
@Override public boolean equals(Object obj) { if ((obj instanceof ICPPTemplateInstance) && (obj instanceof ICPPFunction)) { final ICPPTemplateInstance inst = (ICPPTemplateInstance) obj; ICPPFunctionType ct1 = ((ICPPFunction) getSpecializedBinding()).getType(); ICPPFunctionType ct2 = ((ICPPFunction) inst.getTemplateDefinition()).getType(); if (!ct1.isSameType(ct2)) return false; return CPPTemplates.haveSameArguments(this, inst); } return false; }
public static ICPPParameter[] createParameterList(ICPPFunctionType ft) { if (ft == null) { return ICPPParameter.EMPTY_CPPPARAMETER_ARRAY; } IType[] ptypes = ft.getParameterTypes(); ICPPParameter[] result = new ICPPParameter[ptypes.length]; for (int i = 0; i < result.length; i++) { result[i] = new CPPBuiltinParameter(ptypes[i]); } return result; }