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