| package jdiff; |
| |
| import java.io.*; |
| import java.util.*; |
| |
| /** |
| * Track the various modifiers for a program element. |
| * |
| * The method used for Collection comparison (compareTo) must make its |
| * comparison based upon everything that is known about this set of modifiers. |
| * |
| * See the file LICENSE.txt for copyright details. |
| * @author Matthew Doar, mdoar@pobox.com |
| */ |
| class Modifiers implements Comparable { |
| |
| /** Set if the program element is static. */ |
| public boolean isStatic = false; |
| |
| /** Set if the program element is final. */ |
| public boolean isFinal = false; |
| |
| /** Set if the program element is deprecated. */ |
| public boolean isDeprecated = false; |
| |
| /** |
| * The visibility level; "public", "protected", "package" or |
| * "private" |
| */ |
| public String visibility = null; |
| |
| /** Default constructor. */ |
| public Modifiers() { |
| } |
| |
| /** Compare two Modifiers objects by their contents. */ |
| public int compareTo(Object o) { |
| Modifiers oModifiers = (Modifiers)o; |
| if (isStatic != oModifiers.isStatic) |
| return -1; |
| if (isFinal != oModifiers.isFinal) |
| return -1; |
| if (isDeprecated != oModifiers.isDeprecated) |
| return -1; |
| if (visibility != null) { |
| int comp = visibility.compareTo(oModifiers.visibility); |
| if (comp != 0) |
| return comp; |
| } |
| return 0; |
| } |
| |
| /** |
| * Generate a String describing the differences between the current |
| * (old) Modifiers object and a new Modifiers object. The string has |
| * no leading space, but does end in a period. |
| * |
| * @param newModifiers The new Modifiers object. |
| * @return The description of the differences, null if there is no change. |
| */ |
| public String diff(Modifiers newModifiers) { |
| String res = ""; |
| boolean hasContent = false; |
| if (isStatic != newModifiers.isStatic) { |
| res += "Change from "; |
| if (isStatic) |
| res += "static to non-static.<br>"; |
| else |
| res += "non-static to static.<br>"; |
| hasContent = true; |
| } |
| if (isFinal != newModifiers.isFinal) { |
| if (hasContent) |
| res += " "; |
| res += "Change from "; |
| if (isFinal) |
| res += "final to non-final.<br>"; |
| else |
| res += "non-final to final.<br>"; |
| hasContent = true; |
| } |
| if (isDeprecated != newModifiers.isDeprecated) { |
| if (hasContent) |
| res += " "; |
| if (isDeprecated) |
| res += "Change from deprecated to undeprecated.<br>"; |
| else |
| res += "<b>Now deprecated</b>.<br>"; |
| hasContent = true; |
| } |
| if (visibility != null) { |
| int comp = visibility.compareTo(newModifiers.visibility); |
| if (comp != 0) { |
| if (hasContent) |
| res += " "; |
| res += "Change of visibility from " + visibility + " to " + |
| newModifiers.visibility + ".<br>"; |
| hasContent = true; |
| } |
| } |
| if (res.compareTo("") == 0) |
| return null; |
| return res; |
| } |
| } |