aboutsummaryrefslogtreecommitdiffstats
path: root/rule_api/src/com/android/ide/common/api/IAttributeInfo.java
blob: 997eeb42196ae9a8d1087685ba67471158f15062 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/*
 * 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. */
    public 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
    public String getName();

    /** Returns the formats of the attribute. Cannot be null.
     *  Should have at least one format. */
    @NonNull
    public EnumSet<Format> getFormats();

    /** Returns the values for enums. null for other types. */
    @Nullable
    public String[] getEnumValues();

    /** Returns the values for flags. null for other types. */
    @Nullable
    public String[] getFlagValues();

    /** Returns a short javadoc, .i.e. the first sentence. */
    @NonNull
    public String getJavaDoc();

    /** Returns the documentation for deprecated attributes. Null if not deprecated. */
    @Nullable
    public String getDeprecatedDoc();

    /** Returns the fully qualified class name of the view defining this attribute */
    @NonNull
    public String getDefinedBy();
}