CreateInfo.java revision 4f291d33e14e62b3301acc056a82fe206c74835f
1/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
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
17package com.android.tools.layoutlib.create;
18
19import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
20
21/**
22 * Describes the work to be done by {@link AsmGenerator}.
23 */
24public final class CreateInfo implements ICreateInfo {
25
26    /**
27     * Returns the list of class from layoutlib_create to inject in layoutlib.
28     * The list can be empty but must not be null.
29     */
30    public Class<?>[] getInjectedClasses() {
31        return INJECTED_CLASSES;
32    }
33
34    /**
35     * Returns the list of methods to rewrite as delegates.
36     * The list can be empty but must not be null.
37     */
38    public String[] getDelegateMethods() {
39        return DELEGATE_METHODS;
40    }
41
42    /**
43     * Returns the list of classes on which to delegate all native methods.
44     * The list can be empty but must not be null.
45     */
46    public String[] getDelegateClassNatives() {
47        return DELEGATE_CLASS_NATIVES;
48    }
49
50    /**
51     * Returns The list of methods to stub out. Each entry must be in the form
52     * "package.package.OuterClass$InnerClass#MethodName".
53     * The list can be empty but must not be null.
54     */
55    public String[] getOverriddenMethods() {
56        return OVERRIDDEN_METHODS;
57    }
58
59    /**
60     * Returns the list of classes to rename, must be an even list: the binary FQCN
61     * of class to replace followed by the new FQCN.
62     * The list can be empty but must not be null.
63     */
64    public String[] getRenamedClasses() {
65        return RENAMED_CLASSES;
66    }
67
68    /**
69     * Returns the list of classes for which the methods returning them should be deleted.
70     * The array contains a list of null terminated section starting with the name of the class
71     * to rename in which the methods are deleted, followed by a list of return types identifying
72     * the methods to delete.
73     * The list can be empty but must not be null.
74     */
75    public String[] getDeleteReturns() {
76        return DELETE_RETURNS;
77    }
78
79    //-----
80
81    /**
82     * The list of class from layoutlib_create to inject in layoutlib.
83     */
84    private final static Class<?>[] INJECTED_CLASSES = new Class<?>[] {
85            OverrideMethod.class,
86            MethodListener.class,
87            MethodAdapter.class,
88            ICreateInfo.class,
89            CreateInfo.class,
90            LayoutlibDelegate.class
91        };
92
93    /**
94     * The list of methods to rewrite as delegates.
95     */
96    private final static String[] DELEGATE_METHODS = new String[] {
97        // TODO: comment out once DelegateClass is working
98        // "android.view.View#isInEditMode",
99        // "android.content.res.Resources$Theme#obtainStyledAttributes",
100    };
101
102    /**
103     * The list of classes on which to delegate all native methods.
104     */
105    private final static String[] DELEGATE_CLASS_NATIVES = new String[] {
106        "android.graphics.Matrix",
107    };
108
109    /**
110     * The list of methods to stub out. Each entry must be in the form
111     *  "package.package.OuterClass$InnerClass#MethodName".
112     */
113    private final static String[] OVERRIDDEN_METHODS = new String[] {
114        // TODO: remove once DelegateClass is working
115        "android.view.View#isInEditMode",
116        "android.content.res.Resources$Theme#obtainStyledAttributes",
117    };
118
119    /**
120     *  The list of classes to rename, must be an even list: the binary FQCN
121     *  of class to replace followed by the new FQCN.
122     */
123    private final static String[] RENAMED_CLASSES =
124        new String[] {
125            "android.graphics.Bitmap",              "android.graphics._Original_Bitmap",
126            "android.graphics.BitmapFactory",       "android.graphics._Original_BitmapFactory",
127            "android.graphics.BitmapShader",        "android.graphics._Original_BitmapShader",
128            "android.graphics.Canvas",              "android.graphics._Original_Canvas",
129            "android.graphics.ComposeShader",       "android.graphics._Original_ComposeShader",
130            "android.graphics.DashPathEffect",       "android.graphics._Original_DashPathEffect",
131            "android.graphics.LinearGradient",      "android.graphics._Original_LinearGradient",
132            "android.graphics.Paint",               "android.graphics._Original_Paint",
133            "android.graphics.Path",                "android.graphics._Original_Path",
134            "android.graphics.PorterDuffXfermode",  "android.graphics._Original_PorterDuffXfermode",
135            "android.graphics.RadialGradient",      "android.graphics._Original_RadialGradient",
136            "android.graphics.Shader",              "android.graphics._Original_Shader",
137            "android.graphics.SweepGradient",       "android.graphics._Original_SweepGradient",
138            "android.graphics.Typeface",            "android.graphics._Original_Typeface",
139            "android.os.ServiceManager",            "android.os._Original_ServiceManager",
140            "android.util.FloatMath",               "android.util._Original_FloatMath",
141            "android.view.SurfaceView",             "android.view._Original_SurfaceView",
142            "android.view.accessibility.AccessibilityManager", "android.view.accessibility._Original_AccessibilityManager",
143        };
144
145    /**
146     * List of classes for which the methods returning them should be deleted.
147     * The array contains a list of null terminated section starting with the name of the class
148     * to rename in which the methods are deleted, followed by a list of return types identifying
149     * the methods to delete.
150     */
151    private final static String[] DELETE_RETURNS =
152        new String[] {
153            "android.graphics.Paint",       // class to delete methods from
154            "android.graphics.Paint$Align", // list of type identifying methods to delete
155            "android.graphics.Paint$Style",
156            "android.graphics.Paint$Join",
157            "android.graphics.Paint$Cap",
158            "android.graphics.Paint$FontMetrics",
159            "android.graphics.Paint$FontMetricsInt",
160            null };                         // separator, for next class/methods list.
161}
162
163