summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Wright <michaelwr@google.com>2017-10-21 17:54:46 -0700
committerAurimas Liutikas <aurimas@google.com>2018-07-16 12:25:32 -0700
commitf242941b118ee4d50063805bae2a8e6b927e71b1 (patch)
treeb239d7c3b5925aa7d328debc70de58de999f69d8 /src
parent5e21830414e9b2c60195cb6498f4218b908dd3c7 (diff)
downloaddoclava-f242941b118ee4d50063805bae2a8e6b927e71b1.tar.gz
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 Merged-In: I28c7051a574bb50d2bde0c8034056add58ff69e5
Diffstat (limited to 'src')
-rw-r--r--src/com/google/doclava/ClassInfo.java20
-rw-r--r--src/com/google/doclava/Errors.java1
2 files changed, 13 insertions, 8 deletions
diff --git a/src/com/google/doclava/ClassInfo.java b/src/com/google/doclava/ClassInfo.java
index 2393c2c..dbe7783 100644
--- a/src/com/google/doclava/ClassInfo.java
+++ b/src/com/google/doclava/ClassInfo.java
@@ -2193,16 +2193,20 @@ public class ClassInfo extends DocInfo implements ContainerInfo, Comparable, Sco
* 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 class Errors {
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);