public static TreeView add_TreeView_For_CommandClasses_Visualization(this Control control, JavaMetadata_XRefs xRefs, Action <string> onClassSelected, Func <string, string, string> resolveGetterReturnType) { var treeView = control.add_TreeView(); var showHttpName = false; var configPanel = control.insert_Below(30); configPanel.add_CheckBox("Show Http Variable Name", 0, 0, (value) => showHttpName = value) .autoSize(); Func <Java_Method, string> getMethodNodeText = (method) => { if (showHttpName) { return(method.Name .subString(3) .lowerCaseFirstLetter()); } return("{0} {1}".format(method.Name, method.returnType())); //.GenericSignature.isNull() // ? method.ParametersAndReturnType // : method.GenericSignature.returnType()); }; Func <string, string, string> localResolveGetterReturnType = (methodName, returnType) => { if (resolveGetterReturnType.isNull()) { return(returnType); } return(resolveGetterReturnType(methodName, returnType)); }; Action <TreeNode, string> add_Getters = (treeNode, className) => { if (xRefs.Classes_by_Signature.hasKey(className)) { var _class = xRefs.Classes_by_Signature[className]; var getters = _class.java_Methods_Getters_Public().with_Primitive_ReturnType(false); treeNode.add_Nodes(getters.Where((method) => method.returnType() != "java.lang.String"), (method) => getMethodNodeText(method), //(method)=> method.str(), (method) => localResolveGetterReturnType(method.Name, method.returnType()), (method) => true, (method) => Color.DarkBlue); } else { treeNode.add_Node("[Getters] ... class not found: {0}".format(className)) .color(Color.DarkRed); } }; Action <TreeNode, string> add_Setters = (treeNode, className) => { if (xRefs.Classes_by_Signature.hasKey(className)) { var _class = xRefs.Classes_by_Signature[className]; var setters = _class.java_Methods_Setters_Public().with_Primitive_Parameter(true); treeNode.add_Nodes(setters, //(method)=> "{0} {1}".format(method.Name, method.ParametersAndReturnType), (method) => getMethodNodeText(method), (method) => method, (method) => false, (method) => Color.DarkGreen); } else { treeNode.add_Node("[Setters] ... class not found: {0}".format(className)) .color(Color.DarkRed); } }; treeView.beforeExpand <string>( (treeNode, returnType) => { var className = (returnType.starts("L")) ? returnType.removeFirstChar().removeLastChar() : returnType; add_Getters(treeNode, className); add_Setters(treeNode, className); //if (xRefs.Classes_by_Signature.hasKey(className)) // treeNode.add_Node("FOUND Class!!!"); //else // treeNode.add_Node(returnType); }); treeView.afterSelect <string>( (@class) => { if (onClassSelected.notNull()) { onClassSelected(@class); } }); return(treeView); }
public static TreeView add_TreeView_For_CommandClasses_Visualization(this Control control, JavaMetadata_XRefs xRefs) { return(control.add_TreeView_For_CommandClasses_Visualization(xRefs, null, null)); }
public static SpringMvcController mapCommandClass(this SpringMvcController controller, JavaMetadata_XRefs xRefs) { return(controller.mapCommandClass(controller.JavaClass, xRefs)); }
public static SpringMvcController mapCommandClass(this SpringMvcController controller, string javaClass, JavaMetadata_XRefs xRefs) { if (controller.CommandClass.isNull() && controller.JavaClass.valid()) { var _class = xRefs.JavaMetadata.java_Classes().signature(javaClass); if (_class.notNull()) { if (controller.CommandName.isNull()) { var initMethod = _class.java_Methods().name("<init>"); foreach (var methodRef in initMethod.methodRefs(_class)) { if (methodRef.Signature.contains("setCommandName")) { var location = methodRef.AtLocations[0]; var instructions_byPc = initMethod.instructions_byPc(); var targetIndex = instructions_byPc[location.Pc - 2].Target_Index; controller.CommandName = _class.constantsPool_byIndex()[targetIndex].str(); "resolved command name for {0} = {1}".info(controller.JavaClass, controller.CommandName); break; } } } //try to find it via the return value of the formBackingObject if (controller.CommandClass.isNull()) { var formBackingObject = _class.java_Methods().name("formBackingObject"); if (formBackingObject.notNull()) { var numberOfInstructions = formBackingObject.Instructions.size(); if (formBackingObject.Instructions[numberOfInstructions - 3].OpCode == "__aload" && formBackingObject.Instructions[numberOfInstructions - 2].OpCode == "__areturn") { var variablesByIndex = formBackingObject.variables_byIndex(); var variableIndex = formBackingObject.Instructions[numberOfInstructions - 3].Target_Index; if (variablesByIndex[variableIndex].size() > 0) { controller.CommandClass = variablesByIndex[variableIndex].last().Descriptor.removeFirstChar().removeLastChar(); "resolved CommandClass for CommandName {0} -> {1}".info(controller.CommandName, controller.CommandClass); } } } } //try to find CommandClass via CommandName if (controller.CommandName.notNull() && controller.CommandClass.isNull()) { foreach (var @class in xRefs.Classes_by_Signature) { if (@class.Value.Name == controller.CommandName.upperCaseFirstLetter()) { controller.CommandClass = @class.Value.Signature; "resolved CommandClass for CommandName {0} -> {1}".info(controller.CommandName, controller.CommandClass); break; } } } } } return(controller); }
public static SpringMvcMappings mapCommandClass_using_XRefs(this SpringMvcMappings mvcMappings, JavaMetadata_XRefs xRefs) { var controllers_by_JavaClass = mvcMappings.controllers_by_JavaClass(); foreach (var controller in mvcMappings.Controllers) { controller.mapCommandClass(xRefs); if (controller.CommandName.notNull() && controller.CommandClass.isNull()) { "CommandClass not found but CommandName exists: {0}".debug(controller); if (xRefs.Classes_by_Signature.hasKey(controller.JavaClass)) { "Found XRefs for Class: {0}".debug(controller.JavaClass); var javaClass = xRefs.Classes_by_Signature[controller.JavaClass]; controller.mapCommandClass(javaClass.SuperClass, xRefs); } else { "here".error(); } } } return(mvcMappings); }