From 08121fbd515af37e2ef53763bb65f5b11d141614 Mon Sep 17 00:00:00 2001 From: Brian Burkhalter Date: Wed, 25 May 2016 15:48:57 -0700 Subject: [PATCH] 8149815: Misleading TIFFField#getAsNativeNode spec about native node name "TIFFIFD" Change the specification verbiage of TIFFField.getAsNativeNode() to reflect the actual behavior. Reviewed-by: prr --- .../com/sun/imageio/plugins/tiff/TIFFFieldNode.java | 12 ++++++++---- .../javax/imageio/plugins/tiff/TIFFField.java | 7 +++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFFieldNode.java b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFFieldNode.java index 994d10d7810..35042328494 100644 --- a/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFFieldNode.java +++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFFieldNode.java @@ -38,9 +38,14 @@ import javax.imageio.plugins.tiff.TIFFTagSet; * wherein the child node is procedural rather than buffered. */ public class TIFFFieldNode extends IIOMetadataNode { + private static boolean isIFD(TIFFField f) { + int type = f.getType(); + return f.hasDirectory() && + (type == TIFFTag.TIFF_LONG || type == TIFFTag.TIFF_IFD_POINTER); + } + private static String getNodeName(TIFFField f) { - return (f.hasDirectory() || f.getData() instanceof TIFFDirectory) ? - "TIFFIFD" : "TIFFField"; + return isIFD(f) ? "TIFFIFD" : "TIFFField"; } private boolean isIFD; @@ -52,8 +57,7 @@ public class TIFFFieldNode extends IIOMetadataNode { public TIFFFieldNode(TIFFField field) { super(getNodeName(field)); - isIFD = field.hasDirectory() || - field.getData() instanceof TIFFDirectory; + isIFD = isIFD(field); this.field = field; diff --git a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFField.java b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFField.java index a6ba3859d2b..8a1fbf20b5d 100644 --- a/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFField.java +++ b/jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFField.java @@ -843,10 +843,9 @@ public class TIFFField implements Cloneable { * Returns the {@code TIFFField} as a node named either * "TIFFField" or "TIFFIFD" as described in the * TIFF native image metadata specification. The node will be named - * "TIFFIFD" if and only if the field's data object is an - * instance of {@link TIFFDirectory} or equivalently - * {@link TIFFTag#isIFDPointer getTag.isIFDPointer()} returns - * {@code true}. + * "TIFFIFD" if and only if {@link #hasDirectory()} returns + * {@code true} and the field's type is either {@link TIFFTag#TIFF_LONG} + * or {@link TIFFTag#TIFF_IFD_POINTER}. * * @return a {@code Node} named "TIFFField" or * "TIFFIFD".