CreateInfo.java revision 071dee288ca726c7c15754c2559403b9cbf950bd
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 "android.app.Fragment#instantiate", //(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;", 98 "android.view.View#isInEditMode", 99 // TODO: comment out once DelegateClass is working 100 // "android.content.res.Resources$Theme#obtainStyledAttributes", 101 }; 102 103 /** 104 * The list of classes on which to delegate all native methods. 105 */ 106 private final static String[] DELEGATE_CLASS_NATIVES = new String[] { 107 "android.graphics.Bitmap", 108 "android.graphics.Canvas", 109 "android.graphics.DashPathEffect", 110 "android.graphics.LinearGradient", 111 "android.graphics.Matrix", 112 "android.graphics.Paint", 113 "android.graphics.PathEffect", 114 "android.graphics.PorterDuffXfermode", 115 "android.graphics.RadialGradient", 116 "android.graphics.Shader", 117 "android.graphics.SweepGradient", 118 "android.graphics.Typeface", 119 "android.graphics.Xfermode", 120 "android.util.FloatMath", 121 }; 122 123 /** 124 * The list of methods to stub out. Each entry must be in the form 125 * "package.package.OuterClass$InnerClass#MethodName". 126 */ 127 private final static String[] OVERRIDDEN_METHODS = new String[] { 128 // TODO: remove once DelegateClass is working 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 "android.webkit.WebView", "android.webkit._Original_WebView", 144 }; 145 146 /** 147 * List of classes for which the methods returning them should be deleted. 148 * The array contains a list of null terminated section starting with the name of the class 149 * to rename in which the methods are deleted, followed by a list of return types identifying 150 * the methods to delete. 151 */ 152 private final static String[] DELETE_RETURNS = 153 new String[] { 154 null }; // separator, for next class/methods list. 155} 156 157