summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Roos <roosa@google.com>2020-04-08 11:59:17 +0200
committerMakoto Onuki <omakoto@google.com>2020-04-28 10:01:27 -0700
commitae81bcd87ad2772cde3bc18ee661148b67a72124 (patch)
tree7b6188c7ba772e4cecfa33e61daeec1a2b126aef
parent534a4f8e6b0bdf628423edf60da8970d90e44fc8 (diff)
Metalava: Rename ErrorConfiguration to IssueConfiguration and convert Issues to Kotlin
Test: ./gradlew check Bug: 151160048 Merged-in: Ic2721d3eb6b79319df6c4165c7d82de8df74e1e0 Change-Id: Ic2721d3eb6b79319df6c4165c7d82de8df74e1e0
-rw-r--r--src/main/java/com/android/tools/metalava/Baseline.kt6
-rw-r--r--src/main/java/com/android/tools/metalava/CompatibilityCheck.kt4
-rw-r--r--src/main/java/com/android/tools/metalava/ReleaseType.kt14
-rw-r--r--src/main/java/com/android/tools/metalava/Reporter.kt14
-rw-r--r--src/main/java/com/android/tools/metalava/doclava1/Issues.java345
-rw-r--r--src/main/java/com/android/tools/metalava/doclava1/Issues.kt310
-rw-r--r--src/main/java/com/android/tools/metalava/model/IssueConfiguration.kt (renamed from src/main/java/com/android/tools/metalava/model/ErrorConfiguration.kt)10
7 files changed, 332 insertions, 371 deletions
diff --git a/src/main/java/com/android/tools/metalava/Baseline.kt b/src/main/java/com/android/tools/metalava/Baseline.kt
index 205448e..8444d08 100644
--- a/src/main/java/com/android/tools/metalava/Baseline.kt
+++ b/src/main/java/com/android/tools/metalava/Baseline.kt
@@ -224,11 +224,11 @@ class Baseline(
sb.append(format.header())
sb.append(headerComment)
- map.keys.asSequence().sortedBy { it.name ?: it.code.toString() }.forEach { issue ->
+ map.keys.asSequence().sortedBy { it.name }.forEach { issue ->
val idMap = map[issue]
idMap?.keys?.sorted()?.forEach { elementId ->
val message = idMap[elementId]!!
- sb.append(issue.name ?: issue.code.toString()).append(": ")
+ sb.append(issue.name).append(": ")
sb.append(elementId)
sb.append(":\n ")
sb.append(message).append('\n')
@@ -260,7 +260,7 @@ class Baseline(
" Count Issue Id Severity\n" +
" ---------------------------------------------\n")
val list = counts.entries.toMutableList()
- list.sortWith(compareBy({ -it.value }, { it.key.name ?: it.key.code.toString() }))
+ list.sortWith(compareBy({ -it.value }, { it.key.name }))
var total = 0
for (entry in list) {
val count = entry.value
diff --git a/src/main/java/com/android/tools/metalava/CompatibilityCheck.kt b/src/main/java/com/android/tools/metalava/CompatibilityCheck.kt
index 0cd51dd..6292dce 100644
--- a/src/main/java/com/android/tools/metalava/CompatibilityCheck.kt
+++ b/src/main/java/com/android/tools/metalava/CompatibilityCheck.kt
@@ -869,10 +869,10 @@ class CompatibilityCheck(
) {
val filter = apiType.getEmitFilter()
val checker = CompatibilityCheck(filter, previous, apiType, base)
- val errorConfiguration = releaseType.getErrorConfiguration()
+ val issueConfiguration = releaseType.getIssueConfiguration()
val previousConfiguration = configuration
try {
- configuration = errorConfiguration
+ configuration = issueConfiguration
CodebaseComparator().compare(checker, previous, codebase, filter)
} finally {
configuration = previousConfiguration
diff --git a/src/main/java/com/android/tools/metalava/ReleaseType.kt b/src/main/java/com/android/tools/metalava/ReleaseType.kt
index 6312b15..814cc77 100644
--- a/src/main/java/com/android/tools/metalava/ReleaseType.kt
+++ b/src/main/java/com/android/tools/metalava/ReleaseType.kt
@@ -17,7 +17,7 @@
package com.android.tools.metalava
import com.android.tools.metalava.doclava1.Issues
-import com.android.tools.metalava.model.ErrorConfiguration
+import com.android.tools.metalava.model.IssueConfiguration
enum class ReleaseType(val flagName: String, private val displayName: String = flagName) {
DEV("current", "development") {
@@ -30,8 +30,8 @@ enum class ReleaseType(val flagName: String, private val displayName: String = f
* "-error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 " +
* "-error 25 -error 26 -error 27",
*/
- override fun getErrorConfiguration(): ErrorConfiguration {
- return super.getErrorConfiguration().apply {
+ override fun getIssueConfiguration(): IssueConfiguration {
+ return super.getIssueConfiguration().apply {
error(Issues.ADDED_CLASS)
error(Issues.ADDED_FIELD)
error(Issues.ADDED_FINAL_UNINSTANTIABLE)
@@ -58,8 +58,8 @@ enum class ReleaseType(val flagName: String, private val displayName: String = f
* "-error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 " +
* "-error 16 -error 17 -error 18 -error 31",
*/
- override fun getErrorConfiguration(): ErrorConfiguration {
- return super.getErrorConfiguration().apply {
+ override fun getIssueConfiguration(): IssueConfiguration {
+ return super.getIssueConfiguration().apply {
error(Issues.ADDED_ABSTRACT_METHOD)
hide(Issues.ADDED_CLASS)
hide(Issues.ADDED_FIELD)
@@ -75,8 +75,8 @@ enum class ReleaseType(val flagName: String, private val displayName: String = f
};
/** Returns the error configuration to use for the given release type */
- open fun getErrorConfiguration(): ErrorConfiguration {
- return ErrorConfiguration().apply {
+ open fun getIssueConfiguration(): IssueConfiguration {
+ return IssueConfiguration().apply {
error(Issues.ADDED_FINAL)
error(Issues.CHANGED_STATIC)
error(Issues.CHANGED_SUPERCLASS)
diff --git a/src/main/java/com/android/tools/metalava/Reporter.kt b/src/main/java/com/android/tools/metalava/Reporter.kt
index 4371e4f..0af715a 100644
--- a/src/main/java/com/android/tools/metalava/Reporter.kt
+++ b/src/main/java/com/android/tools/metalava/Reporter.kt
@@ -328,7 +328,7 @@ open class Reporter(private val rootFolder: File? = File("").absoluteFile) {
sb.append(resetTerminal())
sb.append(message)
id?.let {
- sb.append(" [").append(if (it.name != null) it.name else it.code).append("]")
+ sb.append(" [").append(it.name).append("]")
}
} else {
if (!omitLocations) {
@@ -344,7 +344,7 @@ open class Reporter(private val rootFolder: File? = File("").absoluteFile) {
INHERIT, HIDDEN -> {
}
}
- id?.let { sb.append(if (it.name != null) it.name else it.code).append(": ") }
+ id?.let { sb.append(it.name).append(": ") }
sb.append(message)
} else {
when (severity) {
@@ -358,13 +358,9 @@ open class Reporter(private val rootFolder: File? = File("").absoluteFile) {
sb.append(message)
id?.let {
sb.append(" [")
- if (it.name != null) {
- sb.append(it.name)
- }
- if (compatibility.includeExitCode || it.name == null) {
- if (it.name != null) {
- sb.append(":")
- }
+ sb.append(it.name)
+ if (compatibility.includeExitCode) {
+ sb.append(":")
sb.append(it.code)
}
sb.append("]")
diff --git a/src/main/java/com/android/tools/metalava/doclava1/Issues.java b/src/main/java/com/android/tools/metalava/doclava1/Issues.java
deleted file mode 100644
index c1aefd8..0000000
--- a/src/main/java/com/android/tools/metalava/doclava1/Issues.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tools.metalava.doclava1;
-
-import com.android.tools.metalava.Severity;
-import org.jetbrains.annotations.Nullable;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import static com.android.sdklib.SdkVersionInfo.underlinesToCamelCase;
-
-// Copied from doclava1 (and a bunch of stuff left alone; preserving to have same error id's)
-public class Issues {
- public static class Issue {
- public final int code;
- @Nullable
- String fieldName;
-
- public final Severity defaultLevel;
-
- /**
- * The name of this issue if known
- */
- @Nullable
- public String name;
-
- /**
- * When {@code level} is set to {@link Severity#INHERIT}, this is the parent from
- * which the issue will inherit its level.
- */
- public final Issue parent;
-
- /** Related rule, if any */
- public final String rule;
-
- /** Related explanation, if any */
- public final String explanation;
-
- /** Applicable category */
- public final Category category;
-
- private Issue(int code, Severity defaultLevel) {
- this(code, defaultLevel, Category.UNKNOWN);
- }
-
- private Issue(int code, Severity defaultLevel, Category category) {
- this(code, defaultLevel, null, category, null, null);
- }
-
- private Issue(int code, Severity defaultLevel, Category category, String rule) {
- this(code, defaultLevel, null, category, rule, null);
- }
-
- private Issue(int code, Issue parent, Category category) {
- this(code, Severity.INHERIT, parent, category, null, null);
- }
-
- private Issue(int code, Severity defaultLevel, Issue parent, Category category,
- String rule, String explanation) {
- this.code = code;
- this.defaultLevel = defaultLevel;
- this.parent = parent;
- this.category = category;
- this.rule = rule;
- this.explanation = explanation;
- ISSUES.add(this);
- }
-
- public String toString() {
- return "Issue #" + this.code + " (" + this.name + ")";
- }
- }
-
- private static final List<Issue> ISSUES = new ArrayList<>(100);
- private static final Map<String, Issue> nameToIssue = new HashMap<>(100);
- private static final Map<Integer, Issue> idToIssue = new HashMap<>(100);
-
- public enum Category {
- COMPATIBILITY("Compatibility", null),
- DOCUMENTATION("Documentation", null),
- API_LINT("API Lint", "go/android-api-guidelines"),
- UNKNOWN("Default", null);
-
- public final String description;
- public final String ruleLink;
-
- Category(String description, String ruleLink) {
- this.description = description;
- this.ruleLink = ruleLink;
- }
- }
-
- // Issues for API verification
- public static final Issue PARSE_ERROR = new Issue(1, Severity.ERROR);
- public static final Issue ADDED_PACKAGE = new Issue(2, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue ADDED_CLASS = new Issue(3, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue ADDED_METHOD = new Issue(4, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue ADDED_FIELD = new Issue(5, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue ADDED_INTERFACE = new Issue(6, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue REMOVED_PACKAGE = new Issue(7, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue REMOVED_CLASS = new Issue(8, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue REMOVED_METHOD = new Issue(9, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue REMOVED_FIELD = new Issue(10, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue REMOVED_INTERFACE = new Issue(11, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue CHANGED_STATIC = new Issue(12, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue ADDED_FINAL = new Issue(13, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue CHANGED_TRANSIENT = new Issue(14, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue CHANGED_VOLATILE = new Issue(15, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue CHANGED_TYPE = new Issue(16, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue CHANGED_VALUE = new Issue(17, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue CHANGED_SUPERCLASS = new Issue(18, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue CHANGED_SCOPE = new Issue(19, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue CHANGED_ABSTRACT = new Issue(20, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue CHANGED_THROWS = new Issue(21, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue CHANGED_NATIVE = new Issue(22, Severity.HIDDEN, Category.COMPATIBILITY);
- public static final Issue CHANGED_CLASS = new Issue(23, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue CHANGED_DEPRECATED = new Issue(24, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue CHANGED_SYNCHRONIZED = new Issue(25, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue ADDED_FINAL_UNINSTANTIABLE = new Issue(26, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue REMOVED_FINAL = new Issue(27, Severity.WARNING, Category.COMPATIBILITY);
- public static final Issue REMOVED_DEPRECATED_CLASS = new Issue(28, REMOVED_CLASS, Category.COMPATIBILITY);
- public static final Issue REMOVED_DEPRECATED_METHOD = new Issue(29, REMOVED_METHOD, Category.COMPATIBILITY);
- public static final Issue REMOVED_DEPRECATED_FIELD = new Issue(30, REMOVED_FIELD, Category.COMPATIBILITY);
- public static final Issue ADDED_ABSTRACT_METHOD = new Issue(31, ADDED_METHOD, Category.COMPATIBILITY);
- public static final Issue ADDED_REIFIED = new Issue(32, Severity.WARNING, Category.COMPATIBILITY);
-
- // Issues in javadoc generation
- public static final Issue UNRESOLVED_LINK = new Issue(101, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue BAD_INCLUDE_TAG = new Issue(102, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue UNKNOWN_TAG = new Issue(103, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue UNKNOWN_PARAM_TAG_NAME = new Issue(104, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue UNDOCUMENTED_PARAMETER = new Issue(105, Severity.HIDDEN, Category.DOCUMENTATION);
- public static final Issue BAD_ATTR_TAG = new Issue(106, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue BAD_INHERITDOC = new Issue(107, Severity.HIDDEN, Category.DOCUMENTATION);
- public static final Issue HIDDEN_LINK = new Issue(108, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue HIDDEN_CONSTRUCTOR = new Issue(109, Severity.WARNING, Category.DOCUMENTATION);
- public static final Issue UNAVAILABLE_SYMBOL = new Issue(110, Severity.WARNING, Category.DOCUMENTATION);
- public static final Issue HIDDEN_SUPERCLASS = new Issue(111, Severity.WARNING, Category.DOCUMENTATION);
- public static final Issue DEPRECATED = new Issue(112, Severity.HIDDEN, Category.DOCUMENTATION);
- public static final Issue DEPRECATION_MISMATCH = new Issue(113, Severity.ERROR, Category.DOCUMENTATION);
- public static final Issue MISSING_COMMENT = new Issue(114, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue IO_ERROR = new Issue(115, Severity.ERROR);
- public static final Issue NO_SINCE_DATA = new Issue(116, Severity.HIDDEN, Category.DOCUMENTATION);
- public static final Issue NO_FEDERATION_DATA = new Issue(117, Severity.WARNING, Category.DOCUMENTATION);
- public static final Issue BROKEN_SINCE_FILE = new Issue(118, Severity.ERROR, Category.DOCUMENTATION);
- public static final Issue INVALID_CONTENT_TYPE = new Issue(119, Severity.ERROR, Category.DOCUMENTATION);
- public static final Issue INVALID_SAMPLE_INDEX = new Issue(120, Severity.ERROR, Category.DOCUMENTATION);
- public static final Issue HIDDEN_TYPE_PARAMETER = new Issue(121, Severity.WARNING, Category.DOCUMENTATION);
- public static final Issue PRIVATE_SUPERCLASS = new Issue(122, Severity.WARNING, Category.DOCUMENTATION);
- public static final Issue NULLABLE = new Issue(123, Severity.HIDDEN, Category.DOCUMENTATION);
- public static final Issue INT_DEF = new Issue(124, Severity.HIDDEN, Category.DOCUMENTATION);
- public static final Issue REQUIRES_PERMISSION = new Issue(125, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue BROADCAST_BEHAVIOR = new Issue(126, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue SDK_CONSTANT = new Issue(127, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue TODO = new Issue(128, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue NO_ARTIFACT_DATA = new Issue(129, Severity.HIDDEN, Category.DOCUMENTATION);
- public static final Issue BROKEN_ARTIFACT_FILE = new Issue(130, Severity.ERROR, Category.DOCUMENTATION);
-
- // Metalava new warnings (not from doclava)
-
- public static final Issue TYPO = new Issue(131, Severity.WARNING, Category.DOCUMENTATION);
- public static final Issue MISSING_PERMISSION = new Issue(132, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue MULTIPLE_THREAD_ANNOTATIONS = new Issue(133, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue UNRESOLVED_CLASS = new Issue(134, Severity.LINT, Category.DOCUMENTATION);
- public static final Issue INVALID_NULL_CONVERSION = new Issue(135, Severity.ERROR, Category.COMPATIBILITY);
- public static final Issue PARAMETER_NAME_CHANGE = new Issue(136, Severity.ERROR, Category.COMPATIBILITY);
- public static final Issue OPERATOR_REMOVAL = new Issue(137, Severity.ERROR, Category.COMPATIBILITY);
- public static final Issue INFIX_REMOVAL = new Issue(138, Severity.ERROR, Category.COMPATIBILITY);
- public static final Issue VARARG_REMOVAL = new Issue(139, Severity.ERROR, Category.COMPATIBILITY);
- public static final Issue ADD_SEALED = new Issue(140, Severity.ERROR, Category.COMPATIBILITY);
- public static final Issue DEFAULT_VALUE_CHANGE = new Issue(141, Severity.ERROR, Category.COMPATIBILITY); // Formerly 144, then 382
-
- public static final Issue ANNOTATION_EXTRACTION = new Issue(146, Severity.ERROR);
- public static final Issue SUPERFLUOUS_PREFIX = new Issue(147, Severity.WARNING);
- public static final Issue HIDDEN_TYPEDEF_CONSTANT = new Issue(148, Severity.ERROR);
- public static final Issue EXPECTED_PLATFORM_TYPE = new Issue(149, Severity.HIDDEN);
- public static final Issue INTERNAL_ERROR = new Issue(150, Severity.ERROR);
- public static final Issue RETURNING_UNEXPECTED_CONSTANT = new Issue(151, Severity.WARNING);
- public static final Issue DEPRECATED_OPTION = new Issue(152, Severity.WARNING);
- public static final Issue BOTH_PACKAGE_INFO_AND_HTML = new Issue(153, Severity.WARNING, Category.DOCUMENTATION);
- // The plan is for this to be set as an error once (1) existing code is marked as @deprecated
- // and (2) the principle is adopted by the API council
- public static final Issue REFERENCES_DEPRECATED = new Issue(154, Severity.HIDDEN);
- public static final Issue UNHIDDEN_SYSTEM_API = new Issue(155, Severity.ERROR);
- public static final Issue SHOWING_MEMBER_IN_HIDDEN_CLASS = new Issue(156, Severity.ERROR);
- public static final Issue INVALID_NULLABILITY_ANNOTATION = new Issue(157, Severity.ERROR);
- public static final Issue REFERENCES_HIDDEN = new Issue(158, Severity.ERROR);
- public static final Issue IGNORING_SYMLINK = new Issue(159, Severity.INFO);
- public static final Issue INVALID_NULLABILITY_ANNOTATION_WARNING = new Issue(160, Severity.WARNING);
- // The plan is for this to be set as an error once (1) existing code is marked as @deprecated
- // and (2) the principle is adopted by the API council
- public static final Issue EXTENDS_DEPRECATED = new Issue(161, Severity.HIDDEN);
- public static final Issue FORBIDDEN_TAG = new Issue(162, Severity.ERROR);
- public static final Issue MISSING_COLUMN = new Issue(163, Severity.WARNING, Category.DOCUMENTATION);
- public static final Issue INVALID_SYNTAX = new Issue(164, Severity.ERROR);
-
- // API lint
- public static final Issue START_WITH_LOWER = new Issue(300, Severity.ERROR, Category.API_LINT, "S1");
- public static final Issue START_WITH_UPPER = new Issue(301, Severity.ERROR, Category.API_LINT, "S1");
- public static final Issue ALL_UPPER = new Issue(302, Severity.ERROR, Category.API_LINT, "C2");
- public static final Issue ACRONYM_NAME = new Issue(303, Severity.WARNING, Category.API_LINT, "S1");
- public static final Issue ENUM = new Issue(304, Severity.ERROR, Category.API_LINT, "F5");
- public static final Issue ENDS_WITH_IMPL = new Issue(305, Severity.ERROR, Category.API_LINT);
- public static final Issue MIN_MAX_CONSTANT = new Issue(306, Severity.WARNING, Category.API_LINT, "C8");
- public static final Issue COMPILE_TIME_CONSTANT = new Issue(307, Severity.ERROR, Category.API_LINT);
- public static final Issue SINGULAR_CALLBACK = new Issue(308, Severity.ERROR, Category.API_LINT, "L1");
- public static final Issue CALLBACK_NAME = new Issue(309, Severity.WARNING, Category.API_LINT, "L1");
- public static final Issue CALLBACK_INTERFACE = new Issue(310, Severity.ERROR, Category.API_LINT, "CL3");
- public static final Issue CALLBACK_METHOD_NAME = new Issue(311, Severity.ERROR, Category.API_LINT, "L1");
- public static final Issue LISTENER_INTERFACE = new Issue(312, Severity.ERROR, Category.API_LINT, "L1");
- public static final Issue SINGLE_METHOD_INTERFACE = new Issue(313, Severity.ERROR, Category.API_LINT, "L1");
- public static final Issue INTENT_NAME = new Issue(314, Severity.ERROR, Category.API_LINT, "C3");
- public static final Issue ACTION_VALUE = new Issue(315, Severity.ERROR, Category.API_LINT, "C4");
- public static final Issue EQUALS_AND_HASH_CODE = new Issue(316, Severity.ERROR, Category.API_LINT, "M8");
- public static final Issue PARCEL_CREATOR = new Issue(317, Severity.ERROR, Category.API_LINT, "FW3");
- public static final Issue PARCEL_NOT_FINAL = new Issue(318, Severity.ERROR, Category.API_LINT, "FW8");
- public static final Issue PARCEL_CONSTRUCTOR = new Issue(319, Severity.ERROR, Category.API_LINT, "FW3");
- public static final Issue PROTECTED_MEMBER = new Issue(320, Severity.ERROR, Category.API_LINT, "M7");
- public static final Issue PAIRED_REGISTRATION = new Issue(321, Severity.ERROR, Category.API_LINT, "L2");
- public static final Issue REGISTRATION_NAME = new Issue(322, Severity.ERROR, Category.API_LINT, "L3");
- public static final Issue VISIBLY_SYNCHRONIZED = new Issue(323, Severity.ERROR, Category.API_LINT, "M5");
- public static final Issue INTENT_BUILDER_NAME = new Issue(324, Severity.WARNING, Category.API_LINT, "FW1");
- public static final Issue CONTEXT_NAME_SUFFIX = new Issue(325, Severity.ERROR, Category.API_LINT, "C4");
- public static final Issue INTERFACE_CONSTANT = new Issue(326, Severity.ERROR, Category.API_LINT, "C4");
- public static final Issue ON_NAME_EXPECTED = new Issue(327, Severity.WARNING, Category.API_LINT);
- public static final Issue TOP_LEVEL_BUILDER = new Issue(328, Severity.WARNING, Category.API_LINT);
- public static final Issue MISSING_BUILD_METHOD = new Issue(329, Severity.WARNING, Category.API_LINT);
- public static final Issue BUILDER_SET_STYLE = new Issue(330, Severity.WARNING, Category.API_LINT);
- public static final Issue SETTER_RETURNS_THIS = new Issue(331, Severity.WARNING, Category.API_LINT, "M4");
- public static final Issue RAW_AIDL = new Issue(332, Severity.ERROR, Category.API_LINT);
- public static final Issue INTERNAL_CLASSES = new Issue(333, Severity.ERROR, Category.API_LINT);
- public static final Issue PACKAGE_LAYERING = new Issue(334, Severity.WARNING, Category.API_LINT, "FW6");
- public static final Issue GETTER_SETTER_NAMES = new Issue(335, Severity.ERROR, Category.API_LINT, "M6");
- public static final Issue CONCRETE_COLLECTION = new Issue(336, Severity.ERROR, Category.API_LINT, "CL2");
- public static final Issue OVERLAPPING_CONSTANTS = new Issue(337, Severity.WARNING, Category.API_LINT, "C1");
- public static final Issue GENERIC_EXCEPTION = new Issue(338, Severity.ERROR, Category.API_LINT, "S1");
- public static final Issue ILLEGAL_STATE_EXCEPTION = new Issue(339, Severity.WARNING, Category.API_LINT, "S1");
- public static final Issue RETHROW_REMOTE_EXCEPTION = new Issue(340, Severity.ERROR, Category.API_LINT, "FW9");
- public static final Issue MENTIONS_GOOGLE = new Issue(341, Severity.ERROR, Category.API_LINT);
- public static final Issue HEAVY_BIT_SET = new Issue(342, Severity.ERROR, Category.API_LINT);
- public static final Issue MANAGER_CONSTRUCTOR = new Issue(343, Severity.ERROR, Category.API_LINT);
- public static final Issue MANAGER_LOOKUP = new Issue(344, Severity.ERROR, Category.API_LINT);
- public static final Issue AUTO_BOXING = new Issue(345, Severity.ERROR, Category.API_LINT, "M11");
- public static final Issue STATIC_UTILS = new Issue(346, Severity.ERROR, Category.API_LINT);
- public static final Issue CONTEXT_FIRST = new Issue(347, Severity.ERROR, Category.API_LINT, "M3");
- public static final Issue LISTENER_LAST = new Issue(348, Severity.WARNING, Category.API_LINT, "M3");
- public static final Issue EXECUTOR_REGISTRATION = new Issue(349, Severity.WARNING, Category.API_LINT, "L1");
- public static final Issue CONFIG_FIELD_NAME = new Issue(350, Severity.ERROR, Category.API_LINT);
- public static final Issue RESOURCE_FIELD_NAME = new Issue(351, Severity.ERROR, Category.API_LINT);
- public static final Issue RESOURCE_VALUE_FIELD_NAME = new Issue(352, Severity.ERROR, Category.API_LINT, "C7");
- public static final Issue RESOURCE_STYLE_FIELD_NAME = new Issue(353, Severity.ERROR, Category.API_LINT, "C7");
- public static final Issue STREAM_FILES = new Issue(354, Severity.WARNING, Category.API_LINT, "M10");
- public static final Issue PARCELABLE_LIST = new Issue(355, Severity.WARNING, Category.API_LINT);
- public static final Issue ABSTRACT_INNER = new Issue(356, Severity.WARNING, Category.API_LINT);
- public static final Issue BANNED_THROW = new Issue(358, Severity.ERROR, Category.API_LINT);
- public static final Issue EXTENDS_ERROR = new Issue(359, Severity.ERROR, Category.API_LINT);
- public static final Issue EXCEPTION_NAME = new Issue(360, Severity.ERROR, Category.API_LINT);
- public static final Issue METHOD_NAME_UNITS = new Issue(361, Severity.ERROR, Category.API_LINT);
- public static final Issue FRACTION_FLOAT = new Issue(362, Severity.ERROR, Category.API_LINT);
- public static final Issue PERCENTAGE_INT = new Issue(363, Severity.ERROR, Category.API_LINT);
- public static final Issue NOT_CLOSEABLE = new Issue(364, Severity.WARNING, Category.API_LINT);
- public static final Issue KOTLIN_OPERATOR = new Issue(365, Severity.INFO, Category.API_LINT);
- public static final Issue ARRAY_RETURN = new Issue(366, Severity.WARNING, Category.API_LINT);
- public static final Issue USER_HANDLE = new Issue(367, Severity.WARNING, Category.API_LINT);
- public static final Issue USER_HANDLE_NAME = new Issue(368, Severity.WARNING, Category.API_LINT);
- public static final Issue SERVICE_NAME = new Issue(369, Severity.ERROR, Category.API_LINT, "C4");
- public static final Issue METHOD_NAME_TENSE = new Issue(370, Severity.WARNING, Category.API_LINT);
- public static final Issue NO_CLONE = new Issue(371, Severity.ERROR, Category.API_LINT);
- public static final Issue USE_ICU = new Issue(372, Severity.WARNING, Category.API_LINT);
- public static final Issue USE_PARCEL_FILE_DESCRIPTOR = new Issue(373, Severity.ERROR, Category.API_LINT, "FW11");
- public static final Issue NO_BYTE_OR_SHORT = new Issue(374, Severity.WARNING, Category.API_LINT, "FW12");
- public static final Issue SINGLETON_CONSTRUCTOR = new Issue(375, Severity.ERROR, Category.API_LINT);
- public static final Issue COMMON_ARGS_FIRST = new Issue(376, Severity.WARNING, Category.API_LINT, "M2");
- public static final Issue CONSISTENT_ARGUMENT_ORDER = new Issue(377, Severity.ERROR, Category.API_LINT, "M2");
- public static final Issue KOTLIN_KEYWORD = new Issue(378, Severity.ERROR, Category.API_LINT); // Formerly 141
- public static final Issue UNIQUE_KOTLIN_OPERATOR = new Issue(379, Severity.ERROR, Category.API_LINT);
- public static final Issue SAM_SHOULD_BE_LAST = new Issue(380, Severity.WARNING, Category.API_LINT); // Formerly 142
- public static final Issue MISSING_JVMSTATIC = new Issue(381, Severity.WARNING, Category.API_LINT); // Formerly 143
- public static final Issue DOCUMENT_EXCEPTIONS = new Issue(383, Severity.ERROR, Category.API_LINT); // Formerly 145
- public static final Issue FORBIDDEN_SUPER_CLASS = new Issue(384, Severity.ERROR, Category.API_LINT);
- public static final Issue MISSING_NULLABILITY = new Issue(385, Severity.ERROR, Category.API_LINT);
- public static final Issue MUTABLE_BARE_FIELD = new Issue(386, Severity.ERROR, Category.API_LINT, "F2");
- public static final Issue INTERNAL_FIELD = new Issue(387, Severity.ERROR, Category.API_LINT, "F2");
- public static final Issue PUBLIC_TYPEDEF = new Issue(388, Severity.ERROR, Category.API_LINT, "FW15");
- public static final Issue ANDROID_URI = new Issue(389, Severity.ERROR, Category.API_LINT, "FW14");
- public static final Issue BAD_FUTURE = new Issue(390, Severity.ERROR, Category.API_LINT);
-
- static {
- // Attempt to initialize issue names based on the field names
- try {
- for (Field field : Issues.class.getDeclaredFields()) {
- Object o = field.get(null);
- if (o instanceof Issue) {
- Issue issue = (Issue) o;
- String fieldName = field.getName();
- issue.fieldName = fieldName;
- issue.name = underlinesToCamelCase(fieldName.toLowerCase(Locale.US));
- nameToIssue.put(issue.name, issue);
- idToIssue.put(issue.code, issue);
- }
- }
- } catch (Throwable unexpected) {
- unexpected.printStackTrace();
- }
- }
-
- @Nullable
- public static Issue findIssueById(int id) {
- return idToIssue.get(id);
- }
-
- @Nullable
- public static Issue findIssueById(String id) {
- return nameToIssue.get(id);
- }
-
- @Nullable
- public static Issue findIssueByIdIgnoringCase(String id) {
- for (Issue e : ISSUES) {
- if (id.equalsIgnoreCase(e.name)) {
- return e;
- }
- }
- return null;
- }
-}
-
diff --git a/src/main/java/com/android/tools/metalava/doclava1/Issues.kt b/src/main/java/com/android/tools/metalava/doclava1/Issues.kt
new file mode 100644
index 0000000..8b61599
--- /dev/null
+++ b/src/main/java/com/android/tools/metalava/doclava1/Issues.kt
@@ -0,0 +1,310 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.tools.metalava.doclava1
+
+import com.android.sdklib.SdkVersionInfo
+import com.android.tools.metalava.Severity
+import java.util.ArrayList
+import java.util.HashMap
+import java.util.Locale
+import kotlin.reflect.full.declaredMemberProperties
+
+// Copied from doclava1 (and a bunch of stuff left alone preserving to have same error id's)
+object Issues {
+ private val allIssues: MutableList<Issue> = ArrayList(200)
+ private val nameToIssue: MutableMap<String, Issue> = HashMap(200)
+ private val idToIssue: MutableMap<Int, Issue> = HashMap(200)
+
+ val PARSE_ERROR = Issue(1, Severity.ERROR)
+ val ADDED_PACKAGE = Issue(2, Severity.WARNING, Category.COMPATIBILITY)
+ val ADDED_CLASS = Issue(3, Severity.WARNING, Category.COMPATIBILITY)
+ val ADDED_METHOD = Issue(4, Severity.WARNING, Category.COMPATIBILITY)
+ val ADDED_FIELD = Issue(5, Severity.WARNING, Category.COMPATIBILITY)
+ val ADDED_INTERFACE = Issue(6, Severity.WARNING, Category.COMPATIBILITY)
+ val REMOVED_PACKAGE = Issue(7, Severity.WARNING, Category.COMPATIBILITY)
+ val REMOVED_CLASS = Issue(8, Severity.WARNING, Category.COMPATIBILITY)
+ val REMOVED_METHOD = Issue(9, Severity.WARNING, Category.COMPATIBILITY)
+ val REMOVED_FIELD = Issue(10, Severity.WARNING, Category.COMPATIBILITY)
+ val REMOVED_INTERFACE = Issue(11, Severity.WARNING, Category.COMPATIBILITY)
+ val CHANGED_STATIC = Issue(12, Severity.WARNING, Category.COMPATIBILITY)
+ val ADDED_FINAL = Issue(13, Severity.WARNING, Category.COMPATIBILITY)
+ val CHANGED_TRANSIENT = Issue(14, Severity.WARNING, Category.COMPATIBILITY)
+ val CHANGED_VOLATILE = Issue(15, Severity.WARNING, Category.COMPATIBILITY)
+ val CHANGED_TYPE = Issue(16, Severity.WARNING, Category.COMPATIBILITY)
+ val CHANGED_VALUE = Issue(17, Severity.WARNING, Category.COMPATIBILITY)
+ val CHANGED_SUPERCLASS = Issue(18, Severity.WARNING, Category.COMPATIBILITY)
+ val CHANGED_SCOPE = Issue(19, Severity.WARNING, Category.COMPATIBILITY)
+ val CHANGED_ABSTRACT = Issue(20, Severity.WARNING, Category.COMPATIBILITY)
+ val CHANGED_THROWS = Issue(21, Severity.WARNING, Category.COMPATIBILITY)
+ val CHANGED_NATIVE = Issue(22, Severity.HIDDEN, Category.COMPATIBILITY)
+ val CHANGED_CLASS = Issue(23, Severity.WARNING, Category.COMPATIBILITY)
+ val CHANGED_DEPRECATED = Issue(24, Severity.WARNING, Category.COMPATIBILITY)
+ val CHANGED_SYNCHRONIZED = Issue(25, Severity.WARNING, Category.COMPATIBILITY)
+ val ADDED_FINAL_UNINSTANTIABLE = Issue(26, Severity.WARNING, Category.COMPATIBILITY)
+ val REMOVED_FINAL = Issue(27, Severity.WARNING, Category.COMPATIBILITY)
+ val REMOVED_DEPRECATED_CLASS = Issue(28, REMOVED_CLASS, Category.COMPATIBILITY)
+ val REMOVED_DEPRECATED_METHOD = Issue(29, REMOVED_METHOD, Category.COMPATIBILITY)
+ val REMOVED_DEPRECATED_FIELD = Issue(30, REMOVED_FIELD, Category.COMPATIBILITY)
+ val ADDED_ABSTRACT_METHOD = Issue(31, ADDED_METHOD, Category.COMPATIBILITY)
+ val ADDED_REIFIED = Issue(32, Severity.WARNING, Category.COMPATIBILITY)
+
+ // Issues in javadoc generation
+ val UNRESOLVED_LINK = Issue(101, Severity.LINT, Category.DOCUMENTATION)
+ val BAD_INCLUDE_TAG = Issue(102, Severity.LINT, Category.DOCUMENTATION)
+ val UNKNOWN_TAG = Issue(103, Severity.LINT, Category.DOCUMENTATION)
+ val UNKNOWN_PARAM_TAG_NAME = Issue(104, Severity.LINT, Category.DOCUMENTATION)
+ val UNDOCUMENTED_PARAMETER = Issue(105, Severity.HIDDEN, Category.DOCUMENTATION)
+ val BAD_ATTR_TAG = Issue(106, Severity.LINT, Category.DOCUMENTATION)
+ val BAD_INHERITDOC = Issue(107, Severity.HIDDEN, Category.DOCUMENTATION)
+ val HIDDEN_LINK = Issue(108, Severity.LINT, Category.DOCUMENTATION)
+ val HIDDEN_CONSTRUCTOR = Issue(109, Severity.WARNING, Category.DOCUMENTATION)
+ val UNAVAILABLE_SYMBOL = Issue(110, Severity.WARNING, Category.DOCUMENTATION)
+ val HIDDEN_SUPERCLASS = Issue(111, Severity.WARNING, Category.DOCUMENTATION)
+ val DEPRECATED = Issue(112, Severity.HIDDEN, Category.DOCUMENTATION)
+ val DEPRECATION_MISMATCH = Issue(113, Severity.ERROR, Category.DOCUMENTATION)
+ val MISSING_COMMENT = Issue(114, Severity.LINT, Category.DOCUMENTATION)
+ val IO_ERROR = Issue(115, Severity.ERROR)
+ val NO_SINCE_DATA = Issue(116, Severity.HIDDEN, Category.DOCUMENTATION)
+ val NO_FEDERATION_DATA = Issue(117, Severity.WARNING, Category.DOCUMENTATION)
+ val BROKEN_SINCE_FILE = Issue(118, Severity.ERROR, Category.DOCUMENTATION)
+ val INVALID_CONTENT_TYPE = Issue(119, Severity.ERROR, Category.DOCUMENTATION)
+ val INVALID_SAMPLE_INDEX = Issue(120, Severity.ERROR, Category.DOCUMENTATION)
+ val HIDDEN_TYPE_PARAMETER = Issue(121, Severity.WARNING, Category.DOCUMENTATION)
+ val PRIVATE_SUPERCLASS = Issue(122, Severity.WARNING, Category.DOCUMENTATION)
+ val NULLABLE = Issue(123, Severity.HIDDEN, Category.DOCUMENTATION)
+ val INT_DEF = Issue(124, Severity.HIDDEN, Category.DOCUMENTATION)
+ val REQUIRES_PERMISSION = Issue(125, Severity.LINT, Category.DOCUMENTATION)
+ val BROADCAST_BEHAVIOR = Issue(126, Severity.LINT, Category.DOCUMENTATION)
+ val SDK_CONSTANT = Issue(127, Severity.LINT, Category.DOCUMENTATION)
+ val TODO = Issue(128, Severity.LINT, Category.DOCUMENTATION)
+ val NO_ARTIFACT_DATA = Issue(129, Severity.HIDDEN, Category.DOCUMENTATION)
+ val BROKEN_ARTIFACT_FILE = Issue(130, Severity.ERROR, Category.DOCUMENTATION)
+
+ // Metalava warnings (not from doclava)
+
+ val TYPO = Issue(131, Severity.WARNING, Category.DOCUMENTATION)
+ val MISSING_PERMISSION = Issue(132, Severity.LINT, Category.DOCUMENTATION)
+ val MULTIPLE_THREAD_ANNOTATIONS = Issue(133, Severity.LINT, Category.DOCUMENTATION)
+ val UNRESOLVED_CLASS = Issue(134, Severity.LINT, Category.DOCUMENTATION)
+ val INVALID_NULL_CONVERSION = Issue(135, Severity.ERROR, Category.COMPATIBILITY)
+ val PARAMETER_NAME_CHANGE = Issue(136, Severity.ERROR, Category.COMPATIBILITY)
+ val OPERATOR_REMOVAL = Issue(137, Severity.ERROR, Category.COMPATIBILITY)
+ val INFIX_REMOVAL = Issue(138, Severity.ERROR, Category.COMPATIBILITY)
+ val VARARG_REMOVAL = Issue(139, Severity.ERROR, Category.COMPATIBILITY)
+ val ADD_SEALED = Issue(140, Severity.ERROR, Category.COMPATIBILITY)
+ val ANNOTATION_EXTRACTION = Issue(146, Severity.ERROR)
+ val SUPERFLUOUS_PREFIX = Issue(147, Severity.WARNING)
+ val HIDDEN_TYPEDEF_CONSTANT = Issue(148, Severity.ERROR)
+ val EXPECTED_PLATFORM_TYPE = Issue(149, Severity.HIDDEN)
+ val INTERNAL_ERROR = Issue(150, Severity.ERROR)
+ val RETURNING_UNEXPECTED_CONSTANT = Issue(151, Severity.WARNING)
+ val DEPRECATED_OPTION = Issue(152, Severity.WARNING)
+ val BOTH_PACKAGE_INFO_AND_HTML = Issue(153, Severity.WARNING, Category.DOCUMENTATION)
+ // The plan is for this to be set as an error once (1) existing code is marked as @deprecated
+ // and (2) the principle is adopted by the API council
+ val REFERENCES_DEPRECATED = Issue(154, Severity.HIDDEN)
+ val UNHIDDEN_SYSTEM_API = Issue(155, Severity.ERROR)
+ val SHOWING_MEMBER_IN_HIDDEN_CLASS = Issue(156, Severity.ERROR)
+ val INVALID_NULLABILITY_ANNOTATION = Issue(157, Severity.ERROR)
+ val REFERENCES_HIDDEN = Issue(158, Severity.ERROR)
+ val IGNORING_SYMLINK = Issue(159, Severity.INFO)
+ val INVALID_NULLABILITY_ANNOTATION_WARNING = Issue(160, Severity.WARNING)
+ // The plan is for this to be set as an error once (1) existing code is marked as @deprecated
+ // and (2) the principle is adopted by the API council
+ val EXTENDS_DEPRECATED = Issue(161, Severity.HIDDEN)
+ val FORBIDDEN_TAG = Issue(162, Severity.ERROR)
+ val MISSING_COLUMN = Issue(163, Severity.WARNING, Category.DOCUMENTATION)
+ val INVALID_SYNTAX = Issue(164, Severity.ERROR)
+
+ // API lint
+ val START_WITH_LOWER = Issue(300, Severity.ERROR, Category.API_LINT, "S1")
+ val START_WITH_UPPER = Issue(301, Severity.ERROR, Category.API_LINT, "S1")
+ val ALL_UPPER = Issue(302, Severity.ERROR, Category.API_LINT, "C2")
+ val ACRONYM_NAME = Issue(303, Severity.WARNING, Category.API_LINT, "S1")
+ val ENUM = Issue(304, Severity.ERROR, Category.API_LINT, "F5")
+ val ENDS_WITH_IMPL = Issue(305, Severity.ERROR, Category.API_LINT)
+ val MIN_MAX_CONSTANT = Issue(306, Severity.WARNING, Category.API_LINT, "C8")
+ val COMPILE_TIME_CONSTANT = Issue(307, Severity.ERROR, Category.API_LINT)
+ val SINGULAR_CALLBACK = Issue(308, Severity.ERROR, Category.API_LINT, "L1")
+ val CALLBACK_NAME = Issue(309, Severity.WARNING, Category.API_LINT, "L1")
+ val CALLBACK_INTERFACE = Issue(310, Severity.ERROR, Category.API_LINT, "CL3")
+ val CALLBACK_METHOD_NAME = Issue(311, Severity.ERROR, Category.API_LINT, "L1")
+ val LISTENER_INTERFACE = Issue(312, Severity.ERROR, Category.API_LINT, "L1")
+ val SINGLE_METHOD_INTERFACE = Issue(313, Severity.ERROR, Category.API_LINT, "L1")
+ val INTENT_NAME = Issue(314, Severity.ERROR, Category.API_LINT, "C3")
+ val ACTION_VALUE = Issue(315, Severity.ERROR, Category.API_LINT, "C4")
+ val EQUALS_AND_HASH_CODE = Issue(316, Severity.ERROR, Category.API_LINT, "M8")
+ val PARCEL_CREATOR = Issue(317, Severity.ERROR, Category.API_LINT, "FW3")
+ val PARCEL_NOT_FINAL = Issue(318, Severity.ERROR, Category.API_LINT, "FW8")
+ val PARCEL_CONSTRUCTOR = Issue(319, Severity.ERROR, Category.API_LINT, "FW3")
+ val PROTECTED_MEMBER = Issue(320, Severity.ERROR, Category.API_LINT, "M7")
+ val PAIRED_REGISTRATION = Issue(321, Severity.ERROR, Category.API_LINT, "L2")
+ val REGISTRATION_NAME = Issue(322, Severity.ERROR, Category.API_LINT, "L3")
+ val VISIBLY_SYNCHRONIZED = Issue(323, Severity.ERROR, Category.API_LINT, "M5")
+ val INTENT_BUILDER_NAME = Issue(324, Severity.WARNING, Category.API_LINT, "FW1")
+ val CONTEXT_NAME_SUFFIX = Issue(325, Severity.ERROR, Category.API_LINT, "C4")
+ val INTERFACE_CONSTANT = Issue(326, Severity.ERROR, Category.API_LINT, "C4")
+ val ON_NAME_EXPECTED = Issue(327, Severity.WARNING, Category.API_LINT)
+ val TOP_LEVEL_BUILDER = Issue(328, Severity.WARNING, Category.API_LINT)
+ val MISSING_BUILD_METHOD = Issue(329, Severity.WARNING, Category.API_LINT)
+ val BUILDER_SET_STYLE = Issue(330, Severity.WARNING, Category.API_LINT)
+ val SETTER_RETURNS_THIS = Issue(331, Severity.WARNING, Category.API_LINT, "M4")
+ val RAW_AIDL = Issue(332, Severity.ERROR, Category.API_LINT)
+ val INTERNAL_CLASSES = Issue(333, Severity.ERROR, Category.API_LINT)
+ val PACKAGE_LAYERING = Issue(334, Severity.WARNING, Category.API_LINT, "FW6")
+ val GETTER_SETTER_NAMES = Issue(335, Severity.ERROR, Category.API_LINT, "M6")
+ val CONCRETE_COLLECTION = Issue(336, Severity.ERROR, Category.API_LINT, "CL2")
+ val OVERLAPPING_CONSTANTS = Issue(337, Severity.WARNING, Category.API_LINT, "C1")
+ val GENERIC_EXCEPTION = Issue(338, Severity.ERROR, Category.API_LINT, "S1")
+ val ILLEGAL_STATE_EXCEPTION = Issue(339, Severity.WARNING, Category.API_LINT, "S1")
+ val RETHROW_REMOTE_EXCEPTION = Issue(340, Severity.ERROR, Category.API_LINT, "FW9")
+ val MENTIONS_GOOGLE = Issue(341, Severity.ERROR, Category.API_LINT)
+ val HEAVY_BIT_SET = Issue(342, Severity.ERROR, Category.API_LINT)
+ val MANAGER_CONSTRUCTOR = Issue(343, Severity.ERROR, Category.API_LINT)
+ val MANAGER_LOOKUP = Issue(344, Severity.ERROR, Category.API_LINT)
+ val AUTO_BOXING = Issue(345, Severity.ERROR, Category.API_LINT, "M11")
+ val STATIC_UTILS = Issue(346, Severity.ERROR, Category.API_LINT)
+ val CONTEXT_FIRST = Issue(347, Severity.ERROR, Category.API_LINT, "M3")
+ val LISTENER_LAST = Issue(348, Severity.WARNING, Category.API_LINT, "M3")
+ val EXECUTOR_REGISTRATION = Issue(349, Severity.WARNING, Category.API_LINT, "L1")
+ val CONFIG_FIELD_NAME = Issue(350, Severity.ERROR, Category.API_LINT)
+ val RESOURCE_FIELD_NAME = Issue(351, Severity.ERROR, Category.API_LINT)
+ val RESOURCE_VALUE_FIELD_NAME = Issue(352, Severity.ERROR, Category.API_LINT, "C7")
+ val RESOURCE_STYLE_FIELD_NAME = Issue(353, Severity.ERROR, Category.API_LINT, "C7")
+ val STREAM_FILES = Issue(354, Severity.WARNING, Category.API_LINT, "M10")
+ val PARCELABLE_LIST = Issue(355, Severity.WARNING, Category.API_LINT)
+ val ABSTRACT_INNER = Issue(356, Severity.WARNING, Category.API_LINT)
+ val BANNED_THROW = Issue(358, Severity.ERROR, Category.API_LINT)
+ val EXTENDS_ERROR = Issue(359, Severity.ERROR, Category.API_LINT)
+ val EXCEPTION_NAME = Issue(360, Severity.ERROR, Category.API_LINT)
+ val METHOD_NAME_UNITS = Issue(361, Severity.ERROR, Category.API_LINT)
+ val FRACTION_FLOAT = Issue(362, Severity.ERROR, Category.API_LINT)
+ val PERCENTAGE_INT = Issue(363, Severity.ERROR, Category.API_LINT)
+ val NOT_CLOSEABLE = Issue(364, Severity.WARNING, Category.API_LINT)
+ val KOTLIN_OPERATOR = Issue(365, Severity.INFO, Category.API_LINT)
+ val ARRAY_RETURN = Issue(366, Severity.WARNING, Category.API_LINT)
+ val USER_HANDLE = Issue(367, Severity.WARNING, Category.API_LINT)
+ val USER_HANDLE_NAME = Issue(368, Severity.WARNING, Category.API_LINT)
+ val SERVICE_NAME = Issue(369, Severity.ERROR, Category.API_LINT, "C4")
+ val METHOD_NAME_TENSE = Issue(370, Severity.WARNING, Category.API_LINT)
+ val NO_CLONE = Issue(371, Severity.ERROR, Category.API_LINT)
+ val USE_ICU = Issue(372, Severity.WARNING, Category.API_LINT)
+ val USE_PARCEL_FILE_DESCRIPTOR = Issue(373, Severity.ERROR, Category.API_LINT, "FW11")
+ val NO_BYTE_OR_SHORT = Issue(374, Severity.WARNING, Category.API_LINT, "FW12")
+ val SINGLETON_CONSTRUCTOR = Issue(375, Severity.ERROR, Category.API_LINT)
+ val COMMON_ARGS_FIRST = Issue(376, Severity.WARNING, Category.API_LINT, "M2")
+ val CONSISTENT_ARGUMENT_ORDER = Issue(377, Severity.ERROR, Category.API_LINT, "M2")
+ val KOTLIN_KEYWORD = Issue(378, Severity.ERROR, Category.API_LINT) // Formerly 141
+ val UNIQUE_KOTLIN_OPERATOR = Issue(379, Severity.ERROR, Category.API_LINT)
+ val SAM_SHOULD_BE_LAST = Issue(380, Severity.WARNING, Category.API_LINT) // Formerly 142
+ val MISSING_JVMSTATIC = Issue(381, Severity.WARNING, Category.API_LINT) // Formerly 143
+ val DEFAULT_VALUE_CHANGE = Issue(382, Severity.ERROR, Category.API_LINT) // Formerly 144
+ val DOCUMENT_EXCEPTIONS = Issue(383, Severity.ERROR, Category.API_LINT) // Formerly 145
+ val FORBIDDEN_SUPER_CLASS = Issue(384, Severity.ERROR, Category.API_LINT)
+ val MISSING_NULLABILITY = Issue(385, Severity.ERROR, Category.API_LINT)
+ val MUTABLE_BARE_FIELD = Issue(386, Severity.ERROR, Category.API_LINT, "F2")
+ val INTERNAL_FIELD = Issue(387, Severity.ERROR, Category.API_LINT, "F2")
+ val PUBLIC_TYPEDEF = Issue(388, Severity.ERROR, Category.API_LINT, "FW15")
+ val ANDROID_URI = Issue(389, Severity.ERROR, Category.API_LINT, "FW14")
+ val BAD_FUTURE = Issue(390, Severity.ERROR, Category.API_LINT)
+
+ fun findIssueById(id: Int): Issue? {
+ return idToIssue[id]
+ }
+
+ fun findIssueById(id: String?): Issue? {
+ return nameToIssue[id]
+ }
+
+ fun findIssueByIdIgnoringCase(id: String): Issue? {
+ for (e in allIssues) {
+ if (id.equals(e.name, ignoreCase = true)) {
+ return e
+ }
+ }
+ return null
+ }
+
+ class Issue private constructor(
+ val code: Int,
+ val defaultLevel: Severity,
+ /**
+ * When `level` is set to [Severity.INHERIT], this is the parent from
+ * which the issue will inherit its level.
+ */
+ val parent: Issue?,
+ /** Applicable category */
+ val category: Category,
+ /** Related rule, if any */
+ val rule: String?,
+ /** Related explanation, if any */
+ val explanation: String?
+ ) {
+ /**
+ * The name of this issue
+ */
+ lateinit var name: String
+ internal set
+
+ internal constructor(
+ code: Int,
+ defaultLevel: Severity,
+ category: Category = Category.UNKNOWN
+ ) : this(code, defaultLevel, null, category, null, null)
+
+ internal constructor(
+ code: Int,
+ defaultLevel: Severity,
+ category: Category,
+ rule: String
+ ) : this(code, defaultLevel, null, category, rule, null)
+
+ internal constructor(
+ code: Int,
+ parent: Issue,
+ category: Category
+ ) : this(code, Severity.INHERIT, parent, category, null, null)
+
+ override fun toString(): String {
+ return "Issue #$code ($name)"
+ }
+
+ init {
+ allIssues.add(this)
+ }
+ }
+
+ enum class Category(val description: String, val ruleLink: String?) {
+ COMPATIBILITY("Compatibility", null),
+ DOCUMENTATION("Documentation", null),
+ API_LINT("API Lint", "go/android-api-guidelines"),
+ UNKNOWN("Default", null)
+ }
+
+ init { // Initialize issue names based on the field names
+ for (property in Issues::class.declaredMemberProperties) {
+ if (property.returnType.classifier != Issue::class) continue
+ val issue = property.getter.call(Issues) as Issue
+
+ issue.name = SdkVersionInfo.underlinesToCamelCase(property.name.toLowerCase(Locale.US))
+ nameToIssue[issue.name] = issue
+ idToIssue[issue.code] = issue
+ }
+ for (issue in allIssues) {
+ check(issue.name != "")
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/com/android/tools/metalava/model/ErrorConfiguration.kt b/src/main/java/com/android/tools/metalava/model/IssueConfiguration.kt
index bac176c..527e240 100644
--- a/src/main/java/com/android/tools/metalava/model/ErrorConfiguration.kt
+++ b/src/main/java/com/android/tools/metalava/model/IssueConfiguration.kt
@@ -19,15 +19,15 @@ package com.android.tools.metalava.model
import com.android.tools.metalava.Severity
import com.android.tools.metalava.doclava1.Issues
-/** An error configuration is a set of overrides for severities for various [Issues.Issue] */
-class ErrorConfiguration {
+/** An issue configuration is a set of overrides for severities for various [Issues.Issue] */
+class IssueConfiguration {
private val overrides = mutableMapOf<Issues.Issue, Severity>()
/** Returns the severity of the given issue */
fun getSeverity(issue: Issues.Issue): Severity {
overrides[issue]?.let { return it }
if (issue.defaultLevel == Severity.INHERIT) {
- return getSeverity(issue.parent)
+ return getSeverity(issue.parent!!)
}
return issue.defaultLevel
}
@@ -52,8 +52,8 @@ class ErrorConfiguration {
}
}
-/** Default error configuration: uses all the severities initialized in the [Issues] class */
-val defaultConfiguration = ErrorConfiguration()
+/** Default error configuration: uses the severities as configured in [Options] */
+val defaultConfiguration = IssueConfiguration()
/** Current configuration to apply when reporting errors */
var configuration = defaultConfiguration