@@ -117,17 +117,23 @@ function Namespace(name, options) {
117117 * @private
118118 */
119119 this . _lookupCache = { } ;
120+
121+ /**
122+ * Whether or not objects contained in this namespace need feature resolution.
123+ * @type {boolean }
124+ * @protected
125+ */
126+ this . _needsRecursiveFeatureResolution = true ;
120127}
121128
122129function clearCache ( namespace ) {
123130 namespace . _nestedArray = null ;
124131 namespace . _lookupCache = { } ;
125132
126133 // Also clear parent caches, since they include nested lookups.
127- var parent = namespace . parent ;
128- while ( parent ) {
134+ var parent = namespace ;
135+ while ( parent = parent . parent ) {
129136 parent . _lookupCache = { } ;
130- parent = parent . parent ;
131137 }
132138 return namespace ;
133139}
@@ -266,6 +272,14 @@ Namespace.prototype.add = function add(object) {
266272 }
267273 }
268274
275+ this . _needsRecursiveFeatureResolution = true ;
276+
277+ // Also clear parent caches, since they need to recurse down.
278+ var parent = this ;
279+ while ( parent = parent . parent ) {
280+ parent . _needsRecursiveFeatureResolution = true ;
281+ }
282+
269283 object . onAdd ( this ) ;
270284 return clearCache ( this ) ;
271285} ;
@@ -341,6 +355,9 @@ Namespace.prototype.resolveAll = function resolveAll() {
341355 * @override
342356 */
343357Namespace . prototype . _resolveFeaturesRecursive = function _resolveFeaturesRecursive ( edition ) {
358+ if ( ! this . _needsRecursiveFeatureResolution ) return this ;
359+ this . _needsRecursiveFeatureResolution = false ;
360+
344361 edition = this . _edition || edition ;
345362
346363 ReflectionObject . prototype . _resolveFeaturesRecursive . call ( this , edition ) ;
0 commit comments