protected void assertCompositeTypeParam(
     int index, int compositeTypeKey, IType function, String qn) throws DOMException {
   // assert function is IFunctionType
   IFunctionType ft = (IFunctionType) function;
   assertTrue(ICPPClassType.class.isInstance((ft.getParameterTypes()[index])));
   assertEquals(compositeTypeKey, ((ICPPClassType) ft.getParameterTypes()[index]).getKey());
   assertEquals(qn, ASTTypeUtil.getQualifiedName((ICPPClassType) ft.getParameterTypes()[index]));
 }
 /** Constructs a string in the format: (paramName1,paramName2,...) */
 private static String getFunctionParameterString(IFunctionType functionType) throws DOMException {
   IType[] types = functionType.getParameterTypes();
   if (types.length == 1 && SemanticUtil.isVoidType(types[0])) {
     types = new IType[0];
   }
   StringBuilder result = new StringBuilder();
   result.append('(');
   for (int i = 0; i < types.length; i++) {
     if (i > 0) {
       result.append(',');
     }
     ASTTypeUtil.appendType(types[i], true, result);
   }
   if (functionType instanceof ICPPFunctionType
       && ((ICPPFunctionType) functionType).takesVarArgs()) {
     if (types.length != 0) {
       result.append(',');
     }
     result.append("..."); // $NON-NLS-1$
   }
   result.append(')');
   return result.toString();
 }
 protected void assertParamType(int index, Class type, IType function) throws DOMException {
   // assert function is IFunctionType
   IFunctionType ft = (IFunctionType) function;
   assertTrue(type.isInstance((ft.getParameterTypes()[index])));
 }