1 /*
2 * This file is part of dependency-check-ant.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 * Copyright (c) 2015 The OWASP Foundation. All Rights Reserved.
17 */
18 package org.owasp.dependencycheck.ant.logging;
19
20 import org.apache.tools.ant.Task;
21
22 /**
23 * Holds a reference to the current Ant Task for logging. Replaces the old
24 * StaticLoggerBinder singleton pattern used with SLF4J 1.x.
25 * <p>
26 * Uses ThreadLocal to ensure thread-safety when Ant runs tasks in parallel.
27 * </p>
28 */
29 public final class AntTaskHolder {
30
31 private static final ThreadLocal<Task> task = new ThreadLocal<>();
32
33 private AntTaskHolder() {
34 }
35
36 /**
37 * Sets the current Ant task to use for logging.
38 *
39 * @param t the Ant task
40 */
41 public static void setTask(Task t) {
42 task.set(t);
43 }
44
45 /**
46 * Returns the current Ant task.
47 *
48 * @return the Ant task, or null if not set
49 */
50 public static Task getTask() {
51 return task.get();
52 }
53
54 /**
55 * Removes the current Ant task from the thread-local storage.
56 * This should be called when the task completes to prevent memory leaks
57 * in environments with thread pooling.
58 */
59 public static void remove() {
60 task.remove();
61 }
62 }