From cdcb733436d5b1eebe1b2d8aac3f4d4462ab690a Mon Sep 17 00:00:00 2001 From: Sergey Vasiliev Date: Thu, 10 Nov 2005 14:32:06 +0300 Subject: [PATCH] fixed for tree updates for invalid model elements --- .../com/intellij/util/xml/tree/BaseDomElementNode.java | 17 +++++++++++------ .../intellij/util/xml/tree/DomElementsGroupNode.java | 1 + .../com/intellij/util/xml/tree/DomFileElementNode.java | 18 ++++++++++++++++++ .../intellij/util/xml/tree/DomModelTreeStructure.java | 6 +++--- .../com/intellij/util/xml/tree/GenericValueNode.java | 4 ++-- 5 files changed, 35 insertions(+), 11 deletions(-) create mode 100644 source/com/intellij/util/xml/tree/DomFileElementNode.java diff --git a/source/com/intellij/util/xml/tree/BaseDomElementNode.java b/source/com/intellij/util/xml/tree/BaseDomElementNode.java index 2c62244719..bdb95c34db 100644 --- a/source/com/intellij/util/xml/tree/BaseDomElementNode.java +++ b/source/com/intellij/util/xml/tree/BaseDomElementNode.java @@ -28,16 +28,21 @@ public class BaseDomElementNode extends AbstractDomElementNode { } public SimpleNode[] getChildren() { - List children = new ArrayList(); + return doGetChildren(myDomElement); + } + + protected SimpleNode[] doGetChildren(final DomElement domlElement) { + if (!domlElement.isValid()) return NO_CHILDREN; + List children = new ArrayList(); - final Collection methods = myDomElement.getMethodsInfo().getFixedChildrenGetterMethods(); + final Collection methods = domlElement.getMethodsInfo().getFixedChildrenGetterMethods(); for (Method method : methods) { try { - final Object result = method.invoke(myDomElement, new Object[0]); + final Object result = method.invoke(domlElement, new Object[0]); if (result instanceof DomElement) { - final String tagName = ((DomElement)result).getTagName(); + final String tagName = domlElement.getMethodsInfo().getTagName(method); if (showGenericValues() && result instanceof GenericValue) { children.add(new GenericValueNode((GenericValue)result, tagName, this)); @@ -52,10 +57,10 @@ public class BaseDomElementNode extends AbstractDomElementNode { } } - final Collection collectionMethods = myDomElement.getMethodsInfo().getCollectionChildrenGetterMethods(); + final Collection collectionMethods = domlElement.getMethodsInfo().getCollectionChildrenGetterMethods(); for (Method method : collectionMethods) { - children.add(getDomElementsGroupNode(myDomElement, method)); + children.add(getDomElementsGroupNode(domlElement, method)); } AbstractDomElementNode[] childrenNodes = children.toArray(new AbstractDomElementNode[children.size()]); diff --git a/source/com/intellij/util/xml/tree/DomElementsGroupNode.java b/source/com/intellij/util/xml/tree/DomElementsGroupNode.java index 307dd0c691..c6a4e26be3 100644 --- a/source/com/intellij/util/xml/tree/DomElementsGroupNode.java +++ b/source/com/intellij/util/xml/tree/DomElementsGroupNode.java @@ -26,6 +26,7 @@ public class DomElementsGroupNode extends AbstractDomElementNode { } public SimpleNode[] getChildren() { + if (!myModelElement.isValid()) return NO_CHILDREN; List children = new ArrayList(); try { final List objects = (List)myMethod.invoke(myModelElement, new Object[0]); diff --git a/source/com/intellij/util/xml/tree/DomFileElementNode.java b/source/com/intellij/util/xml/tree/DomFileElementNode.java new file mode 100644 index 0000000000..f3db412683 --- /dev/null +++ b/source/com/intellij/util/xml/tree/DomFileElementNode.java @@ -0,0 +1,18 @@ +package com.intellij.util.xml.tree; + +import com.intellij.util.xml.DomFileElement; +import jetbrains.fabrique.ui.treeStructure.SimpleNode; + +public class DomFileElementNode extends BaseDomElementNode { + private DomFileElement myFileElement; + + public DomFileElementNode(final DomFileElement fileElement) { + super(fileElement); + + myFileElement = fileElement; + } + + public SimpleNode[] getChildren() { + return doGetChildren(myFileElement.getRootElement()); + } +} diff --git a/source/com/intellij/util/xml/tree/DomModelTreeStructure.java b/source/com/intellij/util/xml/tree/DomModelTreeStructure.java index 8913abb509..20de33b789 100644 --- a/source/com/intellij/util/xml/tree/DomModelTreeStructure.java +++ b/source/com/intellij/util/xml/tree/DomModelTreeStructure.java @@ -11,11 +11,11 @@ public class DomModelTreeStructure extends SimpleTreeStructure { myFileElement = fileElement; } - protected BaseDomElementNode createRoot(DomFileElement rootElement) { - return new BaseDomElementNode(myFileElement.getRootElement()); + protected DomFileElementNode createRoot(DomFileElement rootElement) { + return new DomFileElementNode(myFileElement); } - public BaseDomElementNode getRootElement() { + public DomFileElementNode getRootElement() { return createRoot(myFileElement); } } \ No newline at end of file diff --git a/source/com/intellij/util/xml/tree/GenericValueNode.java b/source/com/intellij/util/xml/tree/GenericValueNode.java index 12937428b4..69aeffa095 100644 --- a/source/com/intellij/util/xml/tree/GenericValueNode.java +++ b/source/com/intellij/util/xml/tree/GenericValueNode.java @@ -43,10 +43,10 @@ public class GenericValueNode extends AbstractDomElementNode { } public SimpleNode[] getChildren() { - return new SimpleNode[0]; + return NO_CHILDREN; } public Object[] getEqualityObjects() { - return new Object[0]; + return NONE; } } -- 2.11.4.GIT