2343 if (parent == null) {
2344 throw new NullPointerException();
2345 }
2346
2347 ensureManagerInitialized();
2348
2349 doSetParent(parent);
2350 }
2351
2352 // Private method to do the work for parenting a child
2353 // Logger onto a parent logger.
2354 private void doSetParent(Logger newParent) {
2355
2356 // System.err.println("doSetParent \"" + getName() + "\" \""
2357 // + newParent.getName() + "\"");
2358
2359 synchronized (treeLock) {
2360
2361 // Remove ourself from any previous parent.
2362 LogManager.LoggerWeakRef ref = null;
2363 if (parent != null) {
2364 // assert parent.kids != null;
2365 for (Iterator<LogManager.LoggerWeakRef> iter = parent.kids.iterator(); iter.hasNext(); ) {
2366 ref = iter.next();
2367 if (ref.refersTo(this)) {
2368 // ref is used down below to complete the reparenting
2369 iter.remove();
2370 break;
2371 } else {
2372 ref = null;
2373 }
2374 }
2375 // We have now removed ourself from our parents' kids.
2376 }
2377
2378 // Set our new parent.
2379 parent = newParent;
2380 if (parent.kids == null) {
2381 parent.kids = new ArrayList<>(2);
2382 }
2383 if (ref == null) {
2384 // we didn't have a previous parent
2385 ref = manager.new LoggerWeakRef(this);
2386 }
2387 ref.setParentRef(new WeakReference<>(parent));
2388 parent.kids.add(ref);
2389
2390 // As a result of the reparenting, the effective level
2391 // may have changed for us and our children.
2392 updateEffectiveLevel();
2393
2394 }
2395 }
2396
2397 // Package-level method.
2398 // Remove the weak reference for the specified child Logger from the
2399 // kid list. We should only be called from LoggerWeakRef.dispose().
|
2343 if (parent == null) {
2344 throw new NullPointerException();
2345 }
2346
2347 ensureManagerInitialized();
2348
2349 doSetParent(parent);
2350 }
2351
2352 // Private method to do the work for parenting a child
2353 // Logger onto a parent logger.
2354 private void doSetParent(Logger newParent) {
2355
2356 // System.err.println("doSetParent \"" + getName() + "\" \""
2357 // + newParent.getName() + "\"");
2358
2359 synchronized (treeLock) {
2360
2361 // Remove ourself from any previous parent.
2362 LogManager.LoggerWeakRef ref = null;
2363 Logger parent = this.parent;
2364 if (parent != null) {
2365 // assert parent.kids != null;
2366 for (Iterator<LogManager.LoggerWeakRef> iter = parent.kids.iterator(); iter.hasNext(); ) {
2367 ref = iter.next();
2368 if (ref.refersTo(this)) {
2369 // ref is used down below to complete the reparenting
2370 iter.remove();
2371 break;
2372 } else {
2373 ref = null;
2374 }
2375 }
2376 // We have now removed ourself from our parents' kids.
2377 }
2378
2379 // Set our new parent.
2380 this.parent = parent = newParent;
2381 if (parent.kids == null) {
2382 parent.kids = new ArrayList<>(2);
2383 }
2384 if (ref == null) {
2385 // we didn't have a previous parent
2386 ref = manager.new LoggerWeakRef(this);
2387 }
2388 ref.setParentRef(new WeakReference<>(parent));
2389 parent.kids.add(ref);
2390
2391 // As a result of the reparenting, the effective level
2392 // may have changed for us and our children.
2393 updateEffectiveLevel();
2394
2395 }
2396 }
2397
2398 // Package-level method.
2399 // Remove the weak reference for the specified child Logger from the
2400 // kid list. We should only be called from LoggerWeakRef.dispose().
|