code: function getFullQualifiedFunctionCallIdent (contract, func) {
    if (isLocalCall(func)) return getContractName(contract) + '.' + getLocalCallName(func) + '(' + getFunctionCallTypeParameterType(func) + ')'
    else if (isThisLocalCall(func)) return getThisLocalCallContractName(func) + '.' + getThisLocalCallName(func) + '(' + getFunctionCallTypeParameterType(func) + ')'
    else if (isSuperLocalCall(func)) return getContractName(contract) + '.' + getSuperLocalCallName(func) + '(' + getFunctionCallTypeParameterType(func) + ')'
    else if (isExternalDirectCall(func)) return getExternalDirectCallContractName(func) + '.' + getExternalDirectCallMemberName(func) + '(' + getFunctionCallTypeParameterType(func) + ')'
    else if (isLibraryCall(func)) return getLibraryCallContractName(func) + '.' + getLibraryCallMemberName(func) + '(' + getFunctionCallTypeParameterType(func) + ')'
    else throw new Error('staticAnalysisCommon.js: Can not get function name form non function call node')
  }
docs: Returns full qualified name for a function call, Throws on wrong node.
  Example:
  contract foo {
  ...
  function bar(uint b) { }
  function baz() {
  bar(10) => foo.bar(uint)
  @func {ASTNode} function call node
  @func {ASTNode} contract defintion
  @return {string} full qualified identifier for the function call