1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/*
2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Copyright (C) 2008 The Android Open Source Project
3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * you may not use this file except in compliance with the License.
6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * You may obtain a copy of the License at
7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Unless required by applicable law or agreed to in writing, software
11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * See the License for the specific language governing permissions and
14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * limitations under the License.
15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipackage com.android.tools.layoutlib.create;
18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.tools.layoutlib.annotations.VisibleForTesting;
20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.tools.layoutlib.annotations.VisibleForTesting.Visibility;
21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.objectweb.asm.AnnotationVisitor;
23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.objectweb.asm.Attribute;
24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.objectweb.asm.ClassVisitor;
25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.objectweb.asm.FieldVisitor;
26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.objectweb.asm.MethodVisitor;
27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.objectweb.asm.Opcodes;
28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/**
30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Indicates if a class contains any native methods.
31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipublic class ClassHasNativeVisitor extends ClassVisitor {
33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public ClassHasNativeVisitor() {
34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        super(Opcodes.ASM4);
35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    private boolean mHasNativeMethods = false;
38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public boolean hasNativeMethods() {
40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return mHasNativeMethods;
41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @VisibleForTesting(visibility=Visibility.PRIVATE)
44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    protected void setHasNativeMethods(boolean hasNativeMethods, String methodName) {
45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        mHasNativeMethods = hasNativeMethods;
46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public void visit(int version, int access, String name, String signature,
50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            String superName, String[] interfaces) {
51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // pass
52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // pass
57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return null;
58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public void visitAttribute(Attribute attr) {
62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // pass
63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public void visitEnd() {
67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // pass
68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public FieldVisitor visitField(int access, String name, String desc,
72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            String signature, Object value) {
73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // pass
74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return null;
75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public void visitInnerClass(String name, String outerName,
79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            String innerName, int access) {
80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // pass
81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public MethodVisitor visitMethod(int access, String name, String desc,
85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            String signature, String[] exceptions) {
86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        if ((access & Opcodes.ACC_NATIVE) != 0) {
87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski            setHasNativeMethods(true, name);
88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        }
89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return null;
90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public void visitOuterClass(String owner, String name, String desc) {
94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // pass
95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    public void visitSource(String source, String debug) {
99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // pass
100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
102282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
103