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