public void traverseMethod ( String methodID ) { MethodReferenceNode node = ( MethodReferenceNode ) elementReferenceMap . get ( methodID ) ; if ( node == null ) { //TODO(malvania): This might never be reached, because we create a node for every method, // both invoked and declared. ErrorUtil . warning ( "Encountered .class method while accessing: " + methodID ) ; return ; } if ( node . reachable ) { return ; } node . reachable = true ; markParentClasses ( ElementUtil . getDeclaringClass ( node . methodElement ) ) ; for ( String invokedMethodID : node . invokedMethods ) { traverseMethod ( invokedMethodID ) ; } for ( String overrideMethodID : node . overridingMethods ) { traverseMethod ( overrideMethodID ) ; } }
Traverses the method invocation graph created by ElementReferenceMapper and marks all methods that are reachable from the inputRootSet . Also covers all methods that possibly override these called methods .