Skip to content

pbadenski/call-hierarchy-printer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CHP (Call Hierarchy Printer) prints selected method call hierarchy in text format for easy processing (eg. grep). It is equivalent to "Call Hierarchy" function in any advanced IDE.

Installation

gradle jar

Usage

  1. Before running the code you need classpath for the analyzed project.

    For Maven run:

     mvn dependency:build-classpath | grep -v "^\[.*\].*" | tr '\n' ':' > this.classpath
    

    For Gradle add this to build.gradle:

     task showClasspath << {
     	it.println sourceSets.main.runtimeClasspath.collect { it.absolutePath }.join(':')
     }
    

    and run

     gradle -q showClasspath > this.classpath
    
  2. To print method call hierarchy run:

     java -jar build/libs/org.chp-VERSION.jar -m (--method-name) METHOD_NAME -s (--source-folder) SOURCE_FOLDERS --classpath-file CLASSPATH_FILE
    
     --classpath-file CLASSPATH_FILE     : file containing the classpath for the analyzed project
     -c (--classpath) CLASSPATH          : classpath for the analyzed project
     -m (--method-name) METHOD_NAME      : method name to print call hierarchy
     -s (--source-folder) SOURCE_FOLDERS : source folder(s) for the analyzed project
    

Example

Execute following from this project root directory:

$ gradle -q showClasspath > this.classpath
$ java -jar build/libs//org.chp-*.jar -s src/main/java -m org.chp.ShowMethodCallHierarchy.main --classpath-file this.classpath

Output:

Method call hierarchy callees of
org.chp.ShowMethodCallHierarchy.main(java.lang.String[])
  org.chp.ShowMethodCallHierarchy.doMain
    spoon.Launcher.setArgs(java.lang.String[])
    spoon.Launcher.setArgs(java.lang.String[])
    org.apache.commons.lang3.StringUtils.strip(java.lang.String, java.lang.String)
    org.apache.commons.io.FileUtils.readFileToString(java.io.File)
    spoon.Launcher.addInputResource(spoon.compiler.SpoonResource)
    spoon.Launcher.run
    org.chp.ShowMethodCallHierarchy.printCallHierarchy(spoon.Launcher, java.io.PrintStream)
      spoon.Launcher.getFactory
      org.chp.ClassHierarchyProcessor.executeSpoon(spoon.support.QueueProcessingManager)
        spoon.support.QueueProcessingManager.addProcessor(spoon.processing.Processor<?>)
        spoon.support.QueueProcessingManager.process
        org.slf4j.Logger.debug(java.lang.String)
      org.chp.MethodExecutionProcessor.executeSpoon(spoon.support.QueueProcessingManager)
        spoon.support.QueueProcessingManager.addProcessor(spoon.processing.Processor<?>)
        spoon.support.QueueProcessingManager.process
        org.slf4j.Logger.debug(java.lang.String)
      org.chp.MethodCallHierarchyBuilder.forMethodName(java.lang.String, java.util.Map<spoon.reflect.reference.CtExecutableReference, java.util.List<spoon.reflect.reference.CtExecutableReference>>, java.util.Map<spoon.reflect.reference.CtTypeReference, java.util.Set<spoon.reflect.reference.CtTypeReference>>)
        org.chp.MethodCallHierarchyBuilder.findExecutableForMethodName(java.lang.String, java.util.Map<spoon.reflect.reference.CtExecutableReference, java.util.List<spoon.reflect.reference.CtExecutableReference>>)
          java.util.Map<spoon.reflect.reference.CtExecutableReference, java.util.List<spoon.reflect.reference.CtExecutableReference>>.keySet
          spoon.reflect.reference.CtTypeReference.getQualifiedName
          spoon.reflect.reference.CtExecutableReference.getDeclaringType
          spoon.reflect.reference.CtReference.getSimpleName
          java.lang.String.equals(java.lang.Object)
      org.chp.MethodCallHierarchyBuilder.printCallHierarchy(java.io.PrintStream)
        java.io.PrintStream.println(java.lang.String)
        org.chp.MethodCallHierarchyBuilder.printCallHierarchy(java.io.PrintStream, spoon.reflect.reference.CtExecutableReference, java.lang.String, java.util.Set<spoon.reflect.reference.CtExecutableReference>)
          java.util.Set<spoon.reflect.reference.CtExecutableReference>.contains(java.lang.Object)
          java.util.Set<spoon.reflect.reference.CtExecutableReference>.add(spoon.reflect.reference.CtExecutableReference)
          java.util.Map<spoon.reflect.reference.CtExecutableReference, java.util.List<spoon.reflect.reference.CtExecutableReference>>.get(java.lang.Object)
          java.io.PrintStream.println(java.lang.String)
          java.lang.Object.toString
          org.chp.MethodCallHierarchyBuilder.printCallHierarchy(java.io.PrintStream, spoon.reflect.reference.CtExecutableReference, java.lang.String, java.util.Set<spoon.reflect.reference.CtExecutableReference>)
          java.lang.String.concat(java.lang.String)
          java.util.Map<spoon.reflect.reference.CtTypeReference, java.util.Set<spoon.reflect.reference.CtTypeReference>>.get(java.lang.Object)
          spoon.reflect.reference.CtExecutableReference.getDeclaringType
          spoon.reflect.reference.CtExecutableReference.getOverridingExecutable(spoon.reflect.reference.CtTypeReference)
          java.io.PrintStream.println(java.lang.String)
          java.lang.Object.toString
          org.chp.MethodCallHierarchyBuilder.printCallHierarchy(java.io.PrintStream, spoon.reflect.reference.CtExecutableReference, java.lang.String, java.util.Set<spoon.reflect.reference.CtExecutableReference>)
          java.lang.String.concat(java.lang.String)
  org.chp.ShowMethodCallHierarchy.parse(java.lang.String[])
    org.kohsuke.args4j.CmdLineParser.parseArgument(java.lang.String[])
    java.io.PrintStream.println(java.lang.String)
    java.lang.Throwable.getMessage
    java.io.PrintStream.print(java.lang.String)
    org.kohsuke.args4j.CmdLineParser.printExample(org.kohsuke.args4j.OptionHandlerFilter)
    java.io.PrintStream.println
    java.io.PrintStream.println
    java.io.PrintStream.println(java.lang.String)
    org.kohsuke.args4j.CmdLineParser.printUsage(java.io.OutputStream)
    java.lang.System.exit(int)

About

Java Call Hierarchy Printer

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages