/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php * * 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.ide.common.api; import com.android.annotations.NonNull; import com.android.annotations.Nullable; import com.android.resources.ResourceType; import com.google.common.annotations.Beta; import java.util.EnumSet; /** * Information about an attribute as gathered from the attrs.xml file where * the attribute was declared. This must include a format (string, reference, float, etc.), * possible flag or enum values, whether it's deprecated and its javadoc. * <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> * </p> */ @Beta public interface IAttributeInfo { /** An attribute format, e.g. string, reference, float, etc. */ enum Format { STRING, BOOLEAN, INTEGER, FLOAT, COLOR, DIMENSION, FRACTION, ENUM, FLAG, REFERENCE; public static final EnumSet<Format> NONE = EnumSet.noneOf(Format.class); public static final EnumSet<Format> FLAG_SET = EnumSet.of(FLAG); public static final EnumSet<Format> ENUM_SET = EnumSet.of(ENUM); public static final EnumSet<Format> COLOR_SET = EnumSet.of(COLOR); public static final EnumSet<Format> STRING_SET = EnumSet.of(STRING); public static final EnumSet<Format> BOOLEAN_SET = EnumSet.of(BOOLEAN); public static final EnumSet<Format> INTEGER_SET = EnumSet.of(INTEGER); public static final EnumSet<Format> FLOAT_SET = EnumSet.of(FLOAT); public static final EnumSet<Format> DIMENSION_SET = EnumSet.of(DIMENSION); public static final EnumSet<Format> REFERENCE_SET = EnumSet.of(REFERENCE); /** * Returns an EnumSet containing only this format (which should not be * modified by the client) * * @return a new enum set containing exactly this format */ @NonNull public EnumSet<Format> asSet() { switch (this) { case BOOLEAN: return BOOLEAN_SET; case COLOR: return COLOR_SET; case DIMENSION: return DIMENSION_SET; case ENUM: return ENUM_SET; case FLAG: return FLAG_SET; case FLOAT: return FLOAT_SET; case INTEGER: return INTEGER_SET; case STRING: return STRING_SET; case REFERENCE: return REFERENCE_SET; case FRACTION: default: return EnumSet.of(this); } } /** Returns the corresponding resource type for this attribute info, * or null if there is no known or corresponding resource type (such as for * enums and flags) * * @return the corresponding resource type, or null */ @Nullable public ResourceType getResourceType() { switch (this) { case STRING: return ResourceType.STRING; case BOOLEAN: return ResourceType.BOOL; case COLOR: return ResourceType.COLOR; case DIMENSION: return ResourceType.DIMEN; case FRACTION: return ResourceType.FRACTION; case INTEGER: return ResourceType.INTEGER; // No direct corresponding resource type case ENUM: case FLAG: case FLOAT: case REFERENCE: return null; } return null; } } /** Returns the XML Name of the attribute */ @NonNull String getName(); /** Returns the formats of the attribute. Cannot be null. * Should have at least one format. */ @NonNull EnumSet<Format> getFormats(); /** Returns the values for enums. null for other types. */ @Nullable String[] getEnumValues(); /** Returns the values for flags. null for other types. */ @Nullable String[] getFlagValues(); /** Returns a short javadoc, .i.e. the first sentence. */ @NonNull String getJavaDoc(); /** Returns the documentation for deprecated attributes. Null if not deprecated. */ @Nullable String getDeprecatedDoc(); /** Returns the fully qualified class name of the view defining this attribute */ @NonNull String getDefinedBy(); }