changeset 10007:c48034a84c9c jdk-9+133

Merge
author kcr
date Fri, 19 Aug 2016 16:16:57 -0700
parents 5cdc7635e67c f99fafeff582
children a3c73f9e3c43 864b9d740ce0
files
diffstat 73 files changed, 614 insertions(+), 226 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Thu Aug 18 08:39:32 2016 +0000
+++ b/.hgignore	Fri Aug 19 16:16:57 2016 -0700
@@ -1,3 +1,4 @@
+^\.jcheck/
 \.orig$
 \.bak$
 \.DS_Store$
--- a/build.gradle	Thu Aug 18 08:39:32 2016 +0000
+++ b/build.gradle	Fri Aug 19 16:16:57 2016 -0700
@@ -1860,9 +1860,6 @@
                 enabled = false
                 logger.info("SWT tests are disabled on MAC, because Gradle test runner does not handle -XstartOnFirstThread properly (https://issues.gradle.org/browse/GRADLE-3290).")
             }
-            if (IS_LINUX) {
-                logger.info("SWT tests may cause 'Gtk-CRITICAL **: IA__gtk_main_quit: assertion 'main_loops != NULL' failed' LINUX (https://bugs.eclipse.org/bugs/show_bug.cgi?id=435066). This happens on shutdown, the tests are not affected.")
-            }
         }
     }
 }
--- a/modules/javafx.base/src/main/java/javafx/beans/DefaultProperty.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/DefaultProperty.java	Fri Aug 19 16:16:57 2016 -0700
@@ -45,6 +45,7 @@
 public @interface DefaultProperty {
     /**
      * The name of the default property.
+     * @return the name of the property
      */
     public String value();
 }
