Add a new error type for added abstract methods.
If an abstract class that was released in prior version has an abstract
method added to it, this should be considered a breaking change since it
will break source compatibility.
Test: m -j12 and see the build break because of methods added to
ViewStructure
Change-Id: I28c7051a574bb50d2bde0c8034056add58ff69e5
diff --git a/src/com/google/doclava/ClassInfo.java b/src/com/google/doclava/ClassInfo.java
index 3a4090c..37e55f0 100644
--- a/src/com/google/doclava/ClassInfo.java
+++ b/src/com/google/doclava/ClassInfo.java
@@ -2048,16 +2048,20 @@
* abstractness affects how users use it. See also Stubs.methodIsOverride().
*/
MethodInfo mi = ClassInfo.overriddenMethod(mInfo, this);
- if (mi == null ||
- mi.isAbstract() != mInfo.isAbstract()) {
- Errors.error(Errors.ADDED_METHOD, mInfo.position(), "Added public method "
- + mInfo.prettyQualifiedSignature());
- if (diffMode) {
- newMethods.add(mInfo);
- }
+ if (mi == null && mInfo.isAbstract()) {
+ Errors.error(Errors.ADDED_ABSTRACT_METHOD, mInfo.position(),
+ "Added abstract public method "
+ + mInfo.prettyQualifiedSignature() + " to existing class");
consistent = false;
+ } else if (mi == null || mi.isAbstract() != mInfo.isAbstract()) {
+ Errors.error(Errors.ADDED_METHOD, mInfo.position(), "Added public method "
+ + mInfo.prettyQualifiedSignature());
+ if (diffMode) {
+ newMethods.add(mInfo);
+ }
+ consistent = false;
+ }
}
- }
}
if (diffMode) {
Collections.sort(newMethods, MethodInfo.comparator);
diff --git a/src/com/google/doclava/Errors.java b/src/com/google/doclava/Errors.java
index 9edd239..6b0eee0 100644
--- a/src/com/google/doclava/Errors.java
+++ b/src/com/google/doclava/Errors.java
@@ -281,6 +281,7 @@
public static final Error REMOVED_DEPRECATED_CLASS = new Error(28, REMOVED_CLASS);
public static final Error REMOVED_DEPRECATED_METHOD = new Error(29, REMOVED_METHOD);
public static final Error REMOVED_DEPRECATED_FIELD = new Error(30, REMOVED_FIELD);
+ public static final Error ADDED_ABSTRACT_METHOD = new Error(31, ADDED_METHOD);
// Errors in javadoc generation
public static final Error UNRESOLVED_LINK = new Error(101, LINT);