瀏覽代碼

FrameContainer parents are Optional.

Change-Id: Ibaf13d210cd01e73adf08bac359244b14faef088
Depends-On: Ief9fccad45d654ffaee9d7a124ebc39f7af56166
Reviewed-on: http://gerrit.dmdirc.com/3470
Automatic-Compile: DMDirc Build Manager
Reviewed-by: Greg Holmes <greg@dmdirc.com>
pull/1/head
Chris Smith 10 年之前
父節點
當前提交
1ec3b56141

+ 3
- 1
src/com/dmdirc/CustomWindow.java 查看文件

@@ -27,6 +27,7 @@ import com.dmdirc.interfaces.config.AggregateConfigProvider;
27 27
 import com.dmdirc.ui.core.components.WindowComponent;
28 28
 import com.dmdirc.util.URLBuilder;
29 29
 
30
+import com.google.common.base.Optional;
30 31
 import com.google.common.eventbus.EventBus;
31 32
 
32 33
 import java.util.Arrays;
@@ -76,7 +77,8 @@ public class CustomWindow extends FrameContainer {
76 77
 
77 78
     @Override
78 79
     public Connection getConnection() {
79
-        return getParent() == null ? null : getParent().getConnection();
80
+        final Optional<FrameContainer> parent = getParent();
81
+        return parent.isPresent() ? parent.get().getConnection() : null;
80 82
     }
81 83
 
82 84
 }

+ 4
- 4
src/com/dmdirc/FrameContainer.java 查看文件

