diff --git a/platform/util/src/com/intellij/util/containers/ContainerUtil.java b/platform/util/src/com/intellij/util/containers/ContainerUtil.java index 531680d45241..008f26c62015 100644 --- a/platform/util/src/com/intellij/util/containers/ContainerUtil.java +++ b/platform/util/src/com/intellij/util/containers/ContainerUtil.java @@ -889,7 +889,7 @@ public class ContainerUtil { return value; } - public static V getOrCreate(final Map result, final T key, final Factory factory) { + public static V getOrCreate(@NotNull Map result, final T key, @NotNull Factory factory) { V value = result.get(key); if (value == null) { result.put(key, value = factory.create()); diff --git a/plugins/relaxng/src/org/intellij/plugins/relaxNG/model/resolve/DefinitionResolver.java b/plugins/relaxng/src/org/intellij/plugins/relaxNG/model/resolve/DefinitionResolver.java index 5ae1aed28033..13c0a8a5b8f6 100644 --- a/plugins/relaxng/src/org/intellij/plugins/relaxNG/model/resolve/DefinitionResolver.java +++ b/plugins/relaxng/src/org/intellij/plugins/relaxNG/model/resolve/DefinitionResolver.java @@ -51,8 +51,8 @@ public class DefinitionResolver extends CommonElement.Visitor implements private static final Key>>> KEY = Key.create("CACHED_DEFINES"); - private THashSet myVisitedFiles; - private Map> myDefines; + private static final ThreadLocal> myVisitedFiles = new ThreadLocal>(); + private static final ThreadLocal>> myDefines = new ThreadLocal>>(); private final Grammar myScope; @@ -65,11 +65,11 @@ public class DefinitionResolver extends CommonElement.Visitor implements include.acceptChildren(this); final PsiFile value = include.getInclude(); - if (myVisitedFiles == null) { + if (myVisitedFiles.get() == null) { //noinspection unchecked - myVisitedFiles = new THashSet(TObjectHashingStrategy.IDENTITY); + myVisitedFiles.set(new THashSet(TObjectHashingStrategy.IDENTITY)); } - if (value != null && myVisitedFiles.add(value)) { + if (value != null && myVisitedFiles.get().add(value)) { if (value instanceof RncFile) { final Grammar grammar = ((RncFile)value).getGrammar(); if (grammar != null) { @@ -92,7 +92,7 @@ public class DefinitionResolver extends CommonElement.Visitor implements @Override public void visitDefine(Define def) { - ContainerUtil.getOrCreate(myDefines, def.getName(), this).add(def); + ContainerUtil.getOrCreate(myDefines.get(), def.getName(), this).add(def); } public void visitPattern(Pattern pattern) { @@ -110,7 +110,7 @@ public class DefinitionResolver extends CommonElement.Visitor implements } public Result>> compute() { - myDefines = new HashMap>(); + myDefines.set(new HashMap>()); myScope.acceptChildren(this); @@ -121,15 +121,15 @@ public class DefinitionResolver extends CommonElement.Visitor implements } final PsiFile file = psiElement.getContainingFile(); - if (myVisitedFiles != null) { - myVisitedFiles.add(file); - return Result.create(myDefines, myVisitedFiles.toArray()); + if (myVisitedFiles.get() != null) { + myVisitedFiles.get().add(file); + return Result.create(myDefines.get(), myVisitedFiles.get().toArray()); } else { - return Result.create(myDefines, file); + return Result.create(myDefines.get(), file); } } finally { - myVisitedFiles = null; - myDefines = null; + myVisitedFiles.set(null); + myDefines.set(null); } }