Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a4fe29c authored by Xavier Ducrohet's avatar Xavier Ducrohet
Browse files

LayoutLib: Annotate the custom delegate methods.

Every method implementing a delegate needed by the
layoutlib_create bytecode modification must now be
annotated with LayoutlibDelegate.

The methods in the original source code that are delegated
are already automatically annotated. Now with the implementations
being annotated we can do bi-directional tests and find not
only missing implementations but also dead obsolete code.

This will be useful when backporting to earlier versions of
Android, or when native (non public) method disappear. In fact,
the new test detected one such method in Shader.

Change-Id: I491708b68ac2736ca5669aa86cd5e930a00f9db3
parent e18457fb
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package android.animation;
package android.animation;


import com.android.layoutlib.bridge.impl.DelegateManager;
import com.android.layoutlib.bridge.impl.DelegateManager;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;


/**
/**
 * Delegate implementing the native methods of android.animation.PropertyValuesHolder
 * Delegate implementing the native methods of android.animation.PropertyValuesHolder
@@ -34,20 +35,24 @@ import com.android.layoutlib.bridge.impl.DelegateManager;
 */
 */
/*package*/ class PropertyValuesHolder_Delegate {
/*package*/ class PropertyValuesHolder_Delegate {


    @LayoutlibDelegate
    /*package*/ static int nGetIntMethod(Class<?> targetClass, String methodName) {
    /*package*/ static int nGetIntMethod(Class<?> targetClass, String methodName) {
        // return 0 to force PropertyValuesHolder to use Java reflection.
        // return 0 to force PropertyValuesHolder to use Java reflection.
        return 0;
        return 0;
    }
    }


    @LayoutlibDelegate
    /*package*/ static int nGetFloatMethod(Class<?> targetClass, String methodName) {
    /*package*/ static int nGetFloatMethod(Class<?> targetClass, String methodName) {
        // return 0 to force PropertyValuesHolder to use Java reflection.
        // return 0 to force PropertyValuesHolder to use Java reflection.
        return 0;
        return 0;
    }
    }


    @LayoutlibDelegate
    /*package*/ static void nCallIntMethod(Object target, int methodID, int arg) {
    /*package*/ static void nCallIntMethod(Object target, int methodID, int arg) {
        // do nothing
        // do nothing
    }
    }


    @LayoutlibDelegate
    /*package*/ static void nCallFloatMethod(Object target, int methodID, float arg) {
    /*package*/ static void nCallFloatMethod(Object target, int methodID, float arg) {
        // do nothing
        // do nothing
    }
    }
+3 −0
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package android.app;
package android.app;


import com.android.ide.common.rendering.api.IProjectCallback;
import com.android.ide.common.rendering.api.IProjectCallback;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;


import android.content.Context;
import android.content.Context;
import android.os.Bundle;
import android.os.Bundle;
@@ -48,6 +49,7 @@ public class Fragment_Delegate {
     * Like {@link #instantiate(Context, String, Bundle)} but with a null
     * Like {@link #instantiate(Context, String, Bundle)} but with a null
     * argument Bundle.
     * argument Bundle.
     */
     */
    @LayoutlibDelegate
    /*package*/ static Fragment instantiate(Context context, String fname) {
    /*package*/ static Fragment instantiate(Context context, String fname) {
        return instantiate(context, fname, null);
        return instantiate(context, fname, null);
    }
    }
@@ -66,6 +68,7 @@ public class Fragment_Delegate {
     * the given fragment class.  This is a runtime exception; it is not
     * the given fragment class.  This is a runtime exception; it is not
     * normally expected to happen.
     * normally expected to happen.
     */
     */
    @LayoutlibDelegate
    /*package*/ static Fragment instantiate(Context context, String fname, Bundle args) {
    /*package*/ static Fragment instantiate(Context context, String fname, Bundle args) {
        try {
        try {
            if (sProjectCallback != null) {
            if (sProjectCallback != null) {
+5 −0
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package android.content.res;
package android.content.res;


import com.android.layoutlib.bridge.impl.RenderSessionImpl;
import com.android.layoutlib.bridge.impl.RenderSessionImpl;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;


import android.content.res.Resources.NotFoundException;
import android.content.res.Resources.NotFoundException;
import android.content.res.Resources.Theme;
import android.content.res.Resources.Theme;
@@ -32,12 +33,14 @@ import android.util.TypedValue;
 */
 */
public class Resources_Theme_Delegate {
public class Resources_Theme_Delegate {


    @LayoutlibDelegate
    /*package*/ static TypedArray obtainStyledAttributes(
    /*package*/ static TypedArray obtainStyledAttributes(
            Resources thisResources, Theme thisTheme,
            Resources thisResources, Theme thisTheme,
            int[] attrs) {
            int[] attrs) {
        return RenderSessionImpl.getCurrentContext().obtainStyledAttributes(attrs);
        return RenderSessionImpl.getCurrentContext().obtainStyledAttributes(attrs);
    }
    }


    @LayoutlibDelegate
    /*package*/ static TypedArray obtainStyledAttributes(
    /*package*/ static TypedArray obtainStyledAttributes(
            Resources thisResources, Theme thisTheme,
            Resources thisResources, Theme thisTheme,
            int resid, int[] attrs)
            int resid, int[] attrs)
@@ -45,6 +48,7 @@ public class Resources_Theme_Delegate {
        return RenderSessionImpl.getCurrentContext().obtainStyledAttributes(resid, attrs);
        return RenderSessionImpl.getCurrentContext().obtainStyledAttributes(resid, attrs);
    }
    }


    @LayoutlibDelegate
    /*package*/ static TypedArray obtainStyledAttributes(
    /*package*/ static TypedArray obtainStyledAttributes(
            Resources thisResources, Theme thisTheme,
            Resources thisResources, Theme thisTheme,
            AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) {
            AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) {
@@ -52,6 +56,7 @@ public class Resources_Theme_Delegate {
                set, attrs, defStyleAttr, defStyleRes);
                set, attrs, defStyleAttr, defStyleRes);
    }
    }


    @LayoutlibDelegate
    /*package*/ static boolean resolveAttribute(
    /*package*/ static boolean resolveAttribute(
            Resources thisResources, Theme thisTheme,
            Resources thisResources, Theme thisTheme,
            int resid, TypedValue outValue,
            int resid, TypedValue outValue,
+2 −0
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package android.graphics;
package android.graphics;


import com.android.layoutlib.bridge.impl.DelegateManager;
import com.android.layoutlib.bridge.impl.DelegateManager;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;


import java.awt.Composite;
import java.awt.Composite;


@@ -59,6 +60,7 @@ public class AvoidXfermode_Delegate extends Xfermode_Delegate {


    // ---- native methods ----
    // ---- native methods ----


    @LayoutlibDelegate
    /*package*/ static int nativeCreate(int opColor, int tolerance, int nativeMode) {
    /*package*/ static int nativeCreate(int opColor, int tolerance, int nativeMode) {
        AvoidXfermode_Delegate newDelegate = new AvoidXfermode_Delegate();
        AvoidXfermode_Delegate newDelegate = new AvoidXfermode_Delegate();
        return sManager.addDelegate(newDelegate);
        return sManager.addDelegate(newDelegate);
+9 −0
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@ import com.android.layoutlib.bridge.android.BridgeResources.NinePatchInputStream
import com.android.layoutlib.bridge.impl.DelegateManager;
import com.android.layoutlib.bridge.impl.DelegateManager;
import com.android.ninepatch.NinePatchChunk;
import com.android.ninepatch.NinePatchChunk;
import com.android.resources.Density;
import com.android.resources.Density;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;


import android.graphics.BitmapFactory.Options;
import android.graphics.BitmapFactory.Options;


@@ -42,6 +43,7 @@ import java.io.InputStream;


    // ------ Java delegates ------
    // ------ Java delegates ------


    @LayoutlibDelegate
    /*package*/ static Bitmap finishDecode(Bitmap bm, Rect outPadding, Options opts) {
    /*package*/ static Bitmap finishDecode(Bitmap bm, Rect outPadding, Options opts) {
        if (bm == null || opts == null) {
        if (bm == null || opts == null) {
            return bm;
            return bm;
@@ -82,10 +84,12 @@ import java.io.InputStream;


    // ------ Native Delegates ------
    // ------ Native Delegates ------


    @LayoutlibDelegate
    /*package*/ static void nativeSetDefaultConfig(int nativeConfig) {
    /*package*/ static void nativeSetDefaultConfig(int nativeConfig) {
        // pass
        // pass
    }
    }


    @LayoutlibDelegate
    /*package*/ static Bitmap nativeDecodeStream(InputStream is, byte[] storage,
    /*package*/ static Bitmap nativeDecodeStream(InputStream is, byte[] storage,
            Rect padding, Options opts) {
            Rect padding, Options opts) {
        Bitmap bm = null;
        Bitmap bm = null;
@@ -129,29 +133,34 @@ import java.io.InputStream;
        return bm;
        return bm;
    }
    }


    @LayoutlibDelegate
    /*package*/ static Bitmap nativeDecodeFileDescriptor(FileDescriptor fd,
    /*package*/ static Bitmap nativeDecodeFileDescriptor(FileDescriptor fd,
            Rect padding, Options opts) {
            Rect padding, Options opts) {
        opts.inBitmap = null;
        opts.inBitmap = null;
        return null;
        return null;
    }
    }


    @LayoutlibDelegate
    /*package*/ static Bitmap nativeDecodeAsset(int asset, Rect padding, Options opts) {
    /*package*/ static Bitmap nativeDecodeAsset(int asset, Rect padding, Options opts) {
        opts.inBitmap = null;
        opts.inBitmap = null;
        return null;
        return null;
    }
    }


    @LayoutlibDelegate
    /*package*/ static Bitmap nativeDecodeByteArray(byte[] data, int offset,
    /*package*/ static Bitmap nativeDecodeByteArray(byte[] data, int offset,
            int length, Options opts) {
            int length, Options opts) {
        opts.inBitmap = null;
        opts.inBitmap = null;
        return null;
        return null;
    }
    }


    @LayoutlibDelegate
    /*package*/ static byte[] nativeScaleNinePatch(byte[] chunk, float scale, Rect pad) {
    /*package*/ static byte[] nativeScaleNinePatch(byte[] chunk, float scale, Rect pad) {
        // don't scale for now. This should not be called anyway since we re-implement
        // don't scale for now. This should not be called anyway since we re-implement
        // BitmapFactory.finishDecode();
        // BitmapFactory.finishDecode();
        return chunk;
        return chunk;
    }
    }


    @LayoutlibDelegate
    /*package*/ static boolean nativeIsSeekable(FileDescriptor fd) {
    /*package*/ static boolean nativeIsSeekable(FileDescriptor fd) {
        return true;
        return true;
    }
    }
Loading