[296172] Schema causes stack error
diff --git a/bundles/org.eclipse.wst.xsd.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.xsd.core/META-INF/MANIFEST.MF
index ea09baa..e7e765e 100644
--- a/bundles/org.eclipse.wst.xsd.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.xsd.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %_UI_PLUGIN_NAME
Bundle-SymbolicName: org.eclipse.wst.xsd.core; singleton:=true
-Bundle-Version: 1.1.101.qualifier
+Bundle-Version: 1.1.102.qualifier
Bundle-Activator: org.eclipse.wst.xsd.core.internal.XSDCorePlugin
Bundle-Vendor: %Bundle-Vendor.0
Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.wst.xsd.core/src-contentmodel/org/eclipse/wst/xsd/contentmodel/internal/XSDVisitor.java b/bundles/org.eclipse.wst.xsd.core/src-contentmodel/org/eclipse/wst/xsd/contentmodel/internal/XSDVisitor.java
index f40e1a4..ad50d3c 100644
--- a/bundles/org.eclipse.wst.xsd.core/src-contentmodel/org/eclipse/wst/xsd/contentmodel/internal/XSDVisitor.java
+++ b/bundles/org.eclipse.wst.xsd.core/src-contentmodel/org/eclipse/wst/xsd/contentmodel/internal/XSDVisitor.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
package org.eclipse.wst.xsd.contentmodel.internal;
import java.util.Iterator;
+import java.util.Stack;
import org.eclipse.xsd.XSDAttributeDeclaration;
import org.eclipse.xsd.XSDAttributeGroupDefinition;
@@ -35,6 +36,7 @@
}
protected XSDSchema schema;
+ protected Stack particleStack = new Stack();
public void visitSchema(XSDSchema schema)
{
@@ -156,7 +158,18 @@
{
if (particleContent instanceof XSDModelGroupDefinition)
{
- visitModelGroupDefinition((XSDModelGroupDefinition) particleContent);
+ XSDModelGroupDefinition modelGroupDef = (XSDModelGroupDefinition) particleContent;
+
+ if (particleStack.contains(modelGroupDef))
+ {
+ return;
+ }
+
+ particleStack.push(modelGroupDef);
+
+ visitModelGroupDefinition(modelGroupDef);
+
+ particleStack.pop();
}
else if (particleContent instanceof XSDModelGroup)
{