diff --git a/src/xercesc/validators/schema/SchemaGrammar.cpp b/src/xercesc/validators/schema/SchemaGrammar.cpp index 71e957f942b4fcccf196488583170635bb15543f..e5e8f86542da11cc8e4f3de7b61c5570f2c57136 100644 --- a/src/xercesc/validators/schema/SchemaGrammar.cpp +++ b/src/xercesc/validators/schema/SchemaGrammar.cpp @@ -59,6 +59,7 @@ SchemaGrammar::SchemaGrammar(MemoryManager* const manager) : , fValidated(false) , fDatatypeRegistry(manager) , fScopeCount (0) + , fAnonTypeCount (0) { CleanupType cleanup(this, &SchemaGrammar::cleanUp); diff --git a/src/xercesc/validators/schema/SchemaGrammar.hpp b/src/xercesc/validators/schema/SchemaGrammar.hpp index 03eb4091cf385ff2fee4ca492409e844149bb8ba..e803c0235c420213d138765d6d32c883fe1e068d 100644 --- a/src/xercesc/validators/schema/SchemaGrammar.hpp +++ b/src/xercesc/validators/schema/SchemaGrammar.hpp @@ -243,6 +243,12 @@ public: unsigned int getScopeCount () const; void setScopeCount (unsigned int); + /** + * Get/set anonymous type count. + */ + unsigned int getAnonTypeCount () const; + void setAnonTypeCount (unsigned int); + /*** * Support for Serialization/De-serialization ***/ @@ -334,6 +340,7 @@ private: DatatypeValidatorFactory fDatatypeRegistry; unsigned int fScopeCount; + unsigned int fAnonTypeCount; }; @@ -614,6 +621,18 @@ SchemaGrammar::setScopeCount (unsigned int scopeCount) fScopeCount = scopeCount; } +inline unsigned int +SchemaGrammar::getAnonTypeCount () const +{ + return fAnonTypeCount; +} + +inline void +SchemaGrammar::setAnonTypeCount (unsigned int count) +{ + fAnonTypeCount = count; +} + XERCES_CPP_NAMESPACE_END #endif diff --git a/src/xercesc/validators/schema/TraverseSchema.cpp b/src/xercesc/validators/schema/TraverseSchema.cpp index e39631f4072b3d18189db33f7f7d99fdea72fe9f..f63b81f3d5a9503ae95de7f2bc32614894ddc7ab 100644 --- a/src/xercesc/validators/schema/TraverseSchema.cpp +++ b/src/xercesc/validators/schema/TraverseSchema.cpp @@ -169,7 +169,7 @@ TraverseSchema::TraverseSchema( DOMElement* const schemaRoot , fEmptyNamespaceURI(-1) , fCurrentScope(Grammar::TOP_LEVEL_SCOPE) , fScopeCount(schemaGrammar->getScopeCount ()) - , fAnonXSTypeCount(0) + , fAnonXSTypeCount(schemaGrammar->getAnonTypeCount ()) , fCircularCheckIndex(0) , fTargetNSURIString(0) , fDatatypeRegistry(0) @@ -235,11 +235,12 @@ TraverseSchema::TraverseSchema( DOMElement* const schemaRoot preprocessSchema(schemaRoot, schemaURL, multipleImport); doTraverseSchema(schemaRoot); - // Store the scope count in case we need to add more to this - // grammar (multi-import case). schemaGrammar and fSchemaGrammar - // should be the same here. + // Store the scope and anon type counts in case we need to add + // more to this grammar (multi-import case). schemaGrammar and + // fSchemaGrammar should be the same here. // fSchemaGrammar->setScopeCount (fScopeCount); + fSchemaGrammar->setAnonTypeCount (fAnonXSTypeCount); } } @@ -885,6 +886,7 @@ void TraverseSchema::preprocessImport(const DOMElement* const elem) { // -------------------------------------------------------- SchemaInfo* saveInfo = fSchemaInfo; fSchemaGrammar->setScopeCount (fScopeCount); + fSchemaGrammar->setAnonTypeCount (fAnonXSTypeCount); if (grammarFound) { fSchemaGrammar = (SchemaGrammar*) aGrammar; } @@ -892,6 +894,8 @@ void TraverseSchema::preprocessImport(const DOMElement* const elem) { fSchemaGrammar = new (fGrammarPoolMemoryManager) SchemaGrammar(fGrammarPoolMemoryManager); } fScopeCount = fSchemaGrammar->getScopeCount (); + fAnonXSTypeCount = fSchemaGrammar->getAnonTypeCount (); + XMLSchemaDescription* gramDesc = (XMLSchemaDescription*) fSchemaGrammar->getGrammarDescription(); gramDesc->setContextType(XMLSchemaDescription::CONTEXT_IMPORT); gramDesc->setLocationHints(importURL); @@ -6940,8 +6944,11 @@ void TraverseSchema::restoreSchemaInfo(SchemaInfo* const toRestore, int targetNSURI = toRestore->getTargetNSURI(); fSchemaGrammar->setScopeCount (fScopeCount); + fSchemaGrammar->setAnonTypeCount (fAnonXSTypeCount); + fSchemaGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(toRestore->getTargetNSURIString()); fScopeCount = fSchemaGrammar->getScopeCount (); + fAnonXSTypeCount = fSchemaGrammar->getAnonTypeCount (); fTargetNSURI = targetNSURI; fCurrentScope = saveScope;