CreateInfo.java revision 9c05b3972872d83c60bf5afe1a05f08c7753cd9a
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.Bitmap", 107 "android.graphics.Canvas", 108 "android.graphics.DashPathEffect", 109 "android.graphics.LinearGradient", 110 "android.graphics.Matrix", 111 "android.graphics.Paint", 112 "android.graphics.PathEffect", 113 "android.graphics.PorterDuffXfermode", 114 "android.graphics.RadialGradient", 115 "android.graphics.Shader", 116 "android.graphics.SweepGradient", 117 "android.graphics.Typeface", 118 "android.graphics.Xfermode", 119 "android.util.FloatMath", 120 }; 121 122 /** 123 * The list of methods to stub out. Each entry must be in the form 124 * "package.package.OuterClass$InnerClass#MethodName". 125 */ 126 private final static String[] OVERRIDDEN_METHODS = new String[] { 127 // TODO: remove once DelegateClass is working 128 "android.view.View#isInEditMode", 129 "android.content.res.Resources$Theme#obtainStyledAttributes", 130 }; 131 132 /** 133 * The list of classes to rename, must be an even list: the binary FQCN 134 * of class to replace followed by the new FQCN. 135 */ 136 private final static String[] RENAMED_CLASSES = 137 new String[] { 138 "android.graphics.BitmapFactory", "android.graphics._Original_BitmapFactory", 139 "android.graphics.Path", "android.graphics._Original_Path", 140 "android.os.ServiceManager", "android.os._Original_ServiceManager", 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 null }; // separator, for next class/methods list. 154} 155 156