diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/google/doclava/ClassInfo.java | 5 | ||||
-rw-r--r-- | src/com/google/doclava/Errors.java | 3 | ||||
-rw-r--r-- | src/com/google/doclava/Stubs.java | 4 |
3 files changed, 10 insertions, 2 deletions
diff --git a/src/com/google/doclava/ClassInfo.java b/src/com/google/doclava/ClassInfo.java index a5ee7d4..8dde5c6 100644 --- a/src/com/google/doclava/ClassInfo.java +++ b/src/com/google/doclava/ClassInfo.java @@ -2092,9 +2092,12 @@ public class ClassInfo extends DocInfo implements ContainerInfo, Comparable, Sco /* * Similarly to the above, do not fail if this "new" method is really an override of an * existing superclass method. + * But we should fail if this is overriding an abstract method, because method's + * abstractness affects how users use it. See also Stubs.methodIsOverride(). */ MethodInfo mi = ClassInfo.overriddenMethod(mInfo, this); - if (mi == null) { + if (mi == null || + mi.isAbstract() != mInfo.isAbstract()) { Errors.error(Errors.ADDED_METHOD, mInfo.position(), "Added public method " + mInfo.qualifiedName()); consistent = false; diff --git a/src/com/google/doclava/Errors.java b/src/com/google/doclava/Errors.java index 84df16b..156de66 100644 --- a/src/com/google/doclava/Errors.java +++ b/src/com/google/doclava/Errors.java @@ -172,6 +172,7 @@ public class Errors { public static final Error INVALID_CONTENT_TYPE = new Error(119, ERROR); public static final Error INVALID_SAMPLE_INDEX = new Error(120, ERROR); public static final Error HIDDEN_TYPE_PARAMETER = new Error(121, HIDDEN); + public static final Error PRIVATE_SUPERCLASS = new Error(122, ERROR); public static final Error[] ERRORS = {UNRESOLVED_LINK, BAD_INCLUDE_TAG, UNKNOWN_TAG, UNKNOWN_PARAM_TAG_NAME, @@ -183,7 +184,7 @@ public class Errors { CHANGED_TRANSIENT, CHANGED_VOLATILE, CHANGED_TYPE, CHANGED_VALUE, CHANGED_SUPERCLASS, CHANGED_SCOPE, CHANGED_ABSTRACT, CHANGED_THROWS, CHANGED_NATIVE, CHANGED_CLASS, CHANGED_DEPRECATED, CHANGED_SYNCHRONIZED, ADDED_FINAL_UNINSTANTIABLE, REMOVED_FINAL, - BROKEN_SINCE_FILE, INVALID_CONTENT_TYPE, HIDDEN_TYPE_PARAMETER}; + BROKEN_SINCE_FILE, INVALID_CONTENT_TYPE, HIDDEN_TYPE_PARAMETER, PRIVATE_SUPERCLASS}; public static boolean setErrorLevel(int code, int level) { for (Error e : ERRORS) { diff --git a/src/com/google/doclava/Stubs.java b/src/com/google/doclava/Stubs.java index bc5e586..44f1277 100644 --- a/src/com/google/doclava/Stubs.java +++ b/src/com/google/doclava/Stubs.java @@ -294,6 +294,10 @@ public class Stubs { + " stripped of unavailable superclass " + supr.qualifiedName()); } else { cantStripThis(supr, notStrippable, "6:" + cl.realSuperclass().name() + cl.qualifiedName()); + if (supr.isPrivate()) { + Errors.error(Errors.PRIVATE_SUPERCLASS, cl.position(), "Public class " + + cl.qualifiedName() + " extends private class " + supr.qualifiedName()); + } } } } |