public override IEnumerable <Node> GenerateTreeViewData(Variables.Root variables, File file)
        {
            JavaFileInfo info = variables.GetStateObject <JavaState>(this).GetFile(file);

            foreach (Type type in info.Types)
            {
                yield return(GenerateTreeViewDataForType(info, type));
            }
        }
        public override void Process(File file, Variables.Root variables)
        {
            base.Process(file, variables);

            JavaState    state = variables.GetStateObject <JavaState>(this);
            JavaFileInfo info  = state.Process(file);

            variables.Increment("javaImportsTotal", info.Imports.Count);
            variables.Maximum("javaImportsMax", info.Imports.Count);

            foreach (Type type in info.Types)
            {
                ProcessType(info.Package, type, variables, false);
            }
        }
        private static Node GenerateTreeViewDataForType(JavaFileInfo fileInfo, Type type)
        {
            Type.TypeData data     = type.GetData();
            Type.DataEnum dataEnum = data as Type.DataEnum;

            Node node = new Node(type.ToString());

            if (fileInfo != null)
            {
                Node packageNode = new Node("[Package]");
                packageNode.Add(fileInfo.Package);
                node.Add(packageNode);

                Node importNode = new Node("[Imports]");
                importNode.AddRangeAsStrings(fileInfo.Imports);
                node.Add(importNode);
            }

            if (data.Fields.Count > 0)
            {
                Node fieldNode = new Node("[Fields]");
                fieldNode.AddRangeAsStrings(data.Fields);
                node.Add(fieldNode);
            }

            if (data.Methods.Count > 0)
            {
                Node methodNode = new Node("[Methods]");
                methodNode.AddRangeAsStrings(data.Methods);
                node.Add(methodNode);
            }

            if (type.NestedTypes.Count > 0)
            {
                Node nestedNode = new Node("[Nested Types]");
                nestedNode.AddRange(type.NestedTypes.Select(nestedType => GenerateTreeViewDataForType(null, nestedType)));
                node.Add(nestedNode);
            }

            if (dataEnum != null)
            {
                Node enumNode = new Node("[Enum Values]");
                enumNode.AddRange(dataEnum.EnumValues);
                node.Add(enumNode);
            }

            return(node);
        }