[gnome-builder/wip/slaf/xml-pack: 29/56] xml-pack: simplify IdeXmlSymbolNode
- From: Sébastien Lafargue <slafargue src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/slaf/xml-pack: 29/56] xml-pack: simplify IdeXmlSymbolNode
- Date: Thu, 13 Jul 2017 12:21:28 +0000 (UTC)
commit 5d84a70172b7f48aa614844690e75bb53fa12ccf
Author: Sebastien Lafargue <slafargue gnome org>
Date: Wed May 17 19:52:54 2017 +0200
xml-pack: simplify IdeXmlSymbolNode
We simplify the constructor by moving
location params to a setter.
We add a parent node field, handle automatically
when using ide_xml_symbol_take_child and
ide_xml_take_internal_child methods.
plugins/xml-pack/ide-xml-parser-generic.c | 6 +-
plugins/xml-pack/ide-xml-parser-ui.c | 36 ++++++-----------
plugins/xml-pack/ide-xml-parser.c | 12 +++---
plugins/xml-pack/ide-xml-symbol-node.c | 61 +++++++++++++++--------------
plugins/xml-pack/ide-xml-symbol-node.h | 9 +---
5 files changed, 55 insertions(+), 69 deletions(-)
---
diff --git a/plugins/xml-pack/ide-xml-parser-generic.c b/plugins/xml-pack/ide-xml-parser-generic.c
index 40607de..0d6d307 100644
--- a/plugins/xml-pack/ide-xml-parser-generic.c
+++ b/plugins/xml-pack/ide-xml-parser-generic.c
@@ -67,7 +67,7 @@ ide_xml_parser_generic_start_element_sax_cb (ParserState *state,
attr = collect_attributes (self, (const gchar **)attributes);
label = g_strconcat ((const gchar *)name, attr, NULL);
- node = ide_xml_symbol_node_new (label, NULL, NULL, IDE_SYMBOL_XML_ELEMENT, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new (label, NULL, NULL, IDE_SYMBOL_XML_ELEMENT);
g_object_set (node, "use-markup", TRUE, NULL);
state->attributes = (const gchar **)attributes;
@@ -85,7 +85,7 @@ ide_xml_parser_generic_comment_sax_cb (ParserState *state,
g_assert (IDE_IS_XML_PARSER (self));
strip_name = g_strstrip (g_strdup ((const gchar *)name));
- node = ide_xml_symbol_node_new (strip_name, NULL, NULL, IDE_SYMBOL_XML_COMMENT, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new (strip_name, NULL, NULL, IDE_SYMBOL_XML_COMMENT);
ide_xml_parser_state_processing (self, state, "comment", node, IDE_XML_SAX_CALLBACK_TYPE_COMMENT, FALSE);
}
@@ -99,7 +99,7 @@ ide_xml_parser_generic_cdata_sax_cb (ParserState *state,
g_assert (IDE_IS_XML_PARSER (self));
- node = ide_xml_symbol_node_new ("cdata", NULL, NULL, IDE_SYMBOL_XML_CDATA, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new ("cdata", NULL, NULL, IDE_SYMBOL_XML_CDATA);
ide_xml_parser_state_processing (self, state, "cdata", node, IDE_XML_SAX_CALLBACK_TYPE_CDATA, FALSE);
}
diff --git a/plugins/xml-pack/ide-xml-parser-ui.c b/plugins/xml-pack/ide-xml-parser-ui.c
index efc5087..450ca17 100644
--- a/plugins/xml-pack/ide-xml-parser-ui.c
+++ b/plugins/xml-pack/ide-xml-parser-ui.c
@@ -65,8 +65,7 @@ ide_xml_parser_ui_start_element_sax_cb (ParserState *state,
ide_str_equal0 (parent_name, "template"))
{
value = get_attribute (attributes, "name", NULL);
- node = ide_xml_symbol_node_new (value, NULL, "property",
- IDE_SYMBOL_UI_PROPERTY, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new (value, NULL, "property", IDE_SYMBOL_UI_PROPERTY);
is_internal = TRUE;
state->build_state = BUILD_STATE_GET_CONTENT;
}
@@ -78,8 +77,7 @@ ide_xml_parser_ui_start_element_sax_cb (ParserState *state,
ide_str_equal0 (parent_name, "item"))
{
value = get_attribute (attributes, "name", NULL);
- node = ide_xml_symbol_node_new (value, NULL, "attribute",
- IDE_SYMBOL_UI_MENU_ATTRIBUTE, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new (value, NULL, "attribute", IDE_SYMBOL_UI_MENU_ATTRIBUTE);
is_internal = TRUE;
state->build_state = BUILD_STATE_GET_CONTENT;
}
@@ -87,8 +85,7 @@ ide_xml_parser_ui_start_element_sax_cb (ParserState *state,
else if (ide_str_equal0 (name, "class") && ide_str_equal0 (parent_name, "style"))
{
value = get_attribute (attributes, "name", NULL);
- node = ide_xml_symbol_node_new (value, NULL, "class",
- IDE_SYMBOL_UI_STYLE_CLASS, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new (value, NULL, "class", IDE_SYMBOL_UI_STYLE_CLASS);
is_internal = TRUE;
}
else if (ide_str_equal0 (name, "child"))
@@ -109,8 +106,7 @@ ide_xml_parser_ui_start_element_sax_cb (ParserState *state,
g_string_append (string, value);
}
- node = ide_xml_symbol_node_new (string->str, NULL, "child",
- IDE_SYMBOL_UI_CHILD, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new (string->str, NULL, "child", IDE_SYMBOL_UI_CHILD);
g_object_set (node, "use-markup", TRUE, NULL);
}
else if (ide_str_equal0 (name, "object"))
@@ -128,8 +124,7 @@ ide_xml_parser_ui_start_element_sax_cb (ParserState *state,
g_string_append (string, value);
}
- node = ide_xml_symbol_node_new (string->str, NULL, "object",
- IDE_SYMBOL_UI_OBJECT, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new (string->str, NULL, "object", IDE_SYMBOL_UI_OBJECT);
g_object_set (node, "use-markup", TRUE, NULL);
}
else if (ide_str_equal0 (name, "template"))
@@ -145,19 +140,16 @@ ide_xml_parser_ui_start_element_sax_cb (ParserState *state,
g_string_append (string, label);
g_string_append (string, value);
- node = ide_xml_symbol_node_new (string->str, NULL, (const gchar *)name,
- IDE_SYMBOL_UI_TEMPLATE, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new (string->str, NULL, (const gchar *)name, IDE_SYMBOL_UI_TEMPLATE);
g_object_set (node, "use-markup", TRUE, NULL);
}
else if (ide_str_equal0 (name, "packing"))
{
- node = ide_xml_symbol_node_new ("packing", NULL, "packing",
- IDE_SYMBOL_UI_PACKING, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new ("packing", NULL, "packing", IDE_SYMBOL_UI_PACKING);
}
else if (ide_str_equal0 (name, "style"))
{
- node = ide_xml_symbol_node_new ("style", NULL, "style",
- IDE_SYMBOL_UI_STYLE, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new ("style", NULL, "style", IDE_SYMBOL_UI_STYLE);
}
else if (ide_str_equal0 (name, "menu"))
{
@@ -166,8 +158,7 @@ ide_xml_parser_ui_start_element_sax_cb (ParserState *state,
g_string_append (string, label);
g_string_append (string, value);
- node = ide_xml_symbol_node_new (string->str, NULL, "menu",
- IDE_SYMBOL_UI_MENU, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new (string->str, NULL, "menu", IDE_SYMBOL_UI_MENU);
g_object_set (node, "use-markup", TRUE, NULL);
}
else if (ide_str_equal0 (name, "submenu"))
@@ -177,8 +168,7 @@ ide_xml_parser_ui_start_element_sax_cb (ParserState *state,
g_string_append (string, label);
g_string_append (string, value);
- node = ide_xml_symbol_node_new (string->str, NULL, "submenu",
- IDE_SYMBOL_UI_SUBMENU, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new (string->str, NULL, "submenu", IDE_SYMBOL_UI_SUBMENU);
g_object_set (node, "use-markup", TRUE, NULL);
}
else if (ide_str_equal0 (name, "section"))
@@ -188,14 +178,12 @@ ide_xml_parser_ui_start_element_sax_cb (ParserState *state,
g_string_append (string, label);
g_string_append (string, value);
- node = ide_xml_symbol_node_new (string->str, NULL, "section",
- IDE_SYMBOL_UI_SECTION, NULL, 0, 0, 0, 0, 0);
+ node = ide_xml_symbol_node_new (string->str, NULL, "section", IDE_SYMBOL_UI_SECTION);
g_object_set (node, "use-markup", TRUE, NULL);
}
else if (ide_str_equal0 (name, "item"))
{
- node = ide_xml_symbol_node_new ("item", NULL, "item",
- IDE_SYMBOL_UI_ITEM, NULL, 0, 0, 0, 00, 0);
+ node = ide_xml_symbol_node_new ("item", NULL, "item", IDE_SYMBOL_UI_ITEM);
}
state->attributes = (const gchar **)attributes;
diff --git a/plugins/xml-pack/ide-xml-parser.c b/plugins/xml-pack/ide-xml-parser.c
index 2aad156..02eaf13 100644
--- a/plugins/xml-pack/ide-xml-parser.c
+++ b/plugins/xml-pack/ide-xml-parser.c
@@ -204,11 +204,11 @@ ide_xml_parser_state_processing (IdeXmlParser *self,
{
if (callback_type == IDE_XML_SAX_CALLBACK_TYPE_START_ELEMENT)
{
- node = ide_xml_symbol_node_new ("internal", NULL, element_name, IDE_SYMBOL_XML_ELEMENT,
- g_object_ref (state->file),
- start_line, start_line_offset,
- end_line, end_line_offset,
- size);
+ node = ide_xml_symbol_node_new ("internal", NULL, element_name, IDE_SYMBOL_XML_ELEMENT);
+ ide_xml_symbol_node_set_location (node, g_object_ref (state->file),
+ start_line, start_line_offset,
+ end_line, end_line_offset,
+ size);
ide_xml_stack_push (self->stack, element_name, node, state->parent_node, depth);
ide_xml_symbol_node_take_internal_child (state->parent_node, node);
@@ -576,7 +576,7 @@ ide_xml_parser_get_analysis_async (IdeXmlParser *self,
state->build_state = BUILD_STATE_NORMAL;
state->analysis = ide_xml_analysis_new (-1);
- state->root_node = ide_xml_symbol_node_new ("root", NULL, "root", IDE_SYMBOL_NONE, NULL, 0, 0, 0, 0, 0);
+ state->root_node = ide_xml_symbol_node_new ("root", NULL, "root", IDE_SYMBOL_NONE);
ide_xml_analysis_set_root_node (state->analysis, state->root_node);
state->parent_node = state->root_node;
diff --git a/plugins/xml-pack/ide-xml-symbol-node.c b/plugins/xml-pack/ide-xml-symbol-node.c
index 6091deb..873d419 100644
--- a/plugins/xml-pack/ide-xml-symbol-node.c
+++ b/plugins/xml-pack/ide-xml-symbol-node.c
@@ -38,18 +38,20 @@ typedef struct _NodeRange
struct _IdeXmlSymbolNode
{
- IdeSymbolNode parent_instance;
- GArray *children;
- gchar *value;
- gchar *element_name;
- gint nb_children;
- gint nb_internal_children;
- GFile *file;
- gchar **attributes_names;
- NodeRange start_tag;
- NodeRange end_tag;
-
- guint has_end_tag : 1;
+ IdeSymbolNode parent_instance;
+
+ IdeXmlSymbolNode *parent;
+ GArray *children;
+ gchar *value;
+ gchar *element_name;
+ gint nb_children;
+ gint nb_internal_children;
+ GFile *file;
+ gchar **attributes_names;
+ NodeRange start_tag;
+ NodeRange end_tag;
+
+ guint has_end_tag : 1;
};
typedef enum
@@ -116,6 +118,7 @@ ide_xml_symbol_node_finalize (GObject *object)
g_clear_pointer (&self->value, g_free);
g_clear_object (&self->file);
+ g_clear_object (&self->parent);
if (self->attributes_names != NULL)
g_strfreev (self->attributes_names);
@@ -144,19 +147,12 @@ IdeXmlSymbolNode *
ide_xml_symbol_node_new (const gchar *name,
const gchar *value,
const gchar *element_name,
- IdeSymbolKind kind,
- GFile *file,
- gint start_line,
- gint start_line_offset,
- gint end_line,
- gint end_line_offset,
- gsize size)
+ IdeSymbolKind kind)
{
IdeXmlSymbolNode *self;
IdeSymbolFlags flags = IDE_SYMBOL_FLAGS_NONE;
g_return_val_if_fail (!ide_str_empty0 (name), NULL);
- g_return_val_if_fail (G_IS_FILE (file)|| file == NULL, NULL);
self = g_object_new (IDE_TYPE_XML_SYMBOL_NODE,
"name", name,
@@ -172,15 +168,6 @@ ide_xml_symbol_node_new (const gchar *name,
if (!ide_str_empty0 (value))
self->value = g_strdup (value);
- if (file != NULL)
- self->file = g_object_ref (file);
-
- self->start_tag.start_line = start_line;
- self->start_tag.start_line_offset = start_line_offset;
- self->start_tag.end_line = end_line;
- self->start_tag.end_line_offset = end_line_offset;
- self->start_tag.size = size;
-
return self;
}
@@ -400,6 +387,14 @@ take_child (IdeXmlSymbolNode *self,
node_entry.is_internal = is_internal;
g_array_append_val (self->children, node_entry);
+
+ if (child != self)
+ {
+ if (child->parent != NULL)
+ g_object_unref (child->parent);
+
+ child->parent = g_object_ref (self);
+ }
}
void
@@ -577,6 +572,14 @@ ide_xml_symbol_node_set_value (IdeXmlSymbolNode *self,
self->value = g_strdup (value);
}
+IdeXmlSymbolNode *
+ide_xml_symbol_node_get_parent (IdeXmlSymbolNode *self)
+{
+ g_return_val_if_fail (IDE_IS_XML_SYMBOL_NODE (self), NULL);
+
+ return self->parent;
+}
+
/* Return -1 if before, 0 if in, 1 if after the range */
static inline gint
is_in_range (NodeRange range,
diff --git a/plugins/xml-pack/ide-xml-symbol-node.h b/plugins/xml-pack/ide-xml-symbol-node.h
index 26a461d..228e819 100644
--- a/plugins/xml-pack/ide-xml-symbol-node.h
+++ b/plugins/xml-pack/ide-xml-symbol-node.h
@@ -33,13 +33,7 @@ G_DECLARE_FINAL_TYPE (IdeXmlSymbolNode, ide_xml_symbol_node, IDE, XML_SYMBOL_NOD
IdeXmlSymbolNode *ide_xml_symbol_node_new (const gchar *name,
const gchar *value,
const gchar
*element_name,
- IdeSymbolKind kind,
- GFile *file,
- gint
start_line,
- gint
start_line_offset,
- gint
end_line,
- gint
end_line_offset,
- gsize size);
+ IdeSymbolKind kind);
IdeXmlPositionKind ide_xml_symbol_node_compare_location (IdeXmlSymbolNode
*ref_node,
gint line,
gint
line_offset);
@@ -72,6 +66,7 @@ IdeSymbolNode *ide_xml_symbol_node_get_nth_direct_child (Ide
guint
nth_child);
IdeSymbolNode *ide_xml_symbol_node_get_nth_internal_child (IdeXmlSymbolNode *self,
guint
nth_child);
+IdeXmlSymbolNode *ide_xml_symbol_node_get_parent (IdeXmlSymbolNode *self);
const gchar *ide_xml_symbol_node_get_value (IdeXmlSymbolNode *self);
gboolean ide_xml_symbol_node_has_end_tag (IdeXmlSymbolNode *self);
void ide_xml_symbol_node_set_location (IdeXmlSymbolNode *self,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]