Skip to content
This repository was archived by the owner on Apr 13, 2023. It is now read-only.

Commit 174645f

Browse files
committed
ToolLoader #4848: save tool models
1 parent acf5359 commit 174645f

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

common/src/com/redhat/ceylon/common/tool/ToolLoader.java

+14-3
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@
77
import java.lang.reflect.Modifier;
88
import java.lang.reflect.ParameterizedType;
99
import java.lang.reflect.Type;
10-
import java.net.MalformedURLException;
11-
import java.net.URL;
1210
import java.util.ArrayList;
1311
import java.util.Collections;
12+
import java.util.HashMap;
1413
import java.util.HashSet;
1514
import java.util.List;
1615
import java.util.Map;
@@ -30,6 +29,8 @@ public abstract class ToolLoader {
3029
protected static final String SCRIPT_PREFIX = "SCRIPT:";
3130

3231
protected final ClassLoader loader;
32+
33+
private Map<String, ToolModel<? extends Tool>> toolModels = new HashMap<String, ToolModel<? extends Tool>>();
3334

3435
public ToolLoader() {
3536
this(ToolLoader.class.getClassLoader());
@@ -75,7 +76,17 @@ protected String getToolClassName(final String toolName) {
7576
* Returns a ToolModel given the name of the tool, or null if no such tool is
7677
* know to this tool loader.
7778
*/
78-
public <T extends Tool> ToolModel<T> loadToolModel(String toolName) {
79+
public synchronized <T extends Tool> ToolModel<T> loadToolModel(String toolName) {
80+
@SuppressWarnings("unchecked")
81+
ToolModel<T> loadedModel = (ToolModel<T>) toolModels.get(toolName);
82+
if(loadedModel == null){
83+
loadedModel = loadToolModelMemoised(toolName);
84+
toolModels.put(toolName, loadedModel);
85+
}
86+
return loadedModel;
87+
}
88+
89+
private <T extends Tool> ToolModel<T> loadToolModelMemoised(String toolName) {
7990
String className = getToolClassName(toolName);
8091
if(className != null && className.startsWith(SCRIPT_PREFIX)){
8192
return loadScriptTool(className, toolName);

0 commit comments

Comments
 (0)