@@ -124,13 +124,6 @@ function Namespace(name, options) {
124124 * @protected
125125 */
126126 this . _needsRecursiveFeatureResolution = true ;
127-
128- /**
129- * Whether or not objects contained in this namespace need a resolve.
130- * @type {boolean }
131- * @protected
132- */
133- this . _needsRecursiveResolve = true ;
134127}
135128
136129function clearCache ( namespace ) {
@@ -280,13 +273,11 @@ Namespace.prototype.add = function add(object) {
280273 }
281274
282275 this . _needsRecursiveFeatureResolution = true ;
283- this . _needsRecursiveResolve = true ;
284276
285277 // Also clear parent caches, since they need to recurse down.
286278 var parent = this ;
287279 while ( parent = parent . parent ) {
288280 parent . _needsRecursiveFeatureResolution = true ;
289- parent . _needsRecursiveResolve = true ;
290281 }
291282
292283 object . onAdd ( this ) ;
@@ -350,16 +341,13 @@ Namespace.prototype.define = function define(path, json) {
350341 * @returns {Namespace } `this`
351342 */
352343Namespace . prototype . resolveAll = function resolveAll ( ) {
353- if ( ! this . _needsRecursiveResolve ) return this ;
354-
355344 var nested = this . nestedArray , i = 0 ;
356345 this . resolve ( ) ;
357346 while ( i < nested . length )
358347 if ( nested [ i ] instanceof Namespace )
359348 nested [ i ++ ] . resolveAll ( ) ;
360349 else
361350 nested [ i ++ ] . resolve ( ) ;
362- this . _needsRecursiveResolve = false ;
363351 return this ;
364352} ;
365353
@@ -401,47 +389,29 @@ Namespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChe
401389 } else if ( ! path . length )
402390 return this ;
403391
404- var flatPath = path . join ( "." ) ;
405-
406392 // Start at root if path is absolute
407393 if ( path [ 0 ] === "" )
408394 return this . root . lookup ( path . slice ( 1 ) , filterTypes ) ;
409395
410- // Early bailout for objects with matching absolute paths
411- var found = this . root . _fullyQualifiedObjects [ "." + flatPath ] ;
412- if ( found && ( ! filterTypes || filterTypes . indexOf ( found . constructor ) > - 1 ) ) {
413- return found ;
414- }
415-
416- // Do a regular lookup at this namespace and below
417- found = this . _lookupImpl ( path , flatPath ) ;
396+ var found = this . _lookupImpl ( path ) ;
418397 if ( found && ( ! filterTypes || filterTypes . indexOf ( found . constructor ) > - 1 ) ) {
419398 return found ;
420399 }
421400
422- if ( parentAlreadyChecked )
401+ // If there hasn't been a match, try again at the parent
402+ if ( this . parent === null || parentAlreadyChecked )
423403 return null ;
424-
425- // If there hasn't been a match, walk up the tree and look more broadly
426- var current = this ;
427- while ( current . parent ) {
428- found = current . parent . _lookupImpl ( path , flatPath ) ;
429- if ( found && ( ! filterTypes || filterTypes . indexOf ( found . constructor ) > - 1 ) ) {
430- return found ;
431- }
432- current = current . parent ;
433- }
434- return null ;
404+ return this . parent . lookup ( path , filterTypes ) ;
435405} ;
436406
437407/**
438408 * Internal helper for lookup that handles searching just at this namespace and below along with caching.
439409 * @param {string[] } path Path to look up
440- * @param {string } flatPath Flattened version of the path to use as a cache key
441410 * @returns {ReflectionObject|null } Looked up object or `null` if none could be found
442411 * @private
443412 */
444- Namespace . prototype . _lookupImpl = function lookup ( path , flatPath ) {
413+ Namespace . prototype . _lookupImpl = function lookup ( path ) {
414+ var flatPath = path . join ( "." ) ;
445415 if ( Object . prototype . hasOwnProperty . call ( this . _lookupCache , flatPath ) ) {
446416 return this . _lookupCache [ flatPath ] ;
447417 }
@@ -452,15 +422,13 @@ Namespace.prototype._lookupImpl = function lookup(path, flatPath) {
452422 if ( found ) {
453423 if ( path . length === 1 ) {
454424 exact = found ;
455- } else if ( found instanceof Namespace ) {
456- path = path . slice ( 1 ) ;
457- exact = found . _lookupImpl ( path , path . join ( "." ) ) ;
458- }
425+ } else if ( found instanceof Namespace && ( found = found . _lookupImpl ( path . slice ( 1 ) ) ) )
426+ exact = found ;
459427
460428 // Otherwise try each nested namespace
461429 } else {
462430 for ( var i = 0 ; i < this . nestedArray . length ; ++ i )
463- if ( this . _nestedArray [ i ] instanceof Namespace && ( found = this . _nestedArray [ i ] . _lookupImpl ( path , flatPath ) ) )
431+ if ( this . _nestedArray [ i ] instanceof Namespace && ( found = this . _nestedArray [ i ] . _lookupImpl ( path ) ) )
464432 exact = found ;
465433 }
466434
0 commit comments