| 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; | |
| } | |
| } |