diff options
author | Timo Westkämper <[email protected]> | 2014-07-30 22:28:05 +0300 |
---|---|---|
committer | Timo Westkämper <[email protected]> | 2014-07-30 22:28:05 +0300 |
commit | b7f165affed6259a40dc7394a19b9e29db501108 (patch) | |
tree | b2150ab907ba3375d8f795e4b12b234ddeb8650c | |
parent | d671469f08c8714f75f0d2a198e8f94f2ff441b3 (diff) |
Improve access comparison
3 files changed, 25 insertions, 6 deletions
diff --git a/api/src/main/java/org/osjava/jardiff/PublicDiffCriteria.java b/api/src/main/java/org/osjava/jardiff/PublicDiffCriteria.java index 102d9f6..9940255 100644 --- a/api/src/main/java/org/osjava/jardiff/PublicDiffCriteria.java +++ b/api/src/main/java/org/osjava/jardiff/PublicDiffCriteria.java @@ -71,7 +71,7 @@ public class PublicDiffCriteria implements DiffCriteria * @return True if the classes differ, false otherwise. */ public boolean differs(ClassInfo oldInfo, ClassInfo newInfo) { - if (oldInfo.getAccess() != newInfo.getAccess()) + if (Tools.isAccessChange(oldInfo.getAccess(), newInfo.getAccess())) return true; // Yes classes can have a null supername, e.g. java.lang.Object ! if(oldInfo.getSupername() == null) { @@ -100,7 +100,7 @@ public class PublicDiffCriteria implements DiffCriteria * @return True if the methods differ, false otherwise. */ public boolean differs(MethodInfo oldInfo, MethodInfo newInfo) { - if (oldInfo.getAccess() != newInfo.getAccess()) + if (Tools.isAccessChange(oldInfo.getAccess(), newInfo.getAccess())) return true; if (oldInfo.getExceptions() == null || newInfo.getExceptions() == null) { @@ -127,7 +127,7 @@ public class PublicDiffCriteria implements DiffCriteria * @return True if the fields differ, false otherwise. */ public boolean differs(FieldInfo oldInfo, FieldInfo newInfo) { - if (oldInfo.getAccess() != newInfo.getAccess()) + if (Tools.isAccessChange(oldInfo.getAccess(), newInfo.getAccess())) return true; if (oldInfo.getValue() == null || newInfo.getValue() == null) { if (oldInfo.getValue() != newInfo.getValue()) diff --git a/api/src/main/java/org/osjava/jardiff/SimpleDiffCriteria.java b/api/src/main/java/org/osjava/jardiff/SimpleDiffCriteria.java index 3d9c7ca..5b82266 100644 --- a/api/src/main/java/org/osjava/jardiff/SimpleDiffCriteria.java +++ b/api/src/main/java/org/osjava/jardiff/SimpleDiffCriteria.java @@ -71,7 +71,7 @@ public class SimpleDiffCriteria implements DiffCriteria * @return True if the classes differ, false otherwise. */ public boolean differs(ClassInfo oldInfo, ClassInfo newInfo) { - if (oldInfo.getAccess() != newInfo.getAccess()) + if (Tools.isAccessChange(oldInfo.getAccess(), newInfo.getAccess())) return true; // Yes classes can have a null supername, e.g. java.lang.Object ! if(oldInfo.getSupername() == null) { @@ -100,7 +100,7 @@ public class SimpleDiffCriteria implements DiffCriteria * @return True if the methods differ, false otherwise. */ public boolean differs(MethodInfo oldInfo, MethodInfo newInfo) { - if (oldInfo.getAccess() != newInfo.getAccess()) + if (Tools.isAccessChange(oldInfo.getAccess(), newInfo.getAccess())) return true; if (oldInfo.getExceptions() == null || newInfo.getExceptions() == null) { @@ -127,7 +127,7 @@ public class SimpleDiffCriteria implements DiffCriteria * @return True if the fields differ, false otherwise. */ public boolean differs(FieldInfo oldInfo, FieldInfo newInfo) { - if (oldInfo.getAccess() != newInfo.getAccess()) + if (Tools.isAccessChange(oldInfo.getAccess(), newInfo.getAccess())) return true; if (oldInfo.getValue() == null || newInfo.getValue() == null) { if (oldInfo.getValue() != newInfo.getValue()) diff --git a/api/src/main/java/org/osjava/jardiff/Tools.java b/api/src/main/java/org/osjava/jardiff/Tools.java index 4a32ef7..0a8f5f1 100644 --- a/api/src/main/java/org/osjava/jardiff/Tools.java +++ b/api/src/main/java/org/osjava/jardiff/Tools.java @@ -16,6 +16,8 @@ */ package org.osjava.jardiff; +import org.objectweb.asm.Opcodes; + /** * A set of Tools which do not belong anywhere else in the API at this time. * This is nasty, but for now, useful. @@ -55,4 +57,21 @@ public final class Tools } return ret.toString(); } + + /** + * Returns whether newAccess is incompatible with oldAccess + * + * @param oldAccess + * @param newAccess + * @return + */ + public static boolean isAccessChange(int oldAccess, int newAccess) { + if ((oldAccess & Opcodes.ACC_FINAL) == 0 && (newAccess & Opcodes.ACC_FINAL) > 0) { + return true; + } else { + oldAccess = oldAccess & ~Opcodes.ACC_FINAL; + newAccess = newAccess & ~Opcodes.ACC_FINAL; + } + return oldAccess != newAccess; + } } |