19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.tools.layoutlib.create;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1991512f579e7a1bf91d23254471ee47d3a88d342fRaphaelimport com.android.tools.layoutlib.annotations.VisibleForTesting;
2091512f579e7a1bf91d23254471ee47d3a88d342fRaphaelimport com.android.tools.layoutlib.annotations.VisibleForTesting.Visibility;
2191512f579e7a1bf91d23254471ee47d3a88d342fRaphael
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.objectweb.asm.AnnotationVisitor;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.objectweb.asm.Attribute;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.objectweb.asm.ClassVisitor;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.objectweb.asm.FieldVisitor;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.objectweb.asm.MethodVisitor;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.objectweb.asm.Opcodes;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates if a class contains any native methods.
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
32f7270ba9083e5b0069f73fc88aec439ab439275bTor Norbyepublic class ClassHasNativeVisitor extends ClassVisitor {
33f7270ba9083e5b0069f73fc88aec439ab439275bTor Norbye    public ClassHasNativeVisitor() {
34f7270ba9083e5b0069f73fc88aec439ab439275bTor Norbye        super(Opcodes.ASM4);
35f7270ba9083e5b0069f73fc88aec439ab439275bTor Norbye    }
3691512f579e7a1bf91d23254471ee47d3a88d342fRaphael
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean mHasNativeMethods = false;
3891512f579e7a1bf91d23254471ee47d3a88d342fRaphael
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean hasNativeMethods() {
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mHasNativeMethods;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4391512f579e7a1bf91d23254471ee47d3a88d342fRaphael    @VisibleForTesting(visibility=Visibility.PRIVATE)
4491512f579e7a1bf91d23254471ee47d3a88d342fRaphael    protected void setHasNativeMethods(boolean hasNativeMethods, String methodName) {
4591512f579e7a1bf91d23254471ee47d3a88d342fRaphael        mHasNativeMethods = hasNativeMethods;
4691512f579e7a1bf91d23254471ee47d3a88d342fRaphael    }
4791512f579e7a1bf91d23254471ee47d3a88d342fRaphael
48f7270ba9083e5b0069f73fc88aec439ab439275bTor Norbye    @Override
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void visit(int version, int access, String name, String signature,
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String superName, String[] interfaces) {
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // pass
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
54f7270ba9083e5b0069f73fc88aec439ab439275bTor Norbye    @Override
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // pass
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
60f7270ba9083e5b0069f73fc88aec439ab439275bTor Norbye    @Override
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void visitAttribute(Attribute attr) {
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // pass
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
65f7270ba9083e5b0069f73fc88aec439ab439275bTor Norbye    @Override
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void visitEnd() {
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // pass
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
70f7270ba9083e5b0069f73fc88aec439ab439275bTor Norbye    @Override
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public FieldVisitor visitField(int access, String name, String desc,
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String signature, Object value) {
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // pass
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
77f7270ba9083e5b0069f73fc88aec439ab439275bTor Norbye    @Override
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void visitInnerClass(String name, String outerName,
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String innerName, int access) {
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // pass
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
83f7270ba9083e5b0069f73fc88aec439ab439275bTor Norbye    @Override
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public MethodVisitor visitMethod(int access, String name, String desc,
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String signature, String[] exceptions) {
8691512f579e7a1bf91d23254471ee47d3a88d342fRaphael        if ((access & Opcodes.ACC_NATIVE) != 0) {
8791512f579e7a1bf91d23254471ee47d3a88d342fRaphael            setHasNativeMethods(true, name);
8891512f579e7a1bf91d23254471ee47d3a88d342fRaphael        }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
92f7270ba9083e5b0069f73fc88aec439ab439275bTor Norbye    @Override
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void visitOuterClass(String owner, String name, String desc) {
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // pass
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
97f7270ba9083e5b0069f73fc88aec439ab439275bTor Norbye    @Override
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void visitSource(String source, String debug) {
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // pass
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
103