@@ -74,7 +74,7 @@ public abstract class FrameContainer {
74 74
     /** The children of this frame. */
75 75
     private final Collection<FrameContainer> children = new CopyOnWriteArrayList<>();
76 76
     /** The parent of this frame. */
77
-    private final FrameContainer parent;
77
+    private final Optional<FrameContainer> parent;
78 78
     /** The name of the icon being used for this container's frame. */
79 79
     private String icon;
80 80
     /** The name of this container. */
@@ -141,7 +141,7 @@ public abstract class FrameContainer {
141 141
             final URLBuilder urlBuilder,
142 142
             final EventBus eventBus,
143 143
             final Collection<String> components) {
144
-        this.parent = parent;
144
+        this.parent = Optional.fromNullable(parent);
145 145
         this.configManager = config;
146 146
         this.name = name;
147 147
         this.title = title;
@@ -185,7 +185,7 @@ public abstract class FrameContainer {
185 185
             final MessageSinkManager messageSinkManager,
186 186
             final EventBus eventbus,
187 187
             final Collection<String> components) {
188
-        this.parent = parent;
188
+        this.parent = Optional.fromNullable(parent);
189 189
         this.configManager = config;
190 190
         this.name = name;
191 191
         this.title = title;
@@ -205,7 +205,7 @@ public abstract class FrameContainer {
205 205
         return notification;
206 206
     }
207 207
 
208
-    public FrameContainer getParent() {
208
+    public Optional<FrameContainer> getParent() {
209 209
         return parent;
210 210
     }
211 211
 

+ 6
- 4
src/com/dmdirc/commandparser/commands/global/Echo.java 查看文件

@@ -39,6 +39,8 @@ import com.dmdirc.interfaces.CommandController;
39 39
 import com.dmdirc.ui.WindowManager;
40 40
 import com.dmdirc.ui.input.AdditionalTabTargets;
41 41
 
42
+import com.google.common.base.Optional;
43
+
42 44
 import java.util.ArrayList;
43 45
 import java.util.Date;
44 46
 import java.util.List;
@@ -99,12 +101,12 @@ public class Echo extends Command implements IntelligentCommand {
99 101
 
100 102
         if (results.hasFlag(targetFlag)) {
101 103
             FrameContainer frame = null;
102
-            FrameContainer target = origin;
104
+            Optional<FrameContainer> target = Optional.of(origin);
103 105
 
104
-            while (frame == null && target != null) {
105
-                frame = windowManager.findCustomWindow(target,
106
+            while (frame == null && target.isPresent()) {
107
+                frame = windowManager.findCustomWindow(target.get(),
106 108
                         results.getArgumentsAsString(targetFlag));
107
-                target = target.getParent();
109
+                target = target.get().getParent();
108 110
             }
109 111
 
110 112
             if (frame == null) {

+ 4
- 2
src/com/dmdirc/commandparser/commands/server/JoinChannelCommand.java 查看文件

@@ -40,6 +40,7 @@ import com.dmdirc.ui.input.AdditionalTabTargets;
40 40
 import com.dmdirc.ui.messages.Styliser;
41 41
 import com.dmdirc.util.collections.MapList;
42 42
 
43
+import com.google.common.base.Optional;
43 44
 import com.google.common.eventbus.EventBus;
44 45
 import com.google.common.eventbus.Subscribe;
45 46
 
@@ -173,8 +174,9 @@ public class JoinChannelCommand extends Command implements IntelligentCommand {
173 174
         }
174 175
 
175 176
         // Check the parent window
176
-        if (checkParents && source.getParent() != null) {
177
-            results.addAll(checkSource(source.getParent(), true, false));
177
+        final Optional<FrameContainer> parent = source.getParent();
178
+        if (checkParents && parent.isPresent()) {
179
+            results.addAll(checkSource(parent.get(), true, false));
178 180
         }
179 181
 
180 182
         // Check the children window

+ 13
- 5
src/com/dmdirc/ui/WindowManager.java 查看文件

@@ -29,6 +29,8 @@ import com.dmdirc.interfaces.FrameCloseListener;
29 29
 import com.dmdirc.interfaces.ui.FrameListener;
30 30
 import com.dmdirc.util.collections.ListenerList;
31 31
 
32
+import com.google.common.base.Optional;
33
+
32 34
 import java.util.Collection;
33 35
 import java.util.Collections;
34 36
 import java.util.List;
@@ -39,6 +41,7 @@ import javax.inject.Singleton;
39 41
 
40 42
 import static com.google.common.base.Preconditions.checkArgument;
41 43
 import static com.google.common.base.Preconditions.checkNotNull;
44
+import static com.google.common.base.Preconditions.checkState;
42 45
 
43 46
 /**
44 47
  * The WindowManager maintains a list of all open windows, and their parent/child relations.
@@ -208,8 +211,12 @@ public class WindowManager {
208 211
      * @return True if the target is in the hierarchy, false otherise
209 212
      */
210 213
     protected boolean isInHierarchy(final FrameContainer target) {
211
-        return target != null && (rootWindows.contains(target)
212
-                || isInHierarchy(target.getParent()));
214
+        if (rootWindows.contains(target)) {
215
+            return true;
216
+        }
217
+
218
+        final Optional<FrameContainer> parent = target.getParent();
219
+        return parent.isPresent() && isInHierarchy(parent.get());
213 220
     }
214 221
 
215 222
     /**
@@ -237,9 +244,10 @@ public class WindowManager {
237 244
             fireDeleteWindow(window);
238 245
             rootWindows.remove(window);
239 246
         } else {
240
-            final FrameContainer parent = window.getParent();
241
-            fireDeleteWindow(parent, window);
242
-            parent.removeChild(window);
247
+            final Optional<FrameContainer> parent = window.getParent();
248
+            checkState(parent.isPresent());
249
+            fireDeleteWindow(parent.get(), window);
250
+            parent.get().removeChild(window);
243 251
         }
244 252
     }
245 253
 

+ 18
- 7
test/com/dmdirc/ui/WindowManagerTest.java 查看文件

@@ -25,6 +25,8 @@ import com.dmdirc.CustomWindow;
25 25
 import com.dmdirc.FrameContainer;
26 26
 import com.dmdirc.interfaces.ui.FrameListener;
27 27
 
28
+import com.google.common.base.Optional;
29
+
28 30
 import java.util.Arrays;
29 31
 import java.util.Collection;
30 32
 
@@ -34,8 +36,17 @@ import org.junit.runner.RunWith;
34 36
 import org.mockito.Mock;
35 37
 import org.mockito.runners.MockitoJUnitRunner;
36 38
 
37
-import static org.junit.Assert.*;
38
-import static org.mockito.Mockito.*;
39
+import static org.junit.Assert.assertEquals;
40
+import static org.junit.Assert.assertNull;
41
+import static org.junit.Assert.assertTrue;
42
+import static org.mockito.Matchers.anyBoolean;
43
+import static org.mockito.Matchers.anyObject;
44
+import static org.mockito.Matchers.eq;
45
+import static org.mockito.Matchers.same;
46
+import static org.mockito.Mockito.mock;
47
+import static org.mockito.Mockito.never;
48
+import static org.mockito.Mockito.verify;
49
+import static org.mockito.Mockito.when;
39 50
 
40 51
 @RunWith(MockitoJUnitRunner.class)
41 52
 public class WindowManagerTest {
@@ -90,7 +101,7 @@ public class WindowManagerTest {
90 101
         manager.addWindow(container, child);
91 102
         manager.addListener(frameListener);
92 103
 
93
-        when(child.getParent()).thenReturn(container);
104
+        when(child.getParent()).thenReturn(Optional.of(container));
94 105
 
95 106
         manager.removeWindow(child);
96 107
 
@@ -148,7 +159,7 @@ public class WindowManagerTest {
148 159
     public void testRemoveWindowRootWindowWithChildren() {
149 160
         when(container.getChildren()).thenReturn(Arrays.asList(
150 161
                 new FrameContainer[]{child, }));
151
-        when(child.getParent()).thenReturn(container);
162
+        when(child.getParent()).thenReturn(Optional.of(container));
152 163
 
153 164
         manager.addListener(frameListener);
154 165
         manager.addWindow(container);
@@ -162,7 +173,7 @@ public class WindowManagerTest {
162 173
     public void testRemoveChildWindowNoChildren() {
163 174
         when(container.getChildren()).thenReturn(Arrays.asList(
164 175
                 new FrameContainer[]{child, }));
165
-        when(child.getParent()).thenReturn(container);
176
+        when(child.getParent()).thenReturn(Optional.of(container));
166 177
 
167 178
         manager.addListener(frameListener);
168 179
         manager.addWindow(container);
@@ -178,7 +189,7 @@ public class WindowManagerTest {
178 189
                 new FrameContainer[]{child, }));
179 190
         when(child.getChildren()).thenReturn(Arrays.asList(
180 191
                 new FrameContainer[]{grandchild, }));
181
-        when(child.getParent()).thenReturn(container);
192
+        when(child.getParent()).thenReturn(Optional.of(container));
182 193
 
183 194
         manager.addListener(frameListener);
184 195
         manager.addWindow(container);
@@ -195,7 +206,7 @@ public class WindowManagerTest {
195 206
         final FrameContainer root2 = mock(FrameContainer.class);
196 207
         final Collection<FrameContainer> rootWindows
197 208
                 = Arrays.asList(new FrameContainer[]{root1, root2, });
198
-        
209
+
199 210
         manager.addWindow(root1);
200 211
         manager.addWindow(root2);
201 212
 

Loading…
取消
儲存