Skip to content

Commit bca1bfc

Browse files
hjohnMichael Strauß
authored andcommitted
8243115: Spurious invalidations due to bug in IntegerBinding and other classes
Reviewed-by: arapte, mstrauss
1 parent ca29cc6 commit bca1bfc

File tree

9 files changed

+163
-59
lines changed

9 files changed

+163
-59
lines changed

modules/javafx.base/src/main/java/javafx/beans/binding/BooleanBinding.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ public BooleanBinding() {
6767

6868
private boolean value;
6969
private boolean valid = false;
70+
71+
/**
72+
* Invalidation listener used for observing dependencies. This
73+
* is never cleared once created as there is no way to determine
74+
* when all dependencies that were previously bound were removed
75+
* in one or more calls to {@link #unbind(Observable...)}.
76+
*/
7077
private BindingHelperObserver observer;
7178
private ExpressionHelper<Boolean> helper = null;
7279

@@ -119,7 +126,6 @@ protected final void unbind(Observable... dependencies) {
119126
for (final Observable dep : dependencies) {
120127
dep.removeListener(observer);
121128
}
122-
observer = null;
123129
}
124130
}
125131

modules/javafx.base/src/main/java/javafx/beans/binding/DoubleBinding.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@ public abstract class DoubleBinding extends DoubleExpression implements
113113

114114
private double value;
115115
private boolean valid;
116+
117+
/**
118+
* Invalidation listener used for observing dependencies. This
119+
* is never cleared once created as there is no way to determine
120+
* when all dependencies that were previously bound were removed
121+
* in one or more calls to {@link #unbind(Observable...)}.
122+
*/
116123
private BindingHelperObserver observer;
117124
private ExpressionHelper<Number> helper = null;
118125

@@ -171,7 +178,6 @@ protected final void unbind(Observable... dependencies) {
171178
for (final Observable dep : dependencies) {
172179
dep.removeListener(observer);
173180
}
174-
observer = null;
175181
}
176182
}
177183

modules/javafx.base/src/main/java/javafx/beans/binding/FloatBinding.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ public abstract class FloatBinding extends FloatExpression implements
6363

6464
private float value;
6565
private boolean valid;
66+
67+
/**
68+
* Invalidation listener used for observing dependencies. This
69+
* is never cleared once created as there is no way to determine
70+
* when all dependencies that were previously bound were removed
71+
* in one or more calls to {@link #unbind(Observable...)}.
72+
*/
6673
private BindingHelperObserver observer;
6774
private ExpressionHelper<Number> helper = null;
6875

@@ -121,7 +128,6 @@ protected final void unbind(Observable... dependencies) {
121128
for (final Observable dep : dependencies) {
122129
dep.removeListener(observer);
123130
}
124-
observer = null;
125131
}
126132
}
127133

modules/javafx.base/src/main/java/javafx/beans/binding/IntegerBinding.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ public abstract class IntegerBinding extends IntegerExpression implements
6363

6464
private int value;
6565
private boolean valid = false;
66+
67+
/**
68+
* Invalidation listener used for observing dependencies. This
69+
* is never cleared once created as there is no way to determine
70+
* when all dependencies that were previously bound were removed
71+
* in one or more calls to {@link #unbind(Observable...)}.
72+
*/
6673
private BindingHelperObserver observer;
6774
private ExpressionHelper<Number> helper = null;
6875

@@ -121,7 +128,6 @@ protected final void unbind(Observable... dependencies) {
121128
for (final Observable dep : dependencies) {
122129
dep.removeListener(observer);
123130
}
124-
observer = null;
125131
}
126132
}
127133

modules/javafx.base/src/main/java/javafx/beans/binding/ListBinding.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,13 @@ public void onChanged(Change<? extends E> change) {
8181

8282
private ObservableList<E> value;
8383
private boolean valid = false;
84+
85+
/**
86+
* Invalidation listener used for observing dependencies. This
87+
* is never cleared once created as there is no way to determine
88+
* when all dependencies that were previously bound were removed
89+
* in one or more calls to {@link #unbind(Observable...)}.
90+
*/
8491
private BindingHelperObserver observer;
8592
private ListExpressionHelper<E> helper = null;
8693

@@ -211,7 +218,6 @@ protected final void unbind(Observable... dependencies) {
211218
dep.removeListener(observer);
212219
}
213220
}
214-
observer = null;
215221
}
216222
}
217223

modules/javafx.base/src/main/java/javafx/beans/binding/LongBinding.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ public abstract class LongBinding extends LongExpression implements
6363

6464
private long value;
6565
private boolean valid = false;
66+
67+
/**
68+
* Invalidation listener used for observing dependencies. This
69+
* is never cleared once created as there is no way to determine
70+
* when all dependencies that were previously bound were removed
71+
* in one or more calls to {@link #unbind(Observable...)}.
72+
*/
6673
private BindingHelperObserver observer;
6774
private ExpressionHelper<Number> helper = null;
6875

@@ -121,7 +128,6 @@ protected final void unbind(Observable... dependencies) {
121128
for (final Observable dep : dependencies) {
122129
dep.removeListener(observer);
123130
}
124-
observer = null;
125131
}
126132
}
127133

modules/javafx.base/src/main/java/javafx/beans/binding/ObjectBinding.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ public abstract class ObjectBinding<T> extends ObjectExpression<T> implements
6363

6464
private T value;
6565
private boolean valid = false;
66+
67+
/**
68+
* Invalidation listener used for observing dependencies. This
69+
* is never cleared once created as there is no way to determine
70+
* when all dependencies that were previously bound were removed
71+
* in one or more calls to {@link #unbind(Observable...)}.
72+
*/
6673
private BindingHelperObserver observer;
6774
private ExpressionHelper<T> helper = null;
6875

@@ -121,7 +128,6 @@ protected final void unbind(Observable... dependencies) {
121128
for (final Observable dep : dependencies) {
122129
dep.removeListener(observer);
123130
}
124-
observer = null;
125131
}
126132
}
127133

modules/javafx.base/src/main/java/javafx/beans/binding/StringBinding.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,13 @@ public abstract class StringBinding extends StringExpression implements
6262

6363
private String value;
6464
private boolean valid = false;
65+
66+
/**
67+
* Invalidation listener used for observing dependencies. This
68+
* is never cleared once created as there is no way to determine
69+
* when all dependencies that were previously bound were removed
70+
* in one or more calls to {@link #unbind(Observable...)}.
71+
*/
6572
private BindingHelperObserver observer;
6673
private ExpressionHelper<String> helper = null;
6774

@@ -120,7 +127,6 @@ protected final void unbind(Observable... dependencies) {
120127
for (final Observable dep : dependencies) {
121128
dep.removeListener(observer);
122129
}
123-
observer = null;
124130
}
125131
}
126132

0 commit comments

Comments
 (0)