This is an automated email from the git hooks/post-receive script. ebourg-guest pushed a commit to branch master in repository libjna-java.
commit 2bed85a971af3832d923214e47892a1c48b3df3e Author: Emmanuel Bourg <[email protected]> Date: Thu Oct 16 00:23:02 2014 +0200 Added a default implementation of Structure.getFieldOrder() to preserve the compatibility with JNA < 3.5.0 --- debian/changelog | 2 + .../12-structure-backward-compatibility.patch | 76 ++++++++++++++++++++++ debian/patches/series | 1 + 3 files changed, 79 insertions(+) diff --git a/debian/changelog b/debian/changelog index bf1198f..9f67fa7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -14,6 +14,8 @@ libjna-java (4.1.0-1) UNRELEASED; urgency=low * Removed 08-multiarch-support.patch (merged upstream since jna 3.5.0) * Removed 02-builddir.patch (merged upstream since 4.0.0) * Removed 05-support-gnu-kfreebsd.patch (merged upstream since 4.0.0) + * Added a default implementation of Structure.getFieldOrder() to preserve + the compatibility with JNA < 3.5.0 * Moved libjnidispatch.so into its own new arch any libjna-jni package * Install libjnidispatch.so in a multiarch path * Install the Maven artifacts for the platform jar (Closes: #743732) diff --git a/debian/patches/12-structure-backward-compatibility.patch b/debian/patches/12-structure-backward-compatibility.patch new file mode 100644 index 0000000..559e2f5 --- /dev/null +++ b/debian/patches/12-structure-backward-compatibility.patch @@ -0,0 +1,76 @@ +Description: Provide a default implementation of the abstract Structure.getFieldOrder() + method to preserve the compatibility with JNA < 3.5.0. The implementation is derived + from the JNA 3.4.2 code. +Author: Emmanuel Bourg <[email protected]> +Forwarded: not-needed +--- a/src/com/sun/jna/Structure.java ++++ b/src/com/sun/jna/Structure.java +@@ -106,6 +106,34 @@ + */ + public interface ByReference { } + ++ private static class MemberOrder { ++ private static final String[] FIELDS = { "first", "second", "middle", "penultimate", "last" }; ++ public int first; ++ public int second; ++ public int middle; ++ public int penultimate; ++ public int last; ++ } ++ ++ private static final boolean REVERSE_FIELDS; ++ private static final boolean REQUIRES_FIELD_ORDER; ++ ++ static { ++ // Check for predictable field order; IBM and JRockit store fields in ++ // reverse order; Excelsior JET requires explicit order ++ Field[] fields = MemberOrder.class.getFields(); ++ List names = new ArrayList(); ++ for (int i=0; i < fields.length; i++) { ++ names.add(fields[i].getName()); ++ } ++ List expected = Arrays.asList(MemberOrder.FIELDS); ++ List reversed = new ArrayList(expected); ++ Collections.reverse(reversed); ++ ++ REVERSE_FIELDS = names.equals(reversed); ++ REQUIRES_FIELD_ORDER = !(names.equals(expected) || REVERSE_FIELDS); ++ } ++ + /** Use the platform default alignment. */ + public static final int ALIGN_DEFAULT = 0; + /** No alignment, place all fields on nearest 1-byte boundary */ +@@ -831,7 +859,32 @@ + * field order as returned by {@link Class#getFields()} is not + * guaranteed to be predictable. + */ +- protected abstract List getFieldOrder(); ++ protected List getFieldOrder() { ++ if (REQUIRES_FIELD_ORDER) { ++ throw new Error("This VM does not store fields in a predictable order; you must implement Structure.getFieldOrder on " + getClass() + " to explicitly indicate the field order: " + System.getProperty("java.vendor") + ", " + System.getProperty("java.version")); ++ } ++ ++ return getFieldNames(); ++ } ++ ++ private List<String> getFieldNames() { ++ List<String> names = new ArrayList<String>(); ++ for (Class cls = getClass(); !cls.equals(Structure.class); cls = cls.getSuperclass()) { ++ List<String> fields = new ArrayList<String>(); ++ for (Field field : cls.getDeclaredFields()) { ++ int modifiers = field.getModifiers(); ++ if (Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) { ++ continue; ++ } ++ fields.add(field.getName()); ++ } ++ if (REVERSE_FIELDS) { ++ Collections.reverse(fields); ++ } ++ names.addAll(0, fields); ++ } ++ return names; ++ } + + /** + * Force a compile-time error on the old method of field definition diff --git a/debian/patches/series b/debian/patches/series index 3e21bda..705cad6 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -4,3 +4,4 @@ 06-remove-gjdoc-inexistent-options.patch 09-javadoc.patch 10-disable-full-jar.patch +12-structure-backward-compatibility.patch -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/libjna-java.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

