2 * Copyright 2000-2009 JetBrains s.r.o.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package com
.intellij
.openapi
.module
.impl
;
18 import com
.intellij
.ProjectTopics
;
19 import com
.intellij
.openapi
.Disposable
;
20 import com
.intellij
.openapi
.module
.Module
;
21 import com
.intellij
.openapi
.module
.ModulePointer
;
22 import com
.intellij
.openapi
.module
.ModulePointerManager
;
23 import com
.intellij
.openapi
.project
.ModuleAdapter
;
24 import com
.intellij
.openapi
.project
.Project
;
25 import com
.intellij
.openapi
.util
.Disposer
;
27 import java
.util
.HashMap
;
33 public class ModulePointerManagerImpl
extends ModulePointerManager
{
34 private Map
<String
, ModulePointerImpl
> myUnresolved
= new HashMap
<String
, ModulePointerImpl
>();
35 private Map
<Module
, ModulePointerImpl
> myPointers
= new HashMap
<Module
, ModulePointerImpl
>();
36 private final Project myProject
;
38 public ModulePointerManagerImpl(Project project
) {
40 project
.getMessageBus().connect().subscribe(ProjectTopics
.MODULES
, new ModuleAdapter() {
42 public void beforeModuleRemoved(Project project
, Module module
) {
43 unregisterPointer(module
);
47 public void moduleAdded(Project project
, Module module
) {
48 final ModulePointerImpl pointer
= myUnresolved
.remove(module
.getName());
49 if (pointer
!= null) {
50 pointer
.moduleAdded(module
);
51 registerPointer(module
, pointer
);
57 private void registerPointer(final Module module
, final ModulePointerImpl pointer
) {
58 myPointers
.put(module
, pointer
);
59 Disposer
.register(module
, new Disposable() {
60 public void dispose() {
61 unregisterPointer(module
);
66 private void unregisterPointer(Module module
) {
67 final ModulePointerImpl pointer
= myPointers
.remove(module
);
68 if (pointer
!= null) {
69 pointer
.moduleRemoved(module
);
70 myUnresolved
.put(pointer
.getModuleName(), pointer
);
75 public ModulePointer
create(Module module
) {
76 ModulePointerImpl pointer
= myPointers
.get(module
);
77 if (pointer
== null) {
78 pointer
= new ModulePointerImpl(module
);
79 registerPointer(module
, pointer
);
85 public ModulePointer
create(String moduleName
) {
86 final Module module
= ModuleManagerImpl
.getInstance(myProject
).findModuleByName(moduleName
);
88 return create(module
);
91 ModulePointerImpl pointer
= myUnresolved
.get(moduleName
);
92 if (pointer
== null) {
93 pointer
= new ModulePointerImpl(moduleName
);
94 myUnresolved
.put(moduleName
, pointer
);