blob: a950634b4f3a4c580dd1cc59ae834bdc53fa08c8 [file] [log] [blame]
/*
* Copyright (C) 2011 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.lint.detector.api;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.google.common.annotations.Beta;
/**
* A category is a container for related issues.
* <p/>
* <b>NOTE: This is not a public or final API; if you rely on this be prepared
* to adjust your code for the next tools release.</b>
*/
@Beta
public final class Category implements Comparable<Category> {
private final String mName;
private final int mPriority;
private final Category mParent;
/**
* Creates a new {@link Category}.
*
* @param parent the name of a parent category, or null
* @param name the name of the category
* @param priority a sorting priority, with higher being more important
*/
private Category(
@Nullable Category parent,
@NonNull String name,
int priority) {
mParent = parent;
mName = name;
mPriority = priority;
}
/**
* Creates a new top level {@link Category} with the given sorting priority.
*
* @param name the name of the category
* @param priority a sorting priority, with higher being more important
* @return a new category
*/
@NonNull
public static Category create(@NonNull String name, int priority) {
return new Category(null, name, priority);
}
/**
* Creates a new top level {@link Category} with the given sorting priority.
*
* @param parent the name of a parent category, or null
* @param name the name of the category
* @param priority a sorting priority, with higher being more important
* @return a new category
*/
@NonNull
public static Category create(@Nullable Category parent, @NonNull String name, int priority) {
return new Category(parent, name, priority);
}
/**
* Returns the parent category, or null if this is a top level category
*
* @return the parent category, or null if this is a top level category
*/
public Category getParent() {
return mParent;
}
/**
* Returns the name of this category
*
* @return the name of this category
*/
public String getName() {
return mName;
}
/**
* Returns a full name for this category. For a top level category, this is just
* the {@link #getName()} value, but for nested categories it will include the parent
* names as well.
*
* @return a full name for this category
*/
public String getFullName() {
if (mParent != null) {
return mParent.getFullName() + ':' + mName;
} else {
return mName;
}
}
@Override
public int compareTo(Category other) {
if (other.mPriority == mPriority) {
if (mParent == other) {
return 1;
} else if (other.mParent == this) {
return -1;
}
}
return other.mPriority - mPriority;
}
/** Issues related to running lint itself */
public static final Category LINT = create("Lint", 110);
/** Issues related to correctness */
public static final Category CORRECTNESS = create("Correctness", 100);
/** Issues related to security */
public static final Category SECURITY = create("Security", 90);
/** Issues related to performance */
public static final Category PERFORMANCE = create("Performance", 80);
/** Issues related to usability */
public static final Category USABILITY = create("Usability", 70);
/** Issues related to accessibility */
public static final Category A11Y = create("Accessibility", 60);
/** Issues related to internationalization */
public static final Category I18N = create("Internationalization", 50);
/** Issues related to right to left and bi-directional text support */
public static final Category RTL = create("Bi-directional Text", 40);
// Sub categories
/** Issues related to icons */
public static final Category ICONS = create(USABILITY, "Icons", 73);
/** Issues related to typography */
public static final Category TYPOGRAPHY = create(USABILITY, "Typography", 76);
/** Issues related to messages/strings */
public static final Category MESSAGES = create(CORRECTNESS, "Messages", 95);
}