Add FunctionDeclaration and unit tests

Test Plan: mvn clean install