From b56874e119bf4fa495b34e96fed2a1e772d65cd7 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 11 May 2012 20:16:25 +0400 Subject: [PATCH] Replaced synchronized method with synchronizing on internal lock object. --- .../StandardLibraryReferenceResolver.java | 62 ++++++++++--------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java b/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java index 3bdb0eb3d9f..570da1c1692 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java +++ b/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java @@ -48,6 +48,8 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent { @SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized") private BindingContext bindingContext = null; + private final Object lock = new Object(); + public StandardLibraryReferenceResolver(Project project) { super(project); } @@ -62,36 +64,38 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent { }); } - private synchronized void ensureInitialized() { - if (bindingContext != null) { - return; + private void ensureInitialized() { + synchronized (lock) { + if (bindingContext != null) { + return; + } + + BindingTraceContext context = new BindingTraceContext(); + NamespaceDescriptorImpl fakeRootNamespace = new NamespaceDescriptorImpl(new ModuleDescriptor(""), + Collections.emptyList(), ""); + NamespaceDescriptorImpl jetNamespace = new NamespaceDescriptorImpl(fakeRootNamespace, + Collections.emptyList(), "jet"); + context.record(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, new FqName("jet"), jetNamespace); + + WritableScopeImpl scope = new WritableScopeImpl(JetScope.EMPTY, jetNamespace, RedeclarationHandler.THROW_EXCEPTION) + .setDebugName("Builtin classes scope"); + scope.changeLockLevel(WritableScope.LockLevel.BOTH); + jetNamespace.initialize(scope); + + TopDownAnalyzer.processStandardLibraryNamespace(myProject, context, scope, jetNamespace, getJetFiles("jet.src")); + + ClassDescriptor tuple0 = context.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, new FqName("jet.Tuple0")); + assert tuple0 != null; + scope = new WritableScopeImpl(scope, jetNamespace, RedeclarationHandler.THROW_EXCEPTION).setDebugName("Builtin classes scope #2"); + scope.changeLockLevel(WritableScope.LockLevel.BOTH); + scope.addClassifierAlias("Unit", tuple0); + jetNamespace.initialize(scope); + + TopDownAnalyzer.processStandardLibraryNamespace(myProject, context, scope, jetNamespace, getJetFiles("jet")); + AnalyzingUtils.throwExceptionOnErrors(context.getBindingContext()); + + bindingContext = context.getBindingContext(); } - - BindingTraceContext context = new BindingTraceContext(); - NamespaceDescriptorImpl fakeRootNamespace = new NamespaceDescriptorImpl(new ModuleDescriptor(""), - Collections.emptyList(), ""); - NamespaceDescriptorImpl jetNamespace = new NamespaceDescriptorImpl(fakeRootNamespace, - Collections.emptyList(), "jet"); - context.record(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, new FqName("jet"), jetNamespace); - - WritableScopeImpl scope = new WritableScopeImpl(JetScope.EMPTY, jetNamespace, RedeclarationHandler.THROW_EXCEPTION) - .setDebugName("Builtin classes scope"); - scope.changeLockLevel(WritableScope.LockLevel.BOTH); - jetNamespace.initialize(scope); - - TopDownAnalyzer.processStandardLibraryNamespace(myProject, context, scope, jetNamespace, getJetFiles("jet.src")); - - ClassDescriptor tuple0 = context.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, new FqName("jet.Tuple0")); - assert tuple0 != null; - scope = new WritableScopeImpl(scope, jetNamespace, RedeclarationHandler.THROW_EXCEPTION).setDebugName("Builtin classes scope #2"); - scope.changeLockLevel(WritableScope.LockLevel.BOTH); - scope.addClassifierAlias("Unit", tuple0); - jetNamespace.initialize(scope); - - TopDownAnalyzer.processStandardLibraryNamespace(myProject, context, scope, jetNamespace, getJetFiles("jet")); - AnalyzingUtils.throwExceptionOnErrors(context.getBindingContext()); - - bindingContext = context.getBindingContext(); } private List getJetFiles(String dir) {