-
Bug
-
Resolution: Fixed
-
P3
-
8
-
b12
-
x86_64
-
linux
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8045683 | 8u25 | Petr Pchelko | P3 | Resolved | Fixed | b01 |
JDK-8044020 | 8u20 | Petr Pchelko | P3 | Resolved | Fixed | b17 |
JDK-8053627 | emb-8u26 | Petr Pchelko | P3 | Resolved | Fixed | b17 |
FULL PRODUCT VERSION :
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux devel 3.11.0-18-generic #32-Ubuntu SMP Tue Feb 18 21:11:14 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Microsoft Windows [Versjon 6.1.7601]
A DESCRIPTION OF THE PROBLEM :
In Java 8 java.awt.datatransfer.DataFlavor.equals fails to honor the equals contract by no longer beeing symmetric as the JavaDoc descibes it:
"It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true."
This occurs when testing two DataFlavors of the MIME-type "text/html" for equality and only one of them has the "document" parameter set.
REGRESSION. Last worked in version 7u51
ADDITIONAL REGRESSION INFORMATION:
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
javac DataFlavorTest.java
java DataFlavorTest
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Equals is symmetric for minimalHtmlFlavor and allHtmlFlavor
Equals is symmetric for minimalHtmlFlavor and fragmentHtmlFlavor
Equals is symmetric for minimalHtmlFlavor and selectionHtmlFlavor
ACTUAL -
Equals not symmetric for minimalHtmlFlavor and allHtmlFlavor
Equals not symmetric for minimalHtmlFlavor and fragmentHtmlFlavor
Equals not symmetric for minimalHtmlFlavor and selectionHtmlFlavor
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.datatransfer.DataFlavor;
public class DataFlavorTest {
public static void main(String[] args) throws ClassNotFoundException {
equalsShouldBySymetric();
}
public static void equalsShouldBySymetric() throws ClassNotFoundException {
DataFlavor minimalHtmlFlavor = new DataFlavor("text/html; class=java.lang.String");
// Static DataFlavors introduced in Java 8
DataFlavor allHtmlFlavor = new DataFlavor("text/html; class=java.lang.String;document=all;charset=Unicode");
DataFlavor fragmentHtmlFlavor = new DataFlavor("text/html; class=java.lang.String;document=fragment;charset=Unicode");
DataFlavor selectionHtmlFlavor = new DataFlavor("text/html; class=java.lang.String;document=selection;charset=Unicode");
if ((minimalHtmlFlavor.equals(allHtmlFlavor) == allHtmlFlavor.equals(minimalHtmlFlavor))) {
System.out.println("Equals is symmetric for minimalHtmlFlavor and allHtmlFlavor");
} else {
System.out.println("Equals not symmetric for minimalHtmlFlavor and allHtmlFlavor");
}
if ((minimalHtmlFlavor.equals(fragmentHtmlFlavor) == fragmentHtmlFlavor.equals(minimalHtmlFlavor))) {
System.out.println("Equals is symmetric for minimalHtmlFlavor and fragmentHtmlFlavor");
} else {
System.out.println("Equals not symmetric for minimalHtmlFlavor and fragmentHtmlFlavor");
}
if ((minimalHtmlFlavor.equals(selectionHtmlFlavor) == selectionHtmlFlavor.equals(minimalHtmlFlavor))) {
System.out.println("Equals is symmetric for minimalHtmlFlavor and selectionHtmlFlavor");
} else {
System.out.println("Equals not symmetric for minimalHtmlFlavor and selectionHtmlFlavor");
}
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
We could invert the equals check in our part of the code and thereby avoiding the comparison of the document parameter
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux devel 3.11.0-18-generic #32-Ubuntu SMP Tue Feb 18 21:11:14 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Microsoft Windows [Versjon 6.1.7601]
A DESCRIPTION OF THE PROBLEM :
In Java 8 java.awt.datatransfer.DataFlavor.equals fails to honor the equals contract by no longer beeing symmetric as the JavaDoc descibes it:
"It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true."
This occurs when testing two DataFlavors of the MIME-type "text/html" for equality and only one of them has the "document" parameter set.
REGRESSION. Last worked in version 7u51
ADDITIONAL REGRESSION INFORMATION:
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
javac DataFlavorTest.java
java DataFlavorTest
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Equals is symmetric for minimalHtmlFlavor and allHtmlFlavor
Equals is symmetric for minimalHtmlFlavor and fragmentHtmlFlavor
Equals is symmetric for minimalHtmlFlavor and selectionHtmlFlavor
ACTUAL -
Equals not symmetric for minimalHtmlFlavor and allHtmlFlavor
Equals not symmetric for minimalHtmlFlavor and fragmentHtmlFlavor
Equals not symmetric for minimalHtmlFlavor and selectionHtmlFlavor
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.datatransfer.DataFlavor;
public class DataFlavorTest {
public static void main(String[] args) throws ClassNotFoundException {
equalsShouldBySymetric();
}
public static void equalsShouldBySymetric() throws ClassNotFoundException {
DataFlavor minimalHtmlFlavor = new DataFlavor("text/html; class=java.lang.String");
// Static DataFlavors introduced in Java 8
DataFlavor allHtmlFlavor = new DataFlavor("text/html; class=java.lang.String;document=all;charset=Unicode");
DataFlavor fragmentHtmlFlavor = new DataFlavor("text/html; class=java.lang.String;document=fragment;charset=Unicode");
DataFlavor selectionHtmlFlavor = new DataFlavor("text/html; class=java.lang.String;document=selection;charset=Unicode");
if ((minimalHtmlFlavor.equals(allHtmlFlavor) == allHtmlFlavor.equals(minimalHtmlFlavor))) {
System.out.println("Equals is symmetric for minimalHtmlFlavor and allHtmlFlavor");
} else {
System.out.println("Equals not symmetric for minimalHtmlFlavor and allHtmlFlavor");
}
if ((minimalHtmlFlavor.equals(fragmentHtmlFlavor) == fragmentHtmlFlavor.equals(minimalHtmlFlavor))) {
System.out.println("Equals is symmetric for minimalHtmlFlavor and fragmentHtmlFlavor");
} else {
System.out.println("Equals not symmetric for minimalHtmlFlavor and fragmentHtmlFlavor");
}
if ((minimalHtmlFlavor.equals(selectionHtmlFlavor) == selectionHtmlFlavor.equals(minimalHtmlFlavor))) {
System.out.println("Equals is symmetric for minimalHtmlFlavor and selectionHtmlFlavor");
} else {
System.out.println("Equals not symmetric for minimalHtmlFlavor and selectionHtmlFlavor");
}
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
We could invert the equals check in our part of the code and thereby avoiding the comparison of the document parameter
- backported by
-
JDK-8044020 In Java 8 java.awt.datatransfer.DataFlavor.equals is no longer symmetric
-
- Resolved
-
-
JDK-8045683 In Java 8 java.awt.datatransfer.DataFlavor.equals is no longer symmetric
-
- Resolved
-
-
JDK-8053627 In Java 8 java.awt.datatransfer.DataFlavor.equals is no longer symmetric
-
- Resolved
-
- duplicates
-
JDK-8043947 Export to clipboard and import to LibreOffice / Excel not working
-
- Closed
-