示例#1
0
        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);
        }
示例#2
0
 public static TreeView add_TreeView_For_CommandClasses_Visualization(this Control control, JavaMetadata_XRefs xRefs)
 {
     return(control.add_TreeView_For_CommandClasses_Visualization(xRefs, null, null));
 }
示例#3
0
 public static SpringMvcController mapCommandClass(this SpringMvcController controller, JavaMetadata_XRefs xRefs)
 {
     return(controller.mapCommandClass(controller.JavaClass, xRefs));
 }
示例#4
0
 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);
 }
示例#5
0
        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);
        }