Jelajahi Sumber

Fixing two tiny errors.
- Don't allow null in StringFormatter
- Make ObserverDispatch use WeakReference

Sam Jaffe 8 tahun lalu
induk
melakukan
ab82a37b12

+ 1 - 0
src/main/lombok/org/leumasjaffe/format/StringFormatter.java

@@ -135,6 +135,7 @@ public class StringFormatter {
 	String fmt;
 	
 	public StringFormatter(String logFmtString) {
+		Objects.requireNonNull(logFmtString);
 		this.fmt = logFmtString;
 	}
 	

+ 4 - 3
src/main/lombok/org/leumasjaffe/observer/ObserverDispatch.java

@@ -1,5 +1,6 @@
 package org.leumasjaffe.observer;
 
+import java.lang.ref.WeakReference;
 import java.util.UUID;
 
 import com.google.common.collect.LinkedListMultimap;
@@ -16,14 +17,14 @@ public class ObserverDispatch {
 	@AllArgsConstructor
 	@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
 	private static class Pair {
-		Object obj;
+		WeakReference<Object> obj;
 		Subscriber sub;
 	}
 	
 	Multimap<UUID, Pair> observers = LinkedListMultimap.create();
 	
 	public void subscribe(Observable target, Object src, Subscriber sub) {
-		observers.put(target.observableId, new Pair(src, sub));
+		observers.put(target.observableId, new Pair(new WeakReference<>(src), sub));
 	}
 	
 	public void unsubscribeAll(Object src) {
@@ -31,7 +32,7 @@ public class ObserverDispatch {
 	}
 	
 	public void notifySubscribers(Observable target, Object src) {
-		observers.get(target.observableId).stream().filter( p -> p.obj != src ).forEach( 
+		observers.get(target.observableId).stream().filter( p -> p.obj.get() != src ).forEach( 
 				p -> p.sub.notifyUpdate() );
 	}
 }