blob: 49f0e307f595f6fceeee0e76ceec72e348a52a01 [file] [log] [blame]
/*
* Copyright (C) 2020 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.idea.validator;
import com.android.tools.layoutlib.annotations.NotNull;
import com.android.tools.layoutlib.annotations.Nullable;
import java.util.EnumSet;
import java.util.HashSet;
import com.google.android.apps.common.testing.accessibility.framework.AccessibilityHierarchyCheck;
/**
* Data used for layout validation.
*/
public class ValidatorData {
/**
* Category of validation
*/
public enum Type {
ACCESSIBILITY,
RENDER,
INTERNAL_ERROR
}
/**
* Level of importance
*/
public enum Level {
ERROR,
WARNING,
INFO,
/** The test not ran or suppressed. */
VERBOSE,
}
/**
* Determine what types and levels of validation to run.
*/
public static class Policy {
@NotNull public final EnumSet<Type> mTypes;
@NotNull public final EnumSet<Level> mLevels;
@NotNull public final HashSet<AccessibilityHierarchyCheck> mChecks = new HashSet();
public Policy(@NotNull EnumSet<Type> types, @NotNull EnumSet<Level> levels) {
mTypes = types;
mLevels = levels;
}
}
/**
* Suggested fix to the user or to the studio.
*/
public static class Fix {
@NotNull public final String mFix;
public Fix(String fix) {
mFix = fix;
}
}
/**
* Issue describing the layout problem.
*/
public static class Issue {
@NotNull
public final String mCategory;
@NotNull
public final Type mType;
@NotNull
public final String mMsg;
@NotNull
public final Level mLevel;
@Nullable
public final Long mSrcId;
@Nullable
public final Fix mFix;
@NotNull
public final String mSourceClass;
@Nullable
public final String mHelpfulUrl;
private Issue(
@NotNull String category,
@NotNull Type type,
@NotNull String msg,
@NotNull Level level,
@Nullable Long srcId,
@Nullable Fix fix,
@NotNull String sourceClass,
@Nullable String helpfulUrl) {
mCategory = category;
mType = type;
mMsg = msg;
mLevel = level;
mSrcId = srcId;
mFix = fix;
mSourceClass = sourceClass;
mHelpfulUrl = helpfulUrl;
}
public static class IssueBuilder {
private String mCategory;
private Type mType = Type.ACCESSIBILITY;
private String mMsg;
private Level mLevel;
private Long mSrcId;
private Fix mFix;
private String mSourceClass;
private String mHelpfulUrl;
public IssueBuilder setCategory(String category) {
mCategory = category;
return this;
}
public IssueBuilder setType(Type type) {
mType = type;
return this;
}
public IssueBuilder setMsg(String msg) {
mMsg = msg;
return this;
}
public IssueBuilder setLevel(Level level) {
mLevel = level;
return this;
}
public IssueBuilder setSrcId(Long srcId) {
mSrcId = srcId;
return this;
}
public IssueBuilder setFix(Fix fix) {
mFix = fix;
return this;
}
public IssueBuilder setSourceClass(String sourceClass) {
mSourceClass = sourceClass;
return this;
}
public IssueBuilder setHelpfulUrl(String url) {
mHelpfulUrl = url;
return this;
}
public Issue build() {
assert(mCategory != null);
assert(mType != null);
assert(mMsg != null);
assert(mLevel != null);
assert(mSourceClass != null);
return new Issue(mCategory,
mType,
mMsg,
mLevel,
mSrcId,
mFix,
mSourceClass,
mHelpfulUrl);
}
}
}
}