--- a/modules/javafx.base/src/main/java/javafx/beans/binding/Bindings.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/binding/Bindings.java	Fri Aug 19 16:16:57 2016 -0700
@@ -315,6 +315,7 @@
     /**
      * Helper function to create a custom {@link ObjectBinding}.
      *
+     * @param <T> the type of the bound {@code Object}
      * @param func The function that calculates the value of this binding
      * @param dependencies The dependencies of this binding
      * @return The generated binding
@@ -406,6 +407,7 @@
      *
      * Note: since 8.0, JavaBeans properties are supported and might be in the chain.
      *
+     * @param <T> the type of the wrapped {@code Object}
      * @param root
      *            The root {@link javafx.beans.value.ObservableValue}
      * @param steps
@@ -544,9 +546,10 @@
      * <p>
      * All classes and properties used in a select-binding have to be public.
      *
-     * If root has JavaFX properties, this call is equivalent to {@link #select(javafx.beans.value.ObservableValue, java.lang.String[]),
+     * If root has JavaFX properties, this call is equivalent to {@link #select(javafx.beans.value.ObservableValue, java.lang.String[])},
      * with the {@code root} and {@code step[0]} being substituted with the relevant property object.
      *
+     * @param <T> the type of the wrapped {@code Object}
      * @param root
      *            The root bean.
      * @param steps
@@ -567,7 +570,7 @@
      * <p>
      * All classes and properties used in a select-binding have to be public.
      *
-     * If root has JavaFX properties, this call is equivalent to {@link #selectDouble(javafx.beans.value.ObservableValue, java.lang.String[]),
+     * If root has JavaFX properties, this call is equivalent to {@link #selectDouble(javafx.beans.value.ObservableValue, java.lang.String[])},
      * with the {@code root} and {@code step[0]} being substituted with the relevant property object.
      *
      * @param root
@@ -590,7 +593,7 @@
      * <p>
      * All classes and properties used in a select-binding have to be public.
      *
-     * If root has JavaFX properties, this call is equivalent to {@link #selectFloat(javafx.beans.value.ObservableValue, java.lang.String[]),
+     * If root has JavaFX properties, this call is equivalent to {@link #selectFloat(javafx.beans.value.ObservableValue, java.lang.String[])},
      * with the {@code root} and {@code step[0]} being substituted with the relevant property object.
      *
      * @param root
@@ -613,7 +616,7 @@
      * <p>
      * All classes and properties used in a select-binding have to be public.
      *
-     * If root has JavaFX properties, this call is equivalent to {@link #selectInteger(javafx.beans.value.ObservableValue, java.lang.String[]),
+     * If root has JavaFX properties, this call is equivalent to {@link #selectInteger(javafx.beans.value.ObservableValue, java.lang.String[])},
      * with the {@code root} and {@code step[0]} being substituted with the relevant property object.
      *
      * @param root
@@ -636,7 +639,7 @@
      * <p>
      * All classes and properties used in a select-binding have to be public.
      *
-     * If root has JavaFX properties, this call is equivalent to {@link #selectLong(javafx.beans.value.ObservableValue, java.lang.String[]),
+     * If root has JavaFX properties, this call is equivalent to {@link #selectLong(javafx.beans.value.ObservableValue, java.lang.String[])},
      * with the {@code root} and {@code step[0]} being substituted with the relevant property object.
      *
      * @param root
@@ -659,7 +662,7 @@
      * <p>
      * All classes and properties used in a select-binding have to be public.
      *
-     * If root has JavaFX properties, this call is equivalent to {@link #selectBoolean(javafx.beans.value.ObservableValue, java.lang.String[]),
+     * If root has JavaFX properties, this call is equivalent to {@link #selectBoolean(javafx.beans.value.ObservableValue, java.lang.String[])},
      * with the {@code root} and {@code step[0]} being substituted with the relevant property object.
      *
      * @param root
@@ -682,7 +685,7 @@
      * <p>
      * All classes and properties used in a select-binding have to be public.
      *
-     * If root has JavaFX properties, this call is equivalent to {@link #selectString(javafx.beans.value.ObservableValue, java.lang.String[]),
+     * If root has JavaFX properties, this call is equivalent to {@link #selectString(javafx.beans.value.ObservableValue, java.lang.String[])},
      * with the {@code root} and {@code step[0]} being substituted with the relevant property object.
      *
      * @param root
@@ -845,6 +848,7 @@
      * bindings are calculated eagerly, i.e. a bound property is updated
      * immediately.
      *
+     * @param <T> the type of the wrapped {@code Object}
      * @param stringProperty
      *            the {@code String} {@code Property}
      * @param otherProperty
@@ -6003,7 +6007,7 @@
      * @param <E> the type of the {@code List} elements
      * @return the new {@code ObjectBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
-     * @throws IllegalArgumentException if (@code index < 0}
+     * @throws IllegalArgumentException if (@code index &lt; 0)
      * @since JavaFX 2.1
      */
     public static <E> ObjectBinding<E> valueAt(final ObservableList<E> op, final int index) {
@@ -6110,7 +6114,7 @@
      * @param index the position in the {@code List}
      * @return the new {@code BooleanBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
-     * @throws IllegalArgumentException if (@code index < 0}
+     * @throws IllegalArgumentException if (@code index &lt; 0)
      * @since JavaFX 2.1
      */
     public static BooleanBinding booleanValueAt(final ObservableList<Boolean> op, final int index) {
@@ -6225,7 +6229,7 @@
      * @param index the position in the {@code List}
      * @return the new {@code DoubleBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
-     * @throws IllegalArgumentException if (@code index < 0}
+     * @throws IllegalArgumentException if (@code index &lt; 0)
      * @since JavaFX 2.1
      */
     public static DoubleBinding doubleValueAt(final ObservableList<? extends Number> op, final int index) {
@@ -6340,7 +6344,7 @@
      * @param index the position in the {@code List}
      * @return the new {@code FloatBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
-     * @throws IllegalArgumentException if (@code index < 0}
+     * @throws IllegalArgumentException if (@code index &lt; 0)
      * @since JavaFX 2.1
      */
     public static FloatBinding floatValueAt(final ObservableList<? extends Number> op, final int index) {
@@ -6455,7 +6459,7 @@
      * @param index the position in the {@code List}
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
-     * @throws IllegalArgumentException if (@code index < 0}
+     * @throws IllegalArgumentException if (@code index &lt; 0)
      * @since JavaFX 2.1
      */
     public static IntegerBinding integerValueAt(final ObservableList<? extends Number> op, final int index) {
@@ -6570,7 +6574,7 @@
      * @param index the position in the {@code List}
      * @return the new {@code LongBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
-     * @throws IllegalArgumentException if (@code index < 0}
+     * @throws IllegalArgumentException if (@code index &lt; 0)
      * @since JavaFX 2.1
      */
     public static LongBinding longValueAt(final ObservableList<? extends Number> op, final int index) {
@@ -6685,7 +6689,7 @@
      * @param index the position in the {@code List}
      * @return the new {@code StringBinding}
      * @throws NullPointerException if the {@code ObservableList} is {@code null}
-     * @throws IllegalArgumentException if (@code index < 0}
+     * @throws IllegalArgumentException if (@code index &lt; 0)
      * @since JavaFX 2.1
      */
     public static StringBinding stringValueAt(final ObservableList<String> op, final int index) {
@@ -6950,7 +6954,7 @@
      * @param index the position in the {@code ObservableArray}
      * @return the new {@code FloatBinding}
      * @throws NullPointerException if the {@code ObservableArray} is {@code null}
-     * @throws IllegalArgumentException if (@code index < 0}
+     * @throws IllegalArgumentException if (@code index &lt; 0)
      * @since JavaFX 8.0
      */
     public static FloatBinding floatValueAt(final ObservableFloatArray op, final int index) {
@@ -7055,7 +7059,7 @@
      * @param index the position in the {@code ObservableArray}
      * @return the new {@code IntegerBinding}
      * @throws NullPointerException if the {@code ObservableArray} is {@code null}
-     * @throws IllegalArgumentException if (@code index < 0}
+     * @throws IllegalArgumentException if (@code index &lt; 0)
      * @since JavaFX 8.0
      */
     public static IntegerBinding integerValueAt(final ObservableIntegerArray op, final int index) {
--- a/modules/javafx.base/src/main/java/javafx/beans/binding/DoubleBinding.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/binding/DoubleBinding.java	Fri Aug 19 16:16:57 2016 -0700
@@ -89,7 +89,7 @@
  *     }
  *
  *     &#x40;Override
- *     public ObservableList<?> getDependencies() {
+ *     public ObservableList&lt;?&gt; getDependencies() {
  *         return FXCollections.singletonObservableList(moo);
  *     }
  *
--- a/modules/javafx.base/src/main/java/javafx/beans/binding/DoubleExpression.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/binding/DoubleExpression.java	Fri Aug 19 16:16:57 2016 -0700
@@ -133,6 +133,7 @@
      *
      * Note: null values will be interpreted as 0.0
      *
+     * @param <T> The type of Number to be wrapped
      * @param value
      *            The source {@code ObservableValue}
      * @return A {@code DoubleExpression} that wraps the
--- a/modules/javafx.base/src/main/java/javafx/beans/binding/FloatExpression.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/binding/FloatExpression.java	Fri Aug 19 16:16:57 2016 -0700
@@ -132,6 +132,7 @@
      *
      *  Note: null values will be interpreted as 0f
      *
+     * @param <T> The type of Number to be wrapped
      * @param value
      *            The source {@code ObservableValue}
      * @return A {@code FloatExpression} that wraps the
--- a/modules/javafx.base/src/main/java/javafx/beans/binding/IntegerExpression.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/binding/IntegerExpression.java	Fri Aug 19 16:16:57 2016 -0700
@@ -132,6 +132,7 @@
      *
      * Note: null values will be interpreted as 0
      *
+     * @param <T> The type of Number to be wrapped
      * @param value
      *            The source {@code ObservableValue}
      * @return A {@code IntegerExpression} that wraps the
--- a/modules/javafx.base/src/main/java/javafx/beans/binding/ListExpression.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/binding/ListExpression.java	Fri Aug 19 16:16:57 2016 -0700
@@ -70,6 +70,7 @@
      * {@link javafx.beans.binding.ListBinding} is created that is bound to
      * the {@code ObservableListValue}.
      *
+     * @param <E> the type of the wrapped {@code List}
      * @param value
      *            The source {@code ObservableListValue}
      * @return A {@code ListExpression} that wraps the
@@ -106,6 +107,7 @@
 
     /**
      * The size of the list
+     * @return the size
      */
     public int getSize() {
         return size();
@@ -119,6 +121,8 @@
 
     /**
      * A boolean property that is {@code true}, if the list is empty.
+     * @return the {@code ReadOnlyBooleanProperty}
+     *
      */
     public abstract ReadOnlyBooleanProperty emptyProperty();
 
--- a/modules/javafx.base/src/main/java/javafx/beans/binding/LongExpression.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/binding/LongExpression.java	Fri Aug 19 16:16:57 2016 -0700
@@ -129,6 +129,7 @@
      *
      * Note: null values will be interpreted as 0L
      *
+     * @param <T> The type of Number to be wrapped
      * @param value
      *            The source {@code ObservableValue}
      * @return A {@code LongExpression} that wraps the
--- a/modules/javafx.base/src/main/java/javafx/beans/binding/MapExpression.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/binding/MapExpression.java	Fri Aug 19 16:16:57 2016 -0700
@@ -99,6 +99,8 @@
      * {@link javafx.beans.binding.MapBinding} is created that is bound to
      * the {@code ObservableMapValue}.
      *
+     * @param <K> the type of the key elements
+     * @param <V> the type of the value elements
      * @param value
      *            The source {@code ObservableMapValue}
      * @return A {@code MapExpression} that wraps the
@@ -135,6 +137,7 @@
 
     /**
      * The size of the map
+     * @return the size
      */
     public int getSize() {
         return size();
@@ -148,6 +151,7 @@
 
     /**
      * A boolean property that is {@code true}, if the map is empty.
+     * @return the {@code ReadOnlyBooleanProperty}
      */
     public abstract ReadOnlyBooleanProperty emptyProperty();
 
--- a/modules/javafx.base/src/main/java/javafx/beans/binding/NumberExpression.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/binding/NumberExpression.java	Fri Aug 19 16:16:57 2016 -0700
@@ -863,6 +863,7 @@
      * formatting rules. See {@code java.util.Locale} for details on
      * {@code Locale}.
      *
+     * @param locale the Locale to be used
      * @param format
      *            the formatting {@code String}
      * @return the new {@code StringBinding}
--- a/modules/javafx.base/src/main/java/javafx/beans/binding/NumberExpressionBase.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/binding/NumberExpressionBase.java	Fri Aug 19 16:16:57 2016 -0700
@@ -57,6 +57,7 @@
      * {@link javafx.beans.binding.NumberBinding} is created that is bound to
      * the {@code ObservableNumberValue}.
      *
+     * @param <S> The type of Number to be wrapped
      * @param value
      *            The source {@code ObservableNumberValue}
      * @return An {@code NumberExpressionBase} that wraps the
--- a/modules/javafx.base/src/main/java/javafx/beans/binding/ObjectExpression.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/binding/ObjectExpression.java	Fri Aug 19 16:16:57 2016 -0700
@@ -57,6 +57,7 @@
      * {@link javafx.beans.binding.ObjectBinding} is created that is bound to
      * the {@code ObservableObjectValue}.
      *
+     * @param <T> the type of the wrapped {@code Object}
      * @param value
      *            The source {@code ObservableObjectValue}
      * @return A {@code ObjectExpression} that wraps the
@@ -206,6 +207,7 @@
      * formatting rules. See {@code java.util.Locale} for details on
      * {@code Locale}.
      *
+     * @param locale the Locale to be used
      * @param format
      *            the formatting {@code String}
      * @return the new {@code StringBinding}
--- a/modules/javafx.base/src/main/java/javafx/beans/binding/SetExpression.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/binding/SetExpression.java	Fri Aug 19 16:16:57 2016 -0700
@@ -123,6 +123,7 @@
      * {@link javafx.beans.binding.SetBinding} is created that is bound to
      * the {@code ObservableSetValue}.
      *
+     * @param <E> the type of the {@code Set} elements
      * @param value
      *            The source {@code ObservableSetValue}
      * @return A {@code SetExpression} that wraps the
@@ -159,6 +160,7 @@
 
     /**
      * The size of the set
+     * @return the size
      */
     public int getSize() {
         return size();
@@ -172,6 +174,7 @@
 
     /**
      * A boolean property that is {@code true}, if the set is empty.
+     * @return the {@code ReadOnlyBooleanProperty}
      */
     public abstract ReadOnlyBooleanProperty emptyProperty();
 
--- a/modules/javafx.base/src/main/java/javafx/beans/binding/When.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/binding/When.java	Fri Aug 19 16:16:57 2016 -0700
@@ -861,6 +861,7 @@
      * Defines the {@link javafx.beans.value.ObservableObjectValue} which value
      * is returned by the ternary expression if the condition is {@code true}.
      *
+     * @param <T> the type of the intermediate result
      * @param thenValue
      *            the value
      * @return the intermediate result which still requires the otherwise-branch
@@ -876,6 +877,7 @@
      * Defines a constant value of the ternary expression, that is returned if
      * the condition is {@code true}.
      *
+     * @param <T> the type of the intermediate result
      * @param thenValue
      *            the value
      * @return the intermediate result which still requires the otherwise-branch
--- a/modules/javafx.base/src/main/java/javafx/beans/property/DoubleProperty.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/property/DoubleProperty.java	Fri Aug 19 16:16:57 2016 -0700
@@ -119,7 +119,7 @@
      * Changing this property will result in a change of the original property.
      *
      * <p>
-     * This is very useful when bidirectionally binding an ObjectProperty<Double> and
+     * This is very useful when bidirectionally binding an ObjectProperty&lt;Double&gt; and
      * a DoubleProperty.
      *
      * <blockquote><pre>
--- a/modules/javafx.base/src/main/java/javafx/beans/property/FloatProperty.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/property/FloatProperty.java	Fri Aug 19 16:16:57 2016 -0700
@@ -113,7 +113,7 @@
      * Changing this property will result in a change of the original property.
      *
      * <p>
-     * This is very useful when bidirectionally binding an ObjectProperty<Float> and
+     * This is very useful when bidirectionally binding an ObjectProperty&lt;Float&gt; and
      * a FloatProperty.
      *
      * <blockquote><pre>
--- a/modules/javafx.base/src/main/java/javafx/beans/property/IntegerProperty.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/property/IntegerProperty.java	Fri Aug 19 16:16:57 2016 -0700
@@ -113,7 +113,7 @@
      * Changing this property will result in a change of the original property.
      *
      * <p>
-     * This is very useful when bidirectionally binding an ObjectProperty<Integer> and
+     * This is very useful when bidirectionally binding an ObjectProperty&lt;Integer&gt; and
      * a IntegerProperty.
      *
      * <blockquote><pre>
--- a/modules/javafx.base/src/main/java/javafx/beans/property/LongProperty.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/property/LongProperty.java	Fri Aug 19 16:16:57 2016 -0700
@@ -111,7 +111,7 @@
      * Changing this property will result in a change of the original property.
      *
      * <p>
-     * This is very useful when bidirectionally binding an ObjectProperty<Long> and
+     * This is very useful when bidirectionally binding an ObjectProperty&lt;Long&gt; and
      * a LongProperty.
      *
      * <blockquote><pre>
--- a/modules/javafx.base/src/main/java/javafx/beans/property/ObjectProperty.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/property/ObjectProperty.java	Fri Aug 19 16:16:57 2016 -0700
@@ -28,6 +28,9 @@
 import javafx.beans.binding.Bindings;
 import javafx.beans.value.ObservableValue;
 import javafx.beans.value.WritableObjectValue;
+import javafx.collections.ObservableList;
+import javafx.collections.ObservableMap;
+import javafx.collections.ObservableSet;
 
 /**
  * This class provides a full implementation of a {@link Property} wrapping an
--- a/modules/javafx.base/src/main/java/javafx/beans/property/ReadOnlyDoubleProperty.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/property/ReadOnlyDoubleProperty.java	Fri Aug 19 16:16:57 2016 -0700
@@ -78,6 +78,7 @@
      *
      * Note: null values will be interpreted as 0.0
      *
+     * @param <T> The type of Number to be wrapped
      * @param property
      *            The source {@code ReadOnlyProperty}
      * @return A {@code ReadOnlyDoubleProperty} that wraps the
--- a/modules/javafx.base/src/main/java/javafx/beans/property/ReadOnlyFloatProperty.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/property/ReadOnlyFloatProperty.java	Fri Aug 19 16:16:57 2016 -0700
@@ -78,6 +78,7 @@
      *
      * Note: null values will be interpreted as 0f
      *
+     * @param <T> The type of Number to be wrapped
      * @param property
      *            The source {@code ReadOnlyProperty}
      * @return A {@code ReadOnlyFloatProperty} that wraps the
--- a/modules/javafx.base/src/main/java/javafx/beans/property/ReadOnlyIntegerProperty.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/property/ReadOnlyIntegerProperty.java	Fri Aug 19 16:16:57 2016 -0700
@@ -79,6 +79,7 @@
      *
      * Note: null values will be interpreted as 0
      *
+     * @param <T> The type of Number to be wrapped
      * @param property
      *            The source {@code ReadOnlyProperty}
      * @return A {@code ReadOnlyIntegerProperty} that wraps the
--- a/modules/javafx.base/src/main/java/javafx/beans/property/ReadOnlyListWrapper.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/property/ReadOnlyListWrapper.java	Fri Aug 19 16:16:57 2016 -0700
@@ -114,6 +114,7 @@
     protected void fireValueChangedEvent(Change<? extends E> change) {
         super.fireValueChangedEvent(change);
         if (readOnlyProperty != null) {
+            change.reset();
             readOnlyProperty.fireValueChangedEvent(change);
         }
     }
--- a/modules/javafx.base/src/main/java/javafx/beans/property/ReadOnlyLongProperty.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/property/ReadOnlyLongProperty.java	Fri Aug 19 16:16:57 2016 -0700
@@ -77,6 +77,7 @@
      *
      * Note: null values will be interpreted as 0L
      *
+     * @param <T> The type of Number to be wrapped
      * @param property
      *            The source {@code ReadOnlyProperty}
      * @return A {@code ReadOnlyLongProperty} that wraps the
--- a/modules/javafx.base/src/main/java/javafx/beans/property/StringProperty.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/property/StringProperty.java	Fri Aug 19 16:16:57 2016 -0700
@@ -96,6 +96,7 @@
      * Create a bidirectional binding between this {@code StringProperty} and another
      * arbitrary property. Relies on an implementation of {@link StringConverter} for conversion.
      *
+     * @param <T> the type of the wrapped {@code Object}
      * @param other
      *            the other {@code Property}
      * @param converter
--- a/modules/javafx.base/src/main/java/javafx/beans/property/adapter/ReadOnlyJavaBeanObjectPropertyBuilder.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/property/adapter/ReadOnlyJavaBeanObjectPropertyBuilder.java	Fri Aug 19 16:16:57 2016 -0700
@@ -65,6 +65,7 @@
     /**
      * Create a new instance of {@code ReadOnlyJavaBeanObjectPropertyBuilder}
      *
+     * @param <T> the type of the wrapped {@code Object}
      * @return the new {@code ReadOnlyJavaBeanObjectPropertyBuilder}
      */
     public static <T> ReadOnlyJavaBeanObjectPropertyBuilder<T> create() {
--- a/modules/javafx.base/src/main/java/javafx/beans/value/ObservableNumberValue.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/beans/value/ObservableNumberValue.java	Fri Aug 19 16:16:57 2016 -0700
@@ -29,9 +29,6 @@
  * A common interface of all sub-interfaces of {@link ObservableValue} that wrap
  * a number.
  *
- * @param T
- *            The type of the wrapped value (a {@code Number}).
- *
  * @see ObservableValue
  * @see ObservableDoubleValue
  * @see ObservableFloatValue
--- a/modules/javafx.base/src/main/java/javafx/collections/ArrayChangeListener.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/collections/ArrayChangeListener.java	Fri Aug 19 16:16:57 2016 -0700
@@ -33,6 +33,7 @@
     /**
      * Called after a change has been made to an ObservableArray.
      *
+     * @param observableArray the array that changed
      * @param sizeChanged indicates size of array changed
      * @param from A beginning (inclusive) of an interval related to the change
      * @param to An end (exclusive) of an interval related to the change.
--- a/modules/javafx.base/src/main/java/javafx/collections/FXCollections.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/collections/FXCollections.java	Fri Aug 19 16:16:57 2016 -0700
@@ -89,6 +89,7 @@
      * <em>not</em> reported to observers of any ObservableList that
      * wraps it.
      *
+     * @param <E> The type of List to be wrapped
      * @param list a concrete List that backs this ObservableList
      * @return a newly created ObservableList
      */
@@ -112,6 +113,7 @@
      * Observable objects returned by extractor (applied to each list element) are listened for changes
      * and transformed into "update" change of ListChangeListener.
      *
+     * @param <E> The type of List to be wrapped
      * @param list a concrete List that backs this ObservableList
      * @param extractor element to Observable[] convertor
      * @since JavaFX 2.1
@@ -131,6 +133,8 @@
      * to observers that have registered on that instance.<br>
      * Note that mutation operations made directly to the underlying map are <em>not</em>
      * reported to observers of any ObservableMap that wraps it.
+     * @param <K> the type of the wrapped key
+     * @param <V> the type of the wrapped value
      * @param map a Map that backs this ObservableMap
      * @return a newly created ObservableMap
      */
@@ -147,6 +151,7 @@
      * to observers that have registered on that instance.<br>
      * Note that mutation operations made directly to the underlying set are <em>not</em>
      * reported to observers of any ObservableSet that wraps it.
+     * @param <E> The type of List to be wrapped
      * @param set a Set that backs this ObservableSet
      * @return a newly created ObservableSet
      * @since JavaFX 2.1
@@ -161,6 +166,7 @@
     /**
      * Constructs an ObservableSet backed by a HashSet
      * that contains all the specified elements.
+     * @param <E> The type of List to be wrapped
      * @param elements elements that will be added into returned ObservableSet
      * @return a newly created ObservableSet
      * @since JavaFX 2.1
@@ -179,6 +185,8 @@
      * mutation operations made to the underlying ObservableMap will be reported
      * to observers that have registered on the unmodifiable instance. This allows
      * clients to track changes in a Map but disallows the ability to modify it.
+     * @param <K> the type of the wrapped key
+     * @param <V> the type of the wrapped value
      * @param map an ObservableMap that is to be monitored by this interface
      * @return a newly created UnmodifiableObservableMap
      */
@@ -191,11 +199,13 @@
 
     /**
      * Creates and returns a typesafe wrapper on top of provided observable map.
+     * @param <K> the type of the wrapped key
+     * @param <V> the type of the wrapped value
      * @param map an Observable map to be wrapped
      * @param keyType the type of key that {@code map} is permitted to hold
      * @param valueType the type of value that {@code map} is permitted to hold
      * @return a dynamically typesafe view of the specified map
-     * @see Collections#checkedMap(java.util.Map, java.lang.Class)
+     * @see Collections#checkedMap(java.util.Map, java.lang.Class, java.lang.Class)
      * @since JavaFX 8.0
      */
     public static <K, V> ObservableMap<K, V> checkedObservableMap(ObservableMap<K, V> map, Class<K> keyType, Class<V> valueType) {
@@ -207,6 +217,8 @@
 
     /**
      * Creates and returns a synchronized wrapper on top of provided observable map.
+     * @param <K> the type of the wrapped key
+     * @param <V> the type of the wrapped value
      * @param  map the map to be "wrapped" in a synchronized map.
      * @return A synchronized version of the observable map
      * @see Collections#synchronizedMap(java.util.Map)
@@ -223,6 +235,8 @@
 
     /**
      * Creates and empty unmodifiable observable map.
+     * @param <K> the type of the wrapped key
+     * @param <V> the type of the wrapped value
      * @return An empty unmodifiable observable map
      * @see Collections#emptyMap()
      * @since JavaFX 8.0
@@ -295,6 +309,7 @@
     /**
      * Creates a new empty observable list that is backed by an arraylist.
      * @see #observableList(java.util.List)
+     * @param <E> The type of List to be wrapped
      * @return a newly created ObservableList
      */
     @SuppressWarnings("unchecked")
@@ -306,6 +321,7 @@
      * Creates a new empty observable list backed by an arraylist.
      *
      * This list reports element updates.
+     * @param <E> The type of List to be wrapped
      * @param extractor element to Observable[] convertor. Observable objects are listened for changes on the element.
      * @see #observableList(java.util.List, javafx.util.Callback)
      * @since JavaFX 2.1
@@ -317,8 +333,9 @@
 
     /**
      * Creates a new observable array list with {@code items} added to it.
+     * @param <E> The type of List to be wrapped
+     * @param items the items that will be in the new observable ArrayList
      * @return a newly created observableArrayList
-     * @param items the items that will be in the new observable ArrayList
      * @see #observableArrayList()
      */
     public static <E> ObservableList<E> observableArrayList(E... items) {
@@ -330,6 +347,7 @@
     /**
      * Creates a new observable array list and adds a content of collection {@code col}
      * to it.
+     * @param <E> The type of List to be wrapped
      * @param col a collection which content should be added to the observableArrayList
      * @return a newly created observableArrayList
      */
@@ -341,8 +359,8 @@
 
     /**
      * Creates a new empty observable map that is backed by a HashMap.
-     * @param <K> the type of keys
-     * @param <V> the type of values
+     * @param <K> the type of the wrapped key
+     * @param <V> the type of the wrapped value
      * @return a newly created observable HashMap
      */
     public static <K,V> ObservableMap<K,V> observableHashMap() {
@@ -352,6 +370,7 @@
     /**
      * Concatenates more observable lists into one. The resulting list
      * would be backed by an arraylist.
+     * @param <E> The type of List to be wrapped
      * @param lists lists to concatenate
      * @return new observable array list concatenated from the arguments
      */
@@ -373,6 +392,7 @@
     /**
      * Creates and returns unmodifiable wrapper list on top of provided observable list.
      * @param list  an ObservableList that is to be wrapped
+     * @param <E> The type of List to be wrapped
      * @return an ObserableList wrapper that is unmodifiable
      * @see Collections#unmodifiableList(java.util.List)
      */
@@ -385,6 +405,7 @@
 
     /**
      * Creates and returns a typesafe wrapper on top of provided observable list.
+     * @param <E> The type of List to be wrapped
      * @param list  an Observable list to be wrapped
      * @param type   the type of element that <tt>list</tt> is permitted to hold
      * @return a dynamically typesafe view of the specified list
@@ -399,6 +420,7 @@
 
     /**
      * Creates and returns a synchronized wrapper on top of provided observable list.
+     * @param <E> The type of List to be wrapped
      * @param  list the list to be "wrapped" in a synchronized list.
      * @return A synchronized version of the observable list
      * @see Collections#synchronizedList(java.util.List)
@@ -415,6 +437,7 @@
 
     /**
      * Creates and empty unmodifiable observable list.
+     * @param <E> The type of List to be wrapped
      * @return An empty unmodifiable observable list
      * @see Collections#emptyList()
      */
@@ -425,6 +448,7 @@
 
     /**
      * Creates an unmodifiable observable list with single element.
+     * @param <E> The type of List to be wrapped
      * @param e the only elements that will be contained in this singleton observable list
      * @return a singleton observable list
      * @see Collections#singletonList(java.lang.Object)
@@ -435,6 +459,7 @@
 
     /**
      * Creates and returns unmodifiable wrapper on top of provided observable set.
+     * @param <E> The type of List to be wrapped
      * @param set an ObservableSet that is to be wrapped
      * @return an ObserableSet wrapper that is unmodifiable
      * @see Collections#unmodifiableSet(java.util.Set)
@@ -449,6 +474,7 @@
 
     /**
      * Creates and returns a typesafe wrapper on top of provided observable set.
+     * @param <E> The type of List to be wrapped
      * @param set an Observable set to be wrapped
      * @param type  the type of element that <tt>set</tt> is permitted to hold
      * @return a dynamically typesafe view of the specified set
@@ -464,6 +490,7 @@
 
     /**
      * Creates and returns a synchronized wrapper on top of provided observable set.
+     * @param <E> The type of List to be wrapped
      * @param  set the set to be "wrapped" in a synchronized set.
      * @return A synchronized version of the observable set
      * @see Collections#synchronizedSet(java.util.Set)
@@ -480,6 +507,7 @@
 
     /**
      * Creates and empty unmodifiable observable set.
+     * @param <E> The type of List to be wrapped
      * @return An empty unmodifiable observable set
      * @see Collections#emptySet()
      * @since JavaFX 8.0
@@ -491,6 +519,7 @@
 
     /**
      * Copies elements from src to dest. Fires only <b>one</b> change notification on dest.
+     * @param <T> The type of List to be wrapped
      * @param dest the destination observable list
      * @param src the source list
      * @see Collections#copy(java.util.List, java.util.List)
@@ -508,6 +537,7 @@
 
     /**
      * Fills the provided list with obj. Fires only <b>one</b> change notification on the list.
+     * @param <T> The type of List to be wrapped
      * @param list the list to fill
      * @param obj the object to fill the list with
      * @see Collections#fill(java.util.List, java.lang.Object)
@@ -522,6 +552,7 @@
     /**
      * Replace all oldVal elements in the list with newVal element.
      * Fires only <b>one</b> change notification on the list.
+     * @param <T> The type of List to be wrapped
      * @param list the list which will have it's elements replaced
      * @param oldVal the element that is going to be replace
      * @param newVal the replacement
@@ -637,6 +668,8 @@
     /**
      * Sorts the provided observable list.
      * Fires only <b>one</b> change notification on the list.
+     * @param <T> The type of List to be wrapped
+     * @param list the list to be sorted
      * @see Collections#sort(java.util.List)
      */
     @SuppressWarnings("unchecked")
@@ -653,6 +686,7 @@
     /**
      * Sorts the provided observable list using the c comparator.
      * Fires only <b>one</b> change notification on the list.
+     * @param <T> The type of List to be wrapped
      * @param list the list to sort
      * @param c comparator used for sorting. Null if natural ordering is required.
      * @see Collections#sort(java.util.List, java.util.Comparator)
--- a/modules/javafx.base/src/main/java/javafx/collections/ListChangeListener.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/collections/ListChangeListener.java	Fri Aug 19 16:16:57 2016 -0700
@@ -72,7 +72,7 @@
      * pattern for doing this looks something like the following:<br>
      *
      * <blockquote><pre>
-     * ObservableList<Item> theList = ...;
+     * ObservableList&lt;Item&gt; theList = ...;
      *
      * theList.addListener(new ListChangeListener&lt;Item&gt;() {
      *     public void onChanged(Change&lt;tem&gt; c) {
@@ -203,10 +203,10 @@
          * Set operation will act like remove and add operation at the same time.
          * <p>
          * Usually, it's not necessary to use this method directly.
-         * Handling remove operation and then add operation, as in the example {@link ListChangeListener$Change above},
-         * will effectively handle also set operation.
+         * Handling remove operation and then add operation, as in the example
+         * {@link Change} above, will effectively handle also set operation.
          *
-         * @return same <code> as wasAdded() && wasRemoved() </code>
+         * @return same as {@code wasAdded() && wasRemoved()}
          * @throws IllegalStateException if this Change is in initial state
          */
         public boolean wasReplaced() {
--- a/modules/javafx.base/src/main/java/javafx/collections/ModifiableObservableListBase.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/collections/ModifiableObservableListBase.java	Fri Aug 19 16:16:57 2016 -0700
@@ -204,9 +204,12 @@
      * @param index the position where to add the element
      * @param element the element that will be added
 
-     * @throws ClassCastException
-     * @throws NullPointerException
-     * @throws IllegalArgumentException
+     * @throws ClassCastException if the type of the specified element is
+     * incompatible with this list
+     * @throws NullPointerException if the specified arguments contain one or
+     * more null elements
+     * @throws IllegalArgumentException if some property of this element
+     * prevents it from being added to this list
      * @throws IndexOutOfBoundsException if the index is out of range
      *         (<tt>index &lt; 0 || index &gt; size()</tt>)
      */
@@ -222,9 +225,12 @@
      * @param element the element that will be set at the specified position
      * @return the old element at the specified position
      *
-     * @throws ClassCastException
-     * @throws NullPointerException
-     * @throws IllegalArgumentException
+     * @throws ClassCastException if the type of the specified element is
+     * incompatible with this list
+     * @throws NullPointerException if the specified arguments contain one or
+     * more null elements
+     * @throws IllegalArgumentException if some property of this element
+     * prevents it from being added to this list
      * @throws IndexOutOfBoundsException if the index is out of range
      *         (<tt>index &lt; 0 || index &gt;= size()</tt>)
      */
--- a/modules/javafx.base/src/main/java/javafx/collections/ObservableArray.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/collections/ObservableArray.java	Fri Aug 19 16:16:57 2016 -0700
@@ -73,7 +73,7 @@
      * Grows the capacity of this array if the current capacity is less than
      * given {@code capacity}, does nothing if it already exceeds
      * the {@code capacity}.
-     * @param capacity
+     * @param capacity the capacity of this array
      */
     public void ensureCapacity(int capacity);
 
--- a/modules/javafx.base/src/main/java/javafx/collections/ObservableArrayBase.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/collections/ObservableArrayBase.java	Fri Aug 19 16:16:57 2016 -0700
@@ -60,7 +60,9 @@
 
     /**
      * Notifies all listeners of a change
-     * @param change
+     * @param sizeChanged indicates size of array changed
+     * @param from A beginning (inclusive) of an interval related to the change
+     * @param to An end (exclusive) of an interval related to the change.
      */
     protected final void fireChange(boolean sizeChanged, int from, int to) {
         ArrayListenerHelper.fireValueChangedEvent(listenerHelper, sizeChanged, from, to);
--- a/modules/javafx.base/src/main/java/javafx/collections/ObservableIntegerArray.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/collections/ObservableIntegerArray.java	Fri Aug 19 16:16:57 2016 -0700
@@ -161,7 +161,7 @@
 
     /**
      * Sets a single value in the array. Avoid using this method if many values
-     * are updated, use {@linkplain #setAll(int, int[], int, int)} update method
+     * are updated, use {@linkplain #set(int, int[], int, int)} update method
      * instead with as minimum number of invocations as possible.
      * @param index index of the value to set
      * @param value new value for the given index
--- a/modules/javafx.base/src/main/java/javafx/collections/ObservableListBase.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/collections/ObservableListBase.java	Fri Aug 19 16:16:57 2016 -0700
@@ -227,7 +227,7 @@
 
     /**
      * Notifies all listeners of a change
-     * @param change
+     * @param change an object representing the change that was done
      */
     protected final void fireChange(ListChangeListener.Change<? extends E> change) {
         ListListenerHelper.fireValueChangedEvent(listenerHelper, change);
@@ -235,6 +235,7 @@
 
     /**
      * Returns true if there are some listeners registered for this list.
+     * @return true if there is a listener for this list
      */
     protected final boolean hasListeners() {
         return ListListenerHelper.hasListeners(listenerHelper);
--- a/modules/javafx.base/src/main/java/javafx/collections/transformation/TransformationList.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/collections/transformation/TransformationList.java	Fri Aug 19 16:16:57 2016 -0700
@@ -36,7 +36,7 @@
  * elements, order, size or generally it's structure.
  *
  * If the source list is observable, a listener is automatically added to it
- * and the events are delegated to {@link #onSourceChanged(javafx.collections.ListChangeListener.Change)}
+ * and the events are delegated to {@link #sourceChanged(javafx.collections.ListChangeListener.Change)}
  *
  * @param <E> the type parameter of this list
  * @param <F> the upper bound of the type of the source list
--- a/modules/javafx.base/src/main/java/javafx/util/Builder.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/util/Builder.java	Fri Aug 19 16:16:57 2016 -0700
@@ -35,6 +35,8 @@
 public interface Builder<T> {
     /**
      * Builds and returns the object.
+     *
+     * @return the object
      */
     public T build();
 }
--- a/modules/javafx.base/src/main/java/javafx/util/BuilderFactory.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/util/BuilderFactory.java	Fri Aug 19 16:16:57 2016 -0700
@@ -36,7 +36,7 @@
     /**
      * Returns a builder suitable for constructing instances of the given type.
      *
-     * @param type
+     * @param type the given type or null
      *
      * @return
      * A builder for the given type, or <tt>null</tt> if this factory does not
--- a/modules/javafx.base/src/main/java/javafx/util/Duration.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/util/Duration.java	Fri Aug 19 16:16:57 2016 -0700
@@ -355,7 +355,7 @@
      * INDEFINITE is treated as if it were positive infinity.
      *
      * @param other cannot be null
-     * @return true if millis < other.millis using double arithmetic
+     * @return true if millis &lt; other.millis using double arithmetic
      */
     public boolean lessThan(Duration other) {
         return millis < other.millis;
@@ -366,7 +366,7 @@
      * INDEFINITE is treated as if it were positive infinity.
      *
      * @param other cannot be null
-     * @return true if millis <= other.millis using double arithmetic
+     * @return true if millis &lt;= other.millis using double arithmetic
      */
     public boolean lessThanOrEqualTo(Duration other) {
         return millis <= other.millis;
@@ -377,7 +377,7 @@
      * INDEFINITE is treated as if it were positive infinity.
      *
      * @param other cannot be null
-     * @return true if millis > other.millis using double arithmetic
+     * @return true if millis &gt; other.millis using double arithmetic
      */
     public boolean greaterThan(Duration other) {
         return millis > other.millis;
@@ -388,7 +388,7 @@
      * INDEFINITE is treated as if it were positive infinity.
      *
      * @param other cannot be null
-     * @return true if millis >= other.millis using double arithmetic
+     * @return true if millis &gt;= other.millis using double arithmetic
      */
     public boolean greaterThanOrEqualTo(Duration other) {
         return millis >= other.millis;
--- a/modules/javafx.base/src/main/java/javafx/util/StringConverter.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/util/StringConverter.java	Fri Aug 19 16:16:57 2016 -0700
@@ -35,6 +35,7 @@
     /**
     * Converts the object provided into its string form.
     * Format of the returned string is defined by the specific converter.
+    * @param object the object of type {@code T} to convert
     * @return a string representation of the object passed in.
     */
     public abstract String toString(T object);
@@ -42,6 +43,7 @@
     /**
     * Converts the string provided into an object defined by the specific converter.
     * Format of the string and type of the resulting object is defined by the specific converter.
+    * @param string the {@code String} to convert
     * @return an object representation of the string passed in.
     */
     public abstract T fromString(String string);
--- a/modules/javafx.base/src/main/java/javafx/util/converter/DateTimeStringConverter.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/util/converter/DateTimeStringConverter.java	Fri Aug 19 16:16:57 2016 -0700
@@ -196,6 +196,9 @@
     /**
      * <p>Return a <code>DateFormat</code> instance to use for formatting
      * and parsing in this {@link StringConverter}.</p>
+     *
+     * @return a {@code DateFormat} instance for formatting and parsing in this
+     * {@link StringConverter}
      */
     protected DateFormat getDateFormat() {
         DateFormat df = null;
--- a/modules/javafx.base/src/main/java/javafx/util/converter/FormatStringConverter.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/util/converter/FormatStringConverter.java	Fri Aug 19 16:16:57 2016 -0700
@@ -92,6 +92,8 @@
     /**
      * <p>Return a <code>Format</code> instance to use for formatting
      * and parsing in this {@link StringConverter}.</p>
+     *
+     * @return a {@code Format} instance for formatting and parsing in this {@link StringConverter}
      */
     protected Format getFormat() {
         return format;
--- a/modules/javafx.base/src/main/java/javafx/util/converter/LocalDateStringConverter.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/util/converter/LocalDateStringConverter.java	Fri Aug 19 16:16:57 2016 -0700
@@ -88,7 +88,7 @@
      * <blockquote><pre>
      * String pattern = "yyyy-MM-dd";
      * DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
-     * StringConverter<LocalDate> converter =
+     * StringConverter&lt;LocalDate&gt; converter =
      *     DateTimeStringConverter.getLocalDateStringConverter(formatter, null);
      * </pre></blockquote>
      *
--- a/modules/javafx.base/src/main/java/javafx/util/converter/LocalDateTimeStringConverter.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/util/converter/LocalDateTimeStringConverter.java	Fri Aug 19 16:16:57 2016 -0700
@@ -106,7 +106,7 @@
      * <blockquote><pre>
      * String pattern = "yyyy-MM-dd HH:mm";
      * DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
-     * StringConverter<LocalDateTime> converter =
+     * StringConverter&lt;LocalDateTime&gt; converter =
      *     DateTimeStringConverter.getLocalDateTimeConverter(formatter, null);
      * </pre></blockquote>
      *
--- a/modules/javafx.base/src/main/java/javafx/util/converter/LocalTimeStringConverter.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/util/converter/LocalTimeStringConverter.java	Fri Aug 19 16:16:57 2016 -0700
@@ -94,7 +94,7 @@
      * <blockquote><pre>
      * String pattern = "HH:mm:ss";
      * DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
-     * StringConverter<LocalTime> converter =
+     * StringConverter&lt;LocalTime&gt; converter =
      *     DateTimeStringConverter.getLocalTimeConverter(formatter, null);
      * </pre></blockquote>
      *
--- a/modules/javafx.base/src/main/java/javafx/util/converter/NumberStringConverter.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/main/java/javafx/util/converter/NumberStringConverter.java	Fri Aug 19 16:16:57 2016 -0700
@@ -114,6 +114,9 @@
     /**
      * <p>Return a <code>NumberFormat</code> instance to use for formatting
      * and parsing in this {@link StringConverter}.</p>
+     *
+     * @return a {@code NumberFormat} instance for formatting and parsing in this
+     * {@link StringConverter}
      */
     protected NumberFormat getNumberFormat() {
         Locale _locale = locale == null ? Locale.getDefault() : locale;
--- a/modules/javafx.base/src/test/java/test/javafx/beans/property/ReadOnlyListWrapperTest.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.base/src/test/java/test/javafx/beans/property/ReadOnlyListWrapperTest.java	Fri Aug 19 16:16:57 2016 -0700
@@ -26,12 +26,14 @@
 package test.javafx.beans.property;
 
 
+import java.util.Collections;
 import javafx.beans.property.ListProperty;
 import javafx.beans.property.ReadOnlyListProperty;
 import javafx.beans.property.ReadOnlyListWrapper;
 import javafx.beans.property.SimpleListProperty;
 import test.javafx.beans.InvalidationListenerMock;
 import test.javafx.beans.value.ChangeListenerMock;
+import test.javafx.collections.MockListObserver;
 import javafx.beans.value.ObservableObjectValueStub;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
@@ -739,6 +741,21 @@
         assertEquals("ReadOnlyListProperty [name: My name, value: " + DEFAULT + "]", v4.getReadOnlyProperty().toString());
     }
 
+    @Test
+    public void testBothListChangeListeners() {
+        property.set(FXCollections.observableArrayList());
+
+        MockListObserver<Object> mloInternal = new MockListObserver<>();
+        MockListObserver<Object> mloPublic = new MockListObserver<>();
+        property.addListener(mloInternal);
+        readOnlyProperty.addListener(mloPublic);
+
+        property.add(new Object());
+
+        mloInternal.check1AddRemove(property, Collections.emptyList(), 0, 1);
+        mloPublic.check1AddRemove(readOnlyProperty, Collections.emptyList(), 0, 1);
+    }
+
     private static class ReadOnlyListWrapperMock extends ReadOnlyListWrapper<Object> {
 
         private int counter;
--- a/modules/javafx.graphics/src/main/java/com/sun/javafx/stage/EmbeddedWindow.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.graphics/src/main/java/com/sun/javafx/stage/EmbeddedWindow.java	Fri Aug 19 16:16:57 2016 -0700
@@ -53,6 +53,10 @@
         EmbeddedWindowHelper.initHelper(this);
     }
 
+    public HostInterface getHost() {
+        return host;
+    }
+
     /**
      * Specify the scene to be used on this stage.
      */
--- a/modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/GlassViewEventHandler.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/GlassViewEventHandler.java	Fri Aug 19 16:16:57 2016 -0700
@@ -376,11 +376,27 @@
                     boolean middleButtonDown = (modifiers & KeyEvent.MODIFIER_BUTTON_MIDDLE) != 0;
                     boolean secondaryButtonDown = (modifiers & KeyEvent.MODIFIER_BUTTON_SECONDARY) != 0;
                     final Window w = view.getWindow();
-                    double pScaleX = (w == null) ? 1.0 : w.getPlatformScaleX();
-                    double pScaleY = (w == null) ? 1.0 : w.getPlatformScaleY();
+                    double pScaleX, pScaleY, spx, spy, sx, sy;
+                    if (w != null) {
+                        pScaleX = w.getPlatformScaleX();
+                        pScaleY = w.getPlatformScaleY();
+                        Screen scr = w.getScreen();
+                        if (scr != null) {
+                            spx = scr.getPlatformX();
+                            spy = scr.getPlatformY();
+                            sx = scr.getX();
+                            sy = scr.getY();
+                        } else {
+                            spx = spy = sx = sy = 0.0;
+                        }
+                    } else {
+                        pScaleX = pScaleY = 1.0;
+                        spx = spy = sx = sy = 0.0;
+                    }
 
                     scene.sceneListener.mouseEvent(mouseEventType(type),
-                            x / pScaleX, y / pScaleY, xAbs / pScaleX, yAbs / pScaleY,
+                            x / pScaleX, y / pScaleY,
+                            sx + (xAbs - spx) / pScaleX, sy + (yAbs - spy) / pScaleY,
                             mouseEventButton(button), isPopupTrigger, isSynthesized,
                             shiftDown, controlDown, altDown, metaDown,
                             primaryButtonDown, middleButtonDown, secondaryButtonDown);
@@ -489,14 +505,31 @@
                 return AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
                     if (scene.sceneListener != null) {
                         final Window w = view.getWindow();
-                        double pScaleX = (w == null) ? 1.0 : w.getPlatformScaleX();
-                        double pScaleY = (w == null) ? 1.0 : w.getPlatformScaleY();
+                        double pScaleX, pScaleY, spx, spy, sx, sy;
+                        if (w != null) {
+                            pScaleX = w.getPlatformScaleX();
+                            pScaleY = w.getPlatformScaleY();
+                            Screen scr = w.getScreen();
+                            if (scr != null) {
+                                spx = scr.getPlatformX();
+                                spy = scr.getPlatformY();
+                                sx = scr.getX();
+                                sy = scr.getY();
+                            } else {
+                                spx = spy = sx = sy = 0.0;
+                            }
+                        } else {
+                            pScaleX = pScaleY = 1.0;
+                            spx = spy = sx = sy = 0.0;
+                        }
                         scene.sceneListener.scrollEvent(ScrollEvent.SCROLL,
                             deltaX / pScaleX, deltaY / pScaleY, 0, 0,
                             xMultiplier, yMultiplier,
                             0, // touchCount
                             chars, lines, defaultChars, defaultLines,
-                            x / pScaleX, y / pScaleY, xAbs / pScaleX, yAbs / pScaleY,
+                            x / pScaleX, y / pScaleY,
+                            sx + (xAbs - spx) / pScaleX,
+                            sy + (yAbs - spy) / pScaleY,
                             (modifiers & KeyEvent.MODIFIER_SHIFT) != 0,
                             (modifiers & KeyEvent.MODIFIER_CONTROL) != 0,
                             (modifiers & KeyEvent.MODIFIER_ALT) != 0,
@@ -917,8 +950,23 @@
                                 throw new RuntimeException("Unknown scroll event type: " + type);
                         }
                         final Window w = view.getWindow();
-                        double pScaleX = (w == null) ? 1.0 : w.getPlatformScaleX();
-                        double pScaleY = (w == null) ? 1.0 : w.getPlatformScaleY();
+                        double pScaleX, pScaleY, spx, spy, sx, sy;
+                        if (w != null) {
+                            pScaleX = w.getPlatformScaleX();
+                            pScaleY = w.getPlatformScaleY();
+                            Screen scr = w.getScreen();
+                            if (scr != null) {
+                                spx = scr.getPlatformX();
+                                spy = scr.getPlatformY();
+                                sx = scr.getX();
+                                sy = scr.getY();
+                            } else {
+                                spx = spy = sx = sy = 0.0;
+                            }
+                        } else {
+                            pScaleX = pScaleY = 1.0;
+                            spx = spy = sx = sy = 0.0;
+                        }
                         scene.sceneListener.scrollEvent(eventType,
                                 dx / pScaleX, dy / pScaleY, totaldx / pScaleX, totaldy / pScaleY,
                                 multiplierX, multiplierY,
@@ -926,8 +974,8 @@
                                 0, 0, 0, 0,
                                 x == View.GESTURE_NO_VALUE ? Double.NaN : x / pScaleX,
                                 y == View.GESTURE_NO_VALUE ? Double.NaN : y / pScaleY,
-                                xAbs == View.GESTURE_NO_VALUE ? Double.NaN : xAbs / pScaleX,
-                                yAbs == View.GESTURE_NO_VALUE ? Double.NaN : yAbs / pScaleY,
+                                xAbs == View.GESTURE_NO_VALUE ? Double.NaN : sx + (xAbs - spx) / pScaleX,
+                                yAbs == View.GESTURE_NO_VALUE ? Double.NaN : sy + (yAbs - spy) / pScaleY,
                                 (modifiers & KeyEvent.MODIFIER_SHIFT) != 0,
                                 (modifiers & KeyEvent.MODIFIER_CONTROL) != 0,
                                 (modifiers & KeyEvent.MODIFIER_ALT) != 0,
@@ -981,14 +1029,29 @@
                                 throw new RuntimeException("Unknown scroll event type: " + type);
                         }
                         final Window w = view.getWindow();
-                        double pScaleX = (w == null) ? 1.0 : w.getPlatformScaleX();
-                        double pScaleY = (w == null) ? 1.0 : w.getPlatformScaleY();
+                        double pScaleX, pScaleY, spx, spy, sx, sy;
+                        if (w != null) {
+                            pScaleX = w.getPlatformScaleX();
+                            pScaleY = w.getPlatformScaleY();
+                            Screen scr = w.getScreen();
+                            if (scr != null) {
+                                spx = scr.getPlatformX();
+                                spy = scr.getPlatformY();
+                                sx = scr.getX();
+                                sy = scr.getY();
+                            } else {
+                                spx = spy = sx = sy = 0.0;
+                            }
+                        } else {
+                            pScaleX = pScaleY = 1.0;
+                            spx = spy = sx = sy = 0.0;
+                        }
                         // REMIND: Scale the [total]scale params too?
                         scene.sceneListener.zoomEvent(eventType, scale, totalscale,
                                 originx == View.GESTURE_NO_VALUE ? Double.NaN : originx / pScaleX,
                                 originy == View.GESTURE_NO_VALUE ? Double.NaN : originy / pScaleY,
-                                originxAbs == View.GESTURE_NO_VALUE ? Double.NaN : originxAbs / pScaleX,
-                                originyAbs == View.GESTURE_NO_VALUE ? Double.NaN : originyAbs / pScaleY,
+                                originxAbs == View.GESTURE_NO_VALUE ? Double.NaN : sx + (originxAbs - spx) / pScaleX,
+                                originyAbs == View.GESTURE_NO_VALUE ? Double.NaN : sy + (originyAbs - spy) / pScaleY,
                                 (modifiers & KeyEvent.MODIFIER_SHIFT) != 0,
                                 (modifiers & KeyEvent.MODIFIER_CONTROL) != 0,
                                 (modifiers & KeyEvent.MODIFIER_ALT) != 0,
@@ -1041,13 +1104,28 @@
                                 throw new RuntimeException("Unknown scroll event type: " + type);
                         }
                         final Window w = view.getWindow();
-                        double pScaleX = (w == null) ? 1.0 : w.getPlatformScaleX();
-                        double pScaleY = (w == null) ? 1.0 : w.getPlatformScaleY();
+                        double pScaleX, pScaleY, spx, spy, sx, sy;
+                        if (w != null) {
+                            pScaleX = w.getPlatformScaleX();
+                            pScaleY = w.getPlatformScaleY();
+                            Screen scr = w.getScreen();
+                            if (scr != null) {
+                                spx = scr.getPlatformX();
+                                spy = scr.getPlatformY();
+                                sx = scr.getX();
+                                sy = scr.getY();
+                            } else {
+                                spx = spy = sx = sy = 0.0;
+                            }
+                        } else {
+                            pScaleX = pScaleY = 1.0;
+                            spx = spy = sx = sy = 0.0;
+                        }
                         scene.sceneListener.rotateEvent(eventType, dangle, totalangle,
                                 originx == View.GESTURE_NO_VALUE ? Double.NaN : originx / pScaleX,
                                 originy == View.GESTURE_NO_VALUE ? Double.NaN : originy / pScaleY,
-                                originxAbs == View.GESTURE_NO_VALUE ? Double.NaN : originxAbs / pScaleX,
-                                originyAbs == View.GESTURE_NO_VALUE ? Double.NaN : originyAbs / pScaleY,
+                                originxAbs == View.GESTURE_NO_VALUE ? Double.NaN : sx + (originxAbs - spx) / pScaleX,
+                                originyAbs == View.GESTURE_NO_VALUE ? Double.NaN : sy + (originyAbs - spy) / pScaleY,
                                 (modifiers & KeyEvent.MODIFIER_SHIFT) != 0,
                                 (modifiers & KeyEvent.MODIFIER_CONTROL) != 0,
                                 (modifiers & KeyEvent.MODIFIER_ALT) != 0,
@@ -1102,13 +1180,28 @@
                                 throw new RuntimeException("Unknown swipe event direction: " + dir);
                         }
                         final Window w = view.getWindow();
-                        double pScaleX = (w == null) ? 1.0 : w.getPlatformScaleX();
-                        double pScaleY = (w == null) ? 1.0 : w.getPlatformScaleY();
+                        double pScaleX, pScaleY, spx, spy, sx, sy;
+                        if (w != null) {
+                            pScaleX = w.getPlatformScaleX();
+                            pScaleY = w.getPlatformScaleY();
+                            Screen scr = w.getScreen();
+                            if (scr != null) {
+                                spx = scr.getPlatformX();
+                                spy = scr.getPlatformY();
+                                sx = scr.getX();
+                                sy = scr.getY();
+                            } else {
+                                spx = spy = sx = sy = 0.0;
+                            }
+                        } else {
+                            pScaleX = pScaleY = 1.0;
+                            spx = spy = sx = sy = 0.0;
+                        }
                         scene.sceneListener.swipeEvent(eventType, touchCount,
                                 x == View.GESTURE_NO_VALUE ? Double.NaN : x / pScaleX,
                                 y == View.GESTURE_NO_VALUE ? Double.NaN : y / pScaleY,
-                                xAbs == View.GESTURE_NO_VALUE ? Double.NaN : xAbs / pScaleX,
-                                yAbs == View.GESTURE_NO_VALUE ? Double.NaN : yAbs / pScaleY,
+                                xAbs == View.GESTURE_NO_VALUE ? Double.NaN : sx + (xAbs - spx) / pScaleX,
+                                yAbs == View.GESTURE_NO_VALUE ? Double.NaN : sy + (yAbs - spy) / pScaleY,
                                 (modifiers & KeyEvent.MODIFIER_SHIFT) != 0,
                                 (modifiers & KeyEvent.MODIFIER_CONTROL) != 0,
                                 (modifiers & KeyEvent.MODIFIER_ALT) != 0,
@@ -1198,10 +1291,27 @@
                                 throw new RuntimeException("Unknown touch state: " + type);
                         }
                         final Window w = view.getWindow();
-                        double pScaleX = (w == null) ? 1.0 : w.getPlatformScaleX();
-                        double pScaleY = (w == null) ? 1.0 : w.getPlatformScaleY();
+                        double pScaleX, pScaleY, spx, spy, sx, sy;
+                        if (w != null) {
+                            pScaleX = w.getPlatformScaleX();
+                            pScaleY = w.getPlatformScaleY();
+                            Screen scr = w.getScreen();
+                            if (scr != null) {
+                                spx = scr.getPlatformX();
+                                spy = scr.getPlatformY();
+                                sx = scr.getX();
+                                sy = scr.getY();
+                            } else {
+                                spx = spy = sx = sy = 0.0;
+                            }
+                        } else {
+                            pScaleX = pScaleY = 1.0;
+                            spx = spy = sx = sy = 0.0;
+                        }
                         scene.sceneListener.touchEventNext(state, touchId,
-                                x / pScaleX, y / pScaleY, xAbs / pScaleX, yAbs / pScaleY);
+                                x / pScaleX, y / pScaleY,
+                                sx + (xAbs - spx) / pScaleX,
+                                sy + (yAbs - spy) / pScaleY);
                     }
                     return null;
                 }, scene.getAccessControlContext());
--- a/modules/javafx.graphics/src/main/java/javafx/stage/Window.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.graphics/src/main/java/javafx/stage/Window.java	Fri Aug 19 16:16:57 2016 -0700
@@ -519,11 +519,13 @@
 
     private boolean xExplicit = false;
     /**
-     * The horizontal location of this {@code Stage} on the screen. Changing
-     * this attribute will move the {@code Stage} horizontally. Changing this
-     * attribute will not visually affect a {@code Stage} while
-     * {@code fullScreen} is true, but will be honored by the {@code Stage} once
-     * {@code fullScreen} becomes false.
+     * The horizontal location of this {@code Window} on the screen. Changing
+     * this attribute will move the {@code Window} horizontally. If this
+     * {@code Window} is an instance of {@code Stage}, changing this attribute
+     * will not visually affect the {@code Window} while
+     * {@link Stage#fullScreenProperty fullScreen} is true, but will be honored
+     * by the {@code Window} once {@link Stage#fullScreenProperty fullScreen}
+     * becomes false.
      */
     private ReadOnlyDoubleWrapper x =
             new ReadOnlyDoubleWrapper(this, "x", Double.NaN);
@@ -542,11 +544,13 @@
 
     private boolean yExplicit = false;
     /**
-     * The vertical location of this {@code Stage} on the screen. Changing this
-     * attribute will move the {@code Stage} vertically. Changing this
-     * attribute will not visually affect a {@code Stage} while
-     * {@code fullScreen} is true, but will be honored by the {@code Stage} once
-     * {@code fullScreen} becomes false.
+     * The vertical location of this {@code Window} on the screen. Changing this
+     * attribute will move the {@code Window} vertically. If this
+     * {@code Window} is an instance of {@code Stage}, changing this attribute
+     * will not visually affect the {@code Window} while
+     * {@link Stage#fullScreenProperty fullScreen} is true, but will be honored
+     * by the {@code Window} once {@link Stage#fullScreenProperty fullScreen}
+     * becomes false.
      */
     private ReadOnlyDoubleWrapper y =
             new ReadOnlyDoubleWrapper(this, "y", Double.NaN);
@@ -578,14 +582,18 @@
     private boolean widthExplicit = false;
 
     /**
-     * The width of this {@code Stage}. Changing this attribute will narrow or
-     * widen the width of the {@code Stage}. Changing this
-     * attribute will not visually affect a {@code Stage} while
-     * {@code fullScreen} is true, but will be honored by the {@code Stage} once
-     * {@code fullScreen} becomes false. This value includes any and all
+     * The width of this {@code Window}. Changing this attribute will narrow or
+     * widen the width of the {@code Window}. This value includes any and all
      * decorations which may be added by the Operating System such as resizable
-     * frame handles. Typical applications will set the {@link javafx.scene.Scene} width
-     * instead.
+     * frame handles. Typical applications will set the {@link javafx.scene.Scene}
+     * width instead. This {@code Window} will take its width from the scene if
+     * it has never been set by the application. Resizing the window by end user
+     * does not count as a setting the width by the application. If this
+     * {@code Window} is an instance of {@code Stage}, changing this attribute
+     * will not visually affect the {@code Window} while
+     * {@link Stage#fullScreenProperty fullScreen} is true, but will be honored
+     * by the {@code Window} once {@link Stage#fullScreenProperty fullScreen}
+     * becomes false.
      * <p>
      * The property is read only because it can be changed externally
      * by the underlying platform and therefore must not be bindable.
@@ -604,13 +612,18 @@
 
     private boolean heightExplicit = false;
     /**
-     * The height of this {@code Stage}. Changing this attribute will shrink
-     * or heighten the height of the {@code Stage}. Changing this
-     * attribute will not visually affect a {@code Stage} while
-     * {@code fullScreen} is true, but will be honored by the {@code Stage} once
-     * {@code fullScreen} becomes false. This value includes any and all
+     * The height of this {@code Window}. Changing this attribute will shrink
+     * or heighten the height of the {@code Window}. This value includes any and all
      * decorations which may be added by the Operating System such as the title
-     * bar. Typical applications will set the {@link javafx.scene.Scene} height instead.
+     * bar. Typical applications will set the {@link javafx.scene.Scene} height
+     * instead. This window will take its height from the scene if it has never
+     * been set by the application. Resizing this window by end user does not
+     * count as a setting the height by the application.  If this
+     * {@code Window} is an instance of {@code Stage}, changing this attribute
+     * will not visually affect the {@code Window} while
+     * {@link Stage#fullScreenProperty fullScreen} is true, but will be honored
+     * by the {@code Window} once {@link Stage#fullScreenProperty fullScreen}
+     * becomes false.
      * <p>
      * The property is read only because it can be changed externally
      * by the underlying platform and therefore must not be bindable.
@@ -742,12 +755,17 @@
     }
 
     /**
-     * The {@code Scene} to be rendered on this {@code Stage}. There can only
-     * be one {@code Scene} on the {@code Stage} at a time, and a {@code Scene}
-     * can only be on one {@code Stage} at a time. Setting a {@code Scene} on
-     * a different {@code Stage} will cause the old {@code Stage} to lose the
+     * The {@code Scene} to be rendered on this {@code Window}. There can only
+     * be one {@code Scene} on the {@code Window} at a time, and a {@code Scene}
+     * can only be on one {@code Window} at a time. Setting a {@code Scene} on
+     * a different {@code Window} will cause the old {@code Window} to lose the
      * reference before the new one gains it. You may swap {@code Scene}s on
-     * a {@code Stage} at any time, even while in full-screen exclusive mode.
+     * a {@code Window} at any time, even if it is an instance of {@code Stage}
+     * and with {@link Stage#fullScreenProperty fullScreen} set to true.
+     * If the width or height of this {@code Window} have never been set by the
+     * application, setting the scene will cause this {@code Window} to take its
+     * width or height from that scene.  Resizing this window by end user does
+     * not count as setting the width or height by the application.
      *
      * An {@link IllegalStateException} is thrown if this property is set
      * on a thread other than the JavaFX Application Thread.
@@ -827,12 +845,12 @@
     }
 
     /**
-     * Defines the opacity of the {@code Stage} as a value between 0.0 and 1.0.
-     * The opacity is reflected across the {@code Stage}, its {@code Decoration}
+     * Defines the opacity of the {@code Window} as a value between 0.0 and 1.0.
+     * The opacity is reflected across the {@code Window}, its {@code Decoration}
      * and its {@code Scene} content. On a JavaFX runtime platform that does not
      * support opacity, assigning a value to this variable will have no
-     * visible difference. A {@code Stage} with 0% opacity is fully translucent.
-     * Typically, a {@code Stage} with 0% opacity will not receive any mouse
+     * visible difference. A {@code Window} with 0% opacity is fully translucent.
+     * Typically, a {@code Window} with 0% opacity will not receive any mouse
      * events.
      *
      * @defaultValue 1.0
@@ -1026,10 +1044,10 @@
     }
 
     /**
-     * Whether or not this {@code Stage} is showing (that is, open on the
-     * user's system). The Stage might be "showing", yet the user might not
-     * be able to see it due to the Stage being rendered behind another window
-     * or due to the Stage being positioned off the monitor.
+     * Whether or not this {@code Window} is showing (that is, open on the
+     * user's system). The Window might be "showing", yet the user might not
+     * be able to see it due to the Window being rendered behind another Window
+     * or due to the Window being positioned off the monitor.
      *
      * @defaultValue false
      */
--- a/modules/javafx.graphics/src/main/native-glass/win/GlassWindow.cpp	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.graphics/src/main/native-glass/win/GlassWindow.cpp	Fri Aug 19 16:16:57 2016 -0700
@@ -647,6 +647,8 @@
 }
 
 void GlassWindow::HandleDPIEvent(WPARAM wParam, LPARAM lParam) {
+    HWND hWnd = GetHWND();
+
     if (GlassApplication::IsUIScaleOverridden()) {
         return;
     }
@@ -667,8 +669,8 @@
     // client dimensions padded for the unchanging frame border.
     LPRECT lprcNewBounds = (LPRECT) lParam;
     RECT oldBounds, oldClient, padding, newClient, newBounds;
-    ::GetWindowRect(GetHWND(), &oldBounds);
-    ::GetClientRect(GetHWND(), &oldClient);
+    ::GetWindowRect(hWnd, &oldBounds);
+    ::GetClientRect(hWnd, &oldClient);
     float rescaleX = ((float) (lprcNewBounds->right - lprcNewBounds->left)) /
                               (oldBounds.right - oldBounds.left);
     float rescaleY = ((float) (lprcNewBounds->bottom - lprcNewBounds->top)) /
@@ -719,12 +721,18 @@
             newBounds.left,   newBounds.top,  newBounds.right,   newBounds.bottom,
             newBounds.right - newBounds.left, newBounds.bottom - newBounds.top);
 #endif
-    ::SetWindowPos(GetHWND(), HWND_TOP,
+    ::SetWindowPos(hWnd, HWND_TOP,
                    newBounds.left,
                    newBounds.top,
                    newBounds.right  - newBounds.left,
                    newBounds.bottom - newBounds.top,
                    SWP_NOZORDER | SWP_NOACTIVATE);
+
+    // Relative scales will have changed, which affect the xy offset of the view within the window
+    GlassWindow *pWindow = GlassWindow::FromHandle(hWnd);
+    if (::IsWindowVisible(hWnd)) {
+        pWindow->NotifyViewMoved(hWnd);
+    }
 }
 
 void GlassWindow::HandleWindowPosChangedEvent()
--- a/modules/javafx.graphics/src/main/native-glass/win/ViewContainer.cpp	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.graphics/src/main/native-glass/win/ViewContainer.cpp	Fri Aug 19 16:16:57 2016 -0700
@@ -194,6 +194,18 @@
     m_deadKeyWParam = 0;
 }
 
+void ViewContainer::NotifyViewMoved(HWND hwnd)
+{
+    if (!hwnd || !GetGlassView()) {
+        return;
+    }
+
+    JNIEnv* env = GetEnv();
+    env->CallVoidMethod(GetView(), javaIDs.View.notifyView,
+                        com_sun_glass_events_ViewEvent_MOVE);
+    CheckAndClearException(env);
+}
+
 void ViewContainer::NotifyViewSize(HWND hwnd)
 {
     if (!hwnd || !GetGlassView()) {
--- a/modules/javafx.graphics/src/main/native-glass/win/ViewContainer.h	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.graphics/src/main/native-glass/win/ViewContainer.h	Fri Aug 19 16:16:57 2016 -0700
@@ -106,6 +106,7 @@
 
         unsigned int HandleViewTouchEvent(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
 
+        void NotifyViewMoved(HWND hwnd);
         void NotifyViewSize(HWND hwnd);
 
         void NotifyGesturePerformed(HWND hWnd,
--- a/modules/javafx.swt/src/main/java/javafx/embed/swt/FXCanvas.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.swt/src/main/java/javafx/embed/swt/FXCanvas.java	Fri Aug 19 16:16:57 2016 -0700
@@ -53,6 +53,7 @@
 import javafx.beans.NamedArg;
 import javafx.scene.Scene;
 import javafx.scene.input.TransferMode;
+import javafx.stage.Window;
 import javafx.util.FXPermission;
 
 import org.eclipse.swt.SWT;
@@ -100,7 +101,7 @@
  * {@code FXCanvas} is a component to embed JavaFX content into
  * SWT applications. The content to be displayed is specified
  * with the {@link #setScene} method that accepts an instance of
- * JavaFX {@code Scene}. After the scene is assigned, it gets
+ * JavaFX {@code Scene}. After the scene is attached, it gets
  * repainted automatically. All the input and focus events are
  * forwarded to the scene transparently to the developer.
  * <p>
@@ -258,6 +259,32 @@
         display.addFilter(SWT.Move, moveFilter);
     }
 
+    /**
+     * Retrieves the {@code FXCanvas} embedding the given {@code Scene},
+     * that is the {@code FXCanvas} to which the given {@code Scene} was
+     * attached using {@link #setScene}.
+     *
+     * @param scene the {@code Scene} whose embedding {@code FXCanvas}
+     *              instance is to be retrieved
+     * @return the {@code FXCanvas} to which the given {@code Scene} is
+     * attached, or null if the given {@code Scene} is not attached to an
+     * {@code FXCanvas}.
+     *
+     * @since 9
+     */
+    public static FXCanvas getFXCanvas(Scene scene) {
+        Window window = scene.getWindow();
+        if (window != null && window instanceof EmbeddedWindow) {
+            HostInterface hostInterface = ((EmbeddedWindow) window).getHost();
+            if (hostInterface instanceof HostContainer) {
+                // Obtain FXCanvas as the enclosing instance of the FXCanvas$HostContainer
+                // that is host of the embedded Scene's EmbeddedWindow.
+                return ((HostContainer)hostInterface).fxCanvas;
+            }
+        }
+        return null;
+    }
+
     private static void initFx() {
         // NOTE: no internal "com.sun.*" packages can be accessed until after
         // the JavaFX platform is initialized. The list of needed internal
@@ -732,6 +759,8 @@
 
     private class HostContainer implements HostInterface {
 
+        final FXCanvas fxCanvas = FXCanvas.this;
+
         @Override
         public void setEmbeddedStage(EmbeddedStageInterface embeddedStage) {
             stagePeer = embeddedStage;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/javafx.swt/src/test/java/test/javafx/embed/swt/FXCanvasTest.java	Fri Aug 19 16:16:57 2016 -0700
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package test.javafx.embed.swt;
+
+import javafx.embed.swt.FXCanvas;
+import javafx.scene.Group;
+import javafx.scene.Scene;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.junit.Assert.assertSame;
+
+public class FXCanvasTest {
+
+    @Rule
+    public SwtRule ctx = new SwtRule();
+
+    @Test(timeout = 10000)
+    public void getFXCanvas() throws Throwable {
+        final Shell shell = new Shell(Display.getCurrent());
+        final FXCanvas canvas = new FXCanvas(shell, SWT.NONE);
+        shell.open();
+
+        // create and hook scene
+        Scene scene = new Scene(new Group());
+        canvas.setScene(scene);
+
+        // check FXCanvas is properly retrieved
+        assertSame(canvas, FXCanvas.getFXCanvas(canvas.getScene()));
+
+        // FIXME: We cannot close the shell here because of https://bugs.eclipse.org/bugs/show_bug.cgi?id=435066.
+        // shell.close();
+    }
+}
--- a/modules/javafx.swt/src/test/java/test/javafx/embed/swt/SWTCursorsTest.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.swt/src/test/java/test/javafx/embed/swt/SWTCursorsTest.java	Fri Aug 19 16:16:57 2016 -0700
@@ -33,83 +33,35 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.Rule;
 import org.junit.Test;
 
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicReference;
-
 import static org.junit.Assert.assertNotNull;
 
 public class SWTCursorsTest {
 
-    @Test(timeout=10000)
+    @Rule
+    public SwtRule ctx = new SwtRule();
+
+    @Test(timeout = 10000)
     public void testImageCursor() throws Throwable {
-        // create display on first thread (required when using SWT on Mac OS X)
-        final Display display = new Display();
-        final Shell shell = new Shell(display);
+        final Shell shell = new Shell(Display.getCurrent());
         final FXCanvas canvas = new FXCanvas(shell, SWT.NONE);
         shell.open();
 
-        // keep track of exceptions thrown in UI thread
-        final AtomicReference<Throwable> throwableRef = new AtomicReference<>();
+        // create and hook scene
+        Scene scene = new Scene(new Group());
+        canvas.setScene(scene);
 
-        final CountDownLatch latch = new CountDownLatch(2);
-        display.asyncExec(() -> {
-            try {
-                // create and hook scene
-                Scene scene = new Scene(new Group());
-                canvas.setScene(scene);
+        // set image cursor to scene
+        Image cursorImage = new Image("test/javafx/embed/swt/cursor.png");
+        scene.setCursor(new ImageCursor(cursorImage));
 
-                // set image cursor to scene
-                Image cursorImage = new Image("test/javafx/embed/swt/cursor.png");
-                scene.setCursor(new ImageCursor(cursorImage));
+        Display.getCurrent().asyncExec(() -> {
+            assertNotNull(canvas.getCursor());
 
-            } catch (Throwable throwable) {
-                throwableRef.set(throwable);
-            } finally {
-                latch.countDown();
-            }
+            // FIXME: We cannot close the shell here because of https://bugs.eclipse.org/bugs/show_bug.cgi?id=435066.
+            //shell.close();
         });
-
-        while (latch.getCount() > 1) {
-            // run SWT event loop
-            if (!display.readAndDispatch()) {
-                display.sleep();
-            }
-        }
-
-        rethrow(throwableRef);
-
-        // ensure at least one pulse has passed before asserting the cursor is set,
-        // as the scene property synchronization is triggered by the pulse listener
-        display.asyncExec(() -> {
-            try {
-                assertNotNull(canvas.getCursor());
-            } catch (Throwable throwable) {
-                throwableRef.set(throwable);
-            } finally {
-                latch.countDown();
-            }
-        });
-
-        while (latch.getCount() > 0) {
-            // run SWT event loop (again)
-            if (!display.readAndDispatch()) {
-                display.sleep();
-            }
-        }
-
-        shell.close();
-        shell.dispose();
-        display.dispose();
-
-        rethrow(throwableRef);
-    }
-
-    private void rethrow(AtomicReference<Throwable> throwableRef) throws Throwable {
-        Throwable thrown = throwableRef.get();
-        if (thrown != null) {
-            throw thrown;
-        }
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/javafx.swt/src/test/java/test/javafx/embed/swt/SwtRule.java	Fri Aug 19 16:16:57 2016 -0700
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package test.javafx.embed.swt;
+
+import org.eclipse.swt.widgets.Display;
+import org.junit.rules.MethodRule;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.Statement;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * A {@code MethodRule} to execute test methods synchronously on the SWT UI thread. The execution will wait for any
+ * asynchronous runnables scheduled by the test method on the SWT UI thread during its execution.
+ */
+public class SwtRule implements MethodRule {
+
+    private void rethrow(final AtomicReference<Throwable> throwableRef) throws Throwable {
+        Throwable thrown = throwableRef.get();
+        if (thrown != null) {
+            throw thrown;
+        }
+    }
+
+    @Override
+    public Statement apply(final Statement base, final FrameworkMethod testMethod, final Object target) {
+        return new Statement() {
+
+            public void evaluate() throws Throwable {
+                Display display = Display.getDefault();
+
+                // keep track of exceptions thrown in UI thread
+                final AtomicReference<Throwable> throwableRef = new AtomicReference<>();
+
+                final CountDownLatch latch = new CountDownLatch(1);
+                display.asyncExec(() -> {
+                    try {
+                        // ensure test method is synchronously executed (without spawning a new thread)
+                        testMethod.invokeExplosively(target);
+                    } catch (Throwable throwable) {
+                        throwableRef.set(throwable);
+                    } finally {
+                        display.asyncExec(() -> {
+                            // wait for any runnables scheduled (asynchronously)
+                            // by test method on the UI thread
+                            latch.countDown();
+                        });
+                    }
+                });
+
+                while (latch.getCount() > 0) {
+                    // run SWT event loop
+                    if (!display.readAndDispatch()) {
+                        display.sleep();
+                    }
+                }
+
+                rethrow(throwableRef);
+            }
+        };
+    }
+}
--- a/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/JNIUtility.cpp	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/JNIUtility.cpp	Fri Aug 19 16:16:57 2016 -0700
@@ -133,7 +133,7 @@
     JLObject jlinstance(obj, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JNIUtility::getMethodID", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JNIUtility::getMethodID", (jobject)jlinstance);
         return mid;
     }
 
@@ -324,7 +324,7 @@
     JLObject jlinstance(obj, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JNIUtility::getJNIField", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JNIUtility::getJNIField", (jobject)jlinstance);
         return result;
     }
 
@@ -389,7 +389,7 @@
     JLObject jlinstance(object, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JNIUtility::callJNIMethod", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JNIUtility::callJNIMethod", (jobject)jlinstance);
         return result;
     }
 
--- a/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/JNIUtility.h	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/JNIUtility.h	Fri Aug 19 16:16:57 2016 -0700
@@ -193,7 +193,7 @@
     JLObject jlinstance(obj, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JNIUtility::callJNIMethodV", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JNIUtility::callJNIMethodV", (jobject)jlinstance);
         return 0;
     }
 
@@ -243,7 +243,7 @@
     JLObject jlinstance(obj, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JNIUtility::callJNIMethodV<void>", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JNIUtility::callJNIMethodV<void>", (jobject)jlinstance);
         return;
     }
 
@@ -275,7 +275,7 @@
     JLObject jlinstance(obj, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JNIUtility::callJNIMethod<void>", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JNIUtility::callJNIMethod<void>", (jobject)jlinstance);
         return;
     }
 
--- a/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp	Fri Aug 19 16:16:57 2016 -0700
@@ -225,7 +225,7 @@
                         // Since instance->javaInstance() is WeakGlobalRef, creating a localref to safeguard javaInstance() from GC
                         JLObject jlinstance(instance->javaInstance(), true);
                         if (!jlinstance) {
-                            LOG_ERROR("Could not get javaInstance for %p in JNIUtilityPrivate::convertValueToJValue", jlinstance);
+                            LOG_ERROR("Could not get javaInstance for %p in JNIUtilityPrivate::convertValueToJValue", (jobject)jlinstance);
                             return result;
                         }
                         result.l = instance->javaInstance();
@@ -238,7 +238,7 @@
                     // Since array->javaArray() is WeakGlobalRef, creating a localref to safeguard javaInstance() from GC
                     JLObject jlinstancearray(array->javaArray(), true);
                     if (!jlinstancearray) {
-                        LOG_ERROR("Could not get javaArrayInstance for %p in JNIUtilityPrivate::convertValueToJValue", jlinstancearray);
+                        LOG_ERROR("Could not get javaArrayInstance for %p in JNIUtilityPrivate::convertValueToJValue", (jobject)jlinstancearray);
                         return result;
                     }
                     result.l = array->javaArray();
@@ -437,7 +437,7 @@
     JLObject jlinstance(obj, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JNIUtilityPrivate::dispatchJNICall", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JNIUtilityPrivate::dispatchJNICall", (jobject)jlinstance);
         return NULL;
     }
 
--- a/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/jsc/JavaArrayJSC.cpp	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/jsc/JavaArrayJSC.cpp	Fri Aug 19 16:16:57 2016 -0700
@@ -62,7 +62,7 @@
     JLObject jlarrayinstance(m_array->instance(), true);
 
     if (!jlarrayinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaArray Constructor", jlarrayinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JavaArray Constructor", (jobject)jlarrayinstance);
         m_length = 0;
     } else {
         m_length = env->GetArrayLength(static_cast<jarray>(m_array->instance()));
@@ -88,7 +88,7 @@
     JLObject jlinstance(javaArray(), true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaArray::setValueAt", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JavaArray::setValueAt", (jobject)jlinstance);
         return;
     }
 
@@ -172,7 +172,7 @@
     JLObject jlinstance(javaArray(), true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaArray::valueAt", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JavaArray::valueAt", (jobject)jlinstance);
         return jsUndefined();
     }
 
--- a/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/jsc/JavaClassJSC.cpp	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/jsc/JavaClassJSC.cpp	Fri Aug 19 16:16:57 2016 -0700
@@ -44,7 +44,7 @@
     JLObject jlinstance(anInstance, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaClass Constructor", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JavaClass Constructor", (jobject)jlinstance);
         anInstance = createDummyObject();
         if (anInstance == NULL) {
             LOG_ERROR("Could not createDummyObject for %p in JavaClass Constructor", anInstance);
--- a/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/jsc/JavaFieldJSC.cpp	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/jsc/JavaFieldJSC.cpp	Fri Aug 19 16:16:57 2016 -0700
@@ -78,7 +78,7 @@
     JLObject jlfield(jfield, true);
 
     if (!jlfield) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaField::valueFromInstance", jlfield);
+        LOG_ERROR("Could not get javaInstance for %p in JavaField::valueFromInstance", (jobject)jlfield);
         return jsresult;
     }
 
@@ -87,7 +87,7 @@
     JLObject jlinstance(jinstance, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaField::valueFromInstance", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JavaField::valueFromInstance", (jobject)jlinstance);
         return jsresult;
     }
 
@@ -158,7 +158,7 @@
     JLObject jlfield(jfield, true);
 
     if (!jlfield) {
-        LOG_ERROR("Could not get Instance for %p in JavaField::setValueToInstance", jlfield);
+        LOG_ERROR("Could not get Instance for %p in JavaField::setValueToInstance", (jobject)jlfield);
         return;
     }
 
@@ -167,7 +167,7 @@
     JLObject jlinstance(jinstance, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaField::setValueToInstance", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JavaField::setValueToInstance", (jobject)jlinstance);
         return;
     }
 
--- a/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/javafx.web/src/main/native/Source/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp	Fri Aug 19 16:16:57 2016 -0700
@@ -99,7 +99,7 @@
     JLObject jlinstance(obj, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::stringValue", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::stringValue", (jobject)jlinstance);
         return jsUndefined();
     }
 
@@ -135,7 +135,7 @@
     JLObject jlinstance(obj, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::numberValueForCharacter", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::numberValueForCharacter", (jobject)jlinstance);
         return jsUndefined();
     }
 
@@ -148,7 +148,7 @@
     JLObject jlinstance(obj, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::numberValueForNumber", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::numberValueForNumber", (jobject)jlinstance);
         return jsUndefined();
     }
 
@@ -163,7 +163,7 @@
     JLObject jlinstance(obj, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::numberValue", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::numberValue", (jobject)jlinstance);
         return jsUndefined();
     }
 
@@ -184,7 +184,7 @@
     JLObject jlinstance(m_instance->instance(), true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::booleanValue", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::booleanValue", (jobject)jlinstance);
         return jsUndefined();
     }
 
@@ -281,7 +281,7 @@
     JLObject jlinstance(obj, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::invokeMethod", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::invokeMethod", (jobject)jlinstance);
         return jsUndefined();
     }
 
@@ -322,7 +322,7 @@
         JLObject jlinstance(obj, true);
 
         if (!jlinstance) {
-            LOG_ERROR("Could not get javaInstance for %p in JavaInstance::invokeMethod", jlinstance);
+            LOG_ERROR("Could not get javaInstance for %p in JavaInstance::invokeMethod", (jobject)jlinstance);
             return jsUndefined();
         }
 
@@ -431,7 +431,7 @@
     JLObject jlinstance(obj, true);
 
     if (!jlinstance) {
-        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::defaultValue", jlinstance);
+        LOG_ERROR("Could not get javaInstance for %p in JavaInstance::defaultValue", (jobject)jlinstance);
         return jsUndefined();
     }
 
--- a/modules/jdk.packager/src/main/java/com/oracle/tools/packager/StandardBundlerParam.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/jdk.packager/src/main/java/com/oracle/tools/packager/StandardBundlerParam.java	Fri Aug 19 16:16:57 2016 -0700
@@ -469,7 +469,7 @@
                     I18N.getString("param.menu-shortcut-hint.description"),
                     BundleParams.PARAM_MENU,
                     Boolean.class,
-                    params -> true,
+                    params -> false,
                     // valueOf(null) is false, and we actually do want null in some cases
                     (s, p) -> (s == null || "null".equalsIgnoreCase(s))? true : Boolean.valueOf(s)
             );
--- a/modules/jdk.packager/src/main/java/com/oracle/tools/packager/jnlp/JNLPBundler.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/jdk.packager/src/main/java/com/oracle/tools/packager/jnlp/JNLPBundler.java	Fri Aug 19 16:16:57 2016 -0700
@@ -749,9 +749,13 @@
             Boolean needShortcut = SHORTCUT_HINT.fetchFrom(params);
             Boolean needMenu = MENU_HINT.fetchFrom(params);
             Boolean needInstall = INSTALL_HINT.fetchFrom(params);
-            if (Boolean.TRUE.equals(needShortcut) || Boolean.TRUE.equals(needMenu) || Boolean.TRUE.equals(needInstall)) {
+
+            if ((needShortcut != null && Boolean.TRUE.equals(needShortcut)) ||
+                (needMenu != null && Boolean.TRUE.equals(needMenu)) ||
+                (needInstall != null && Boolean.TRUE.equals(needInstall))) {
+
                 xout.writeStartElement("shortcut");
-                if (needInstall != null) {
+                if (Boolean.TRUE.equals(needInstall)) {
                     xout.writeAttribute("installed", needInstall.toString());
                 }
                 if (Boolean.TRUE.equals(needShortcut)) {
@@ -761,6 +765,7 @@
                     xout.writeEmptyElement("menu");
                     //todo add submenu element
                 }
+
                 xout.writeEndElement();
             }
 
--- a/modules/jdk.packager/src/main/java/com/sun/javafx/tools/ant/Callback.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/jdk.packager/src/main/java/com/sun/javafx/tools/ant/Callback.java	Fri Aug 19 16:16:57 2016 -0700
@@ -49,7 +49,6 @@
 public final class Callback extends DataType {
     private String name;
     private String cmd;
-    private boolean isText;
 
     public Callback() {
     }
--- a/modules/jdk.packager/src/main/java/com/sun/javafx/tools/ant/DeployFXTask.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/jdk.packager/src/main/java/com/sun/javafx/tools/ant/DeployFXTask.java	Fri Aug 19 16:16:57 2016 -0700
@@ -278,7 +278,9 @@
         }
 
         if (callbacks != null) {
-            deployParams.setCallbacks(callbacks.callbacks);
+            for (Callback cb: callbacks.callbacks) {
+                deployParams.addCallback(cb.getName(), cb.getCmd());
+            }
         }
 
         if (prefs != null) {
--- a/modules/jdk.packager/src/main/java/com/sun/javafx/tools/packager/DeployParams.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/jdk.packager/src/main/java/com/sun/javafx/tools/packager/DeployParams.java	Fri Aug 19 16:16:57 2016 -0700
@@ -28,7 +28,6 @@
 import com.oracle.tools.packager.*;
 import com.oracle.tools.packager.RelativeFileSet;
 import com.oracle.tools.packager.jnlp.JNLPBundler;
-import com.sun.javafx.tools.ant.Callback;
 import com.sun.javafx.tools.packager.bundlers.*;
 import com.sun.javafx.tools.packager.bundlers.Bundler.BundleType;
 import java.io.File;
@@ -116,7 +115,7 @@
     // didn't have a setter...
     boolean offlineAllowed = true;
 
-    List<JSCallback> callbacks;
+    List<JSCallback> callbacks = null;
 
     //list of HTML templates to process
     List<Template> templates = new LinkedList<>();
@@ -368,12 +367,12 @@
         callbacks = list;
     }
 
-    public void setCallbacks(List<Callback> list) {
-        List<JSCallback> jslist = new ArrayList<>(list.size());
-        for (Callback cb: list) {
-            jslist.add(new JSCallback(cb.getName(), cb.getCmd()));
+    public void addCallback(String name, String cmd) {
+        if (callbacks == null) {
+            callbacks = new ArrayList<>();
         }
-        callbacks = jslist;
+
+        callbacks.add(new JSCallback(name, cmd));
     }
 
     static class Template {
--- a/modules/jdk.packager/src/main/java/com/sun/javafx/tools/packager/JSCallback.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/jdk.packager/src/main/java/com/sun/javafx/tools/packager/JSCallback.java	Fri Aug 19 16:16:57 2016 -0700
@@ -25,12 +25,10 @@
 
 package com.sun.javafx.tools.packager;
 
-import com.sun.javafx.tools.ant.Callback;
-
 /**
  * Ant-independent version of the Callback class.
  *
- * @see Callback
+ * @see com.sun.javafx.tools.ant.Callback
  *
  */
 class JSCallback {
--- a/modules/jdk.packager/src/main/java/com/sun/javafx/tools/packager/Main.java	Thu Aug 18 08:39:32 2016 +0000
+++ b/modules/jdk.packager/src/main/java/com/sun/javafx/tools/packager/Main.java	Fri Aug 19 16:16:57 2016 -0700
@@ -202,12 +202,12 @@
                         } else if (arg.equalsIgnoreCase("-manifestAttrs")) {
                             createJarParams.setManifestAttrs(createAttrMap(nextArg(args, i++)));
                         } else if (arg.equalsIgnoreCase("-noembedlauncher")) {
-                            System.out.println("-noembedlauncher is deprecated");
+                            System.err.println("-noembedlauncher is deprecated");
                         } else if (arg.equalsIgnoreCase("-nocss2bin")) {
                             createJarParams.setCss2bin(false);
                         } else if (arg.equalsIgnoreCase("-runtimeVersion")) {
                             createJarParams.setFxVersion(nextArg(args, i++));
-                            System.out.println("-runtimeVersion is deprecated");
+                            System.err.println("-runtimeVersion is deprecated");
                         } else if (arg.equalsIgnoreCase("-verbose") || arg.equalsIgnoreCase("-v")) {
                             createJarParams.setVerbose(true);
                             verbose = true;
@@ -309,7 +309,7 @@
                         } else if (arg.equalsIgnoreCase("-embedJNLP")) {
                             deployParams.setEmbedJNLP(true);
                         } else if (arg.equalsIgnoreCase("-embedCertificates")) {
-                            System.out.println("-embedCertificates is deprecated");
+                            System.err.println("-embedCertificates is deprecated");
                         } else if (arg.equalsIgnoreCase("-allpermissions")) {
                             deployParams.setAllPermissions(true);
                         } else if (arg.equalsIgnoreCase("-updatemode")) {
@@ -434,6 +434,7 @@
                     addResources(signJarParams, srcdir, srcfiles);
                     signJar = true;
                 } else if (args[0].equalsIgnoreCase("-makeall")) {
+                    System.err.println("-makeall is deprecated");
                     for (int i = 1; i < args.length; i++) {
                         String arg = args[i];
                         if (arg.equalsIgnoreCase("-appclass")) {