[296172] Schema causes stack error
[301167] UI freeze when grammar loading job name is a very long string
diff --git a/bundles/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF
index ba454d4..bb4d5d9 100644
--- a/bundles/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.wst.xml.core; singleton:=true
-Bundle-Version: 1.1.103.qualifier
+Bundle-Version: 1.1.104.qualifier
Bundle-Activator: org.eclipse.wst.xml.core.internal.XMLCorePlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.wst.xml.core/src-contentmodel/org/eclipse/wst/xml/core/internal/contentmodel/modelqueryimpl/CMDocumentManagerImpl.java b/bundles/org.eclipse.wst.xml.core/src-contentmodel/org/eclipse/wst/xml/core/internal/contentmodel/modelqueryimpl/CMDocumentManagerImpl.java
index fa9dc1c..b4f38b0 100644
--- a/bundles/org.eclipse.wst.xml.core/src-contentmodel/org/eclipse/wst/xml/core/internal/contentmodel/modelqueryimpl/CMDocumentManagerImpl.java
+++ b/bundles/org.eclipse.wst.xml.core/src-contentmodel/org/eclipse/wst/xml/core/internal/contentmodel/modelqueryimpl/CMDocumentManagerImpl.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2002 IBM Corporation and others.
+ * Copyright (c) 2002, 2010 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
@@ -214,7 +214,9 @@
cmDocumentCache.setStatus(resolvedURI, CMDocumentCache.STATUS_LOADING);
//Thread thread = new Thread(new AsyncBuildOperation(publicId, resolvedURI, type));
//thread.start();
- Job job = new Job(XMLCoreMessages.loading + resolvedURI)
+ final int maxURILength = 150;
+ String uri = resolvedURI.length() > maxURILength ? resolvedURI.substring(0, maxURILength - 1) : resolvedURI;
+ Job job = new Job(XMLCoreMessages.loading + uri)
{
public boolean belongsTo(Object family)
{
diff --git a/bundles/org.eclipse.wst.xml.core/src-contentmodel/org/eclipse/wst/xml/core/internal/contentmodel/util/CMVisitor.java b/bundles/org.eclipse.wst.xml.core/src-contentmodel/org/eclipse/wst/xml/core/internal/contentmodel/util/CMVisitor.java
index f5a14c2..8db26a8 100644
--- a/bundles/org.eclipse.wst.xml.core/src-contentmodel/org/eclipse/wst/xml/core/internal/contentmodel/util/CMVisitor.java
+++ b/bundles/org.eclipse.wst.xml.core/src-contentmodel/org/eclipse/wst/xml/core/internal/contentmodel/util/CMVisitor.java
@@ -1,10 +1,10 @@
/*******************************************************************************
- * Copyright (c) 2002 IBM Corporation and others.
+ * Copyright (c) 2002, 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
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* IBM Corporation - initial API and implementation
* Jens Lukowski/Innoopract - initial renaming/restructuring
@@ -12,6 +12,8 @@
*******************************************************************************/
package org.eclipse.wst.xml.core.internal.contentmodel.util;
+import java.util.Stack;
+
import org.eclipse.wst.xml.core.internal.contentmodel.CMAnyElement;
import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
@@ -25,6 +27,7 @@
public class CMVisitor
{
protected int indent = 0;
+ protected Stack visitedCMGroupStack = new Stack();
public void visitCMNode(CMNode node)
{
@@ -62,7 +65,21 @@
}
case CMNode.GROUP :
{
- visitCMGroup((CMGroup)node);
+ CMGroup group = (CMGroup)node;
+
+ // This is to prevent recursion.
+ if (visitedCMGroupStack.contains(group))
+ {
+ break;
+ }
+
+ // Push the current group to check later to avoid potential recursion
+ visitedCMGroupStack.push(group);
+
+ visitCMGroup(group);
+
+ // Pop the current group
+ visitedCMGroupStack.pop();
break;
}
}