1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Eclipse Public License, Version 1.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.eclipse.org/org/documents/epl-v10.php 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.ide.common.api; 18 19 import com.android.annotations.NonNull; 20 import com.android.annotations.Nullable; 21 import com.android.resources.ResourceType; 22 import com.google.common.annotations.Beta; 23 24 import java.util.EnumSet; 25 26 /** 27 * Information about an attribute as gathered from the attrs.xml file where 28 * the attribute was declared. This must include a format (string, reference, float, etc.), 29 * possible flag or enum values, whether it's deprecated and its javadoc. 30 * <p> 31 * <b>NOTE: This is not a public or final API; if you rely on this be prepared 32 * to adjust your code for the next tools release.</b> 33 * </p> 34 */ 35 @Beta 36 public interface IAttributeInfo { 37 38 /** An attribute format, e.g. string, reference, float, etc. */ 39 public enum Format { 40 STRING, 41 BOOLEAN, 42 INTEGER, 43 FLOAT, 44 COLOR, 45 DIMENSION, 46 FRACTION, 47 ENUM, 48 FLAG, 49 REFERENCE; 50 51 public static final EnumSet<Format> NONE = EnumSet.noneOf(Format.class); 52 public static final EnumSet<Format> FLAG_SET = EnumSet.of(FLAG); 53 public static final EnumSet<Format> ENUM_SET = EnumSet.of(ENUM); 54 public static final EnumSet<Format> COLOR_SET = EnumSet.of(COLOR); 55 public static final EnumSet<Format> STRING_SET = EnumSet.of(STRING); 56 public static final EnumSet<Format> BOOLEAN_SET = EnumSet.of(BOOLEAN); 57 public static final EnumSet<Format> INTEGER_SET = EnumSet.of(INTEGER); 58 public static final EnumSet<Format> FLOAT_SET = EnumSet.of(FLOAT); 59 public static final EnumSet<Format> DIMENSION_SET = EnumSet.of(DIMENSION); 60 public static final EnumSet<Format> REFERENCE_SET = EnumSet.of(REFERENCE); 61 62 /** 63 * Returns an EnumSet containing only this format (which should not be 64 * modified by the client) 65 * 66 * @return a new enum set containing exactly this format 67 */ 68 @NonNull 69 public EnumSet<Format> asSet() { 70 switch (this) { 71 case BOOLEAN: 72 return BOOLEAN_SET; 73 case COLOR: 74 return COLOR_SET; 75 case DIMENSION: 76 return DIMENSION_SET; 77 case ENUM: 78 return ENUM_SET; 79 case FLAG: 80 return FLAG_SET; 81 case FLOAT: 82 return FLOAT_SET; 83 case INTEGER: 84 return INTEGER_SET; 85 case STRING: 86 return STRING_SET; 87 case REFERENCE: 88 return REFERENCE_SET; 89 case FRACTION: 90 default: 91 return EnumSet.of(this); 92 } 93 } 94 95 /** Returns the corresponding resource type for this attribute info, 96 * or null if there is no known or corresponding resource type (such as for 97 * enums and flags) 98 * 99 * @return the corresponding resource type, or null 100 */ 101 @Nullable 102 public ResourceType getResourceType() { 103 switch (this) { 104 case STRING: 105 return ResourceType.STRING; 106 case BOOLEAN: 107 return ResourceType.BOOL; 108 case COLOR: 109 return ResourceType.COLOR; 110 case DIMENSION: 111 return ResourceType.DIMEN; 112 case FRACTION: 113 return ResourceType.FRACTION; 114 case INTEGER: 115 return ResourceType.INTEGER; 116 117 // No direct corresponding resource type 118 case ENUM: 119 case FLAG: 120 case FLOAT: 121 case REFERENCE: 122 return null; 123 } 124 125 return null; 126 } 127 } 128 129 /** Returns the XML Name of the attribute */ 130 @NonNull 131 public String getName(); 132 133 /** Returns the formats of the attribute. Cannot be null. 134 * Should have at least one format. */ 135 @NonNull 136 public EnumSet<Format> getFormats(); 137 138 /** Returns the values for enums. null for other types. */ 139 @Nullable 140 public String[] getEnumValues(); 141 142 /** Returns the values for flags. null for other types. */ 143 @Nullable 144 public String[] getFlagValues(); 145 146 /** Returns a short javadoc, .i.e. the first sentence. */ 147 @NonNull 148 public String getJavaDoc(); 149 150 /** Returns the documentation for deprecated attributes. Null if not deprecated. */ 151 @Nullable 152 public String getDeprecatedDoc(); 153 154 /** Returns the fully qualified class name of the view defining this attribute */ 155 @NonNull 156 public String getDefinedBy(); 157 } 158