171dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom/* 271dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * Licensed to the Apache Software Foundation (ASF) under one or more 371dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * contributor license agreements. See the NOTICE file distributed with 471dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * this work for additional information regarding copyright ownership. 571dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * The ASF licenses this file to You under the Apache License, Version 2.0 671dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * (the "License"); you may not use this file except in compliance with 771dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * the License. You may obtain a copy of the License at 871dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * 971dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * http://www.apache.org/licenses/LICENSE-2.0 1071dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * 1171dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * Unless required by applicable law or agreed to in writing, software 1271dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * distributed under the License is distributed on an "AS IS" BASIS, 1371dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1471dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * See the License for the specific language governing permissions and 1571dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * limitations under the License. 1671dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom */ 1771dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom/* 1871dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * Copyright (C) 2008 The Android Open Source Project 1971dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * 2071dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * Licensed under the Apache License, Version 2.0 (the "License"); 2171dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * you may not use this file except in compliance with the License. 2271dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * You may obtain a copy of the License at 2371dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * 2471dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * http://www.apache.org/licenses/LICENSE-2.0 2571dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * 2671dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * Unless required by applicable law or agreed to in writing, software 2771dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * distributed under the License is distributed on an "AS IS" BASIS, 2871dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 2971dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * See the License for the specific language governing permissions and 3071dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * limitations under the License. 3171dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom */ 3271dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom 3371dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrompackage java.lang.reflect; 3471dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom 3571dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstromimport com.android.dex.Dex; 3671dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom 3771dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom/** 3871dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * @hide 3971dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom */ 4071dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrompublic final class ArtField { 4171dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom 4271dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom private Class<?> declaringClass; 4371dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom /** Field access flags (modifiers) */ 4471dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom private int accessFlags; 4571dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom /** Index into DexFile's field ids */ 4671dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom private int fieldDexIndex; 4771dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom /** Offset of field in object or class */ 4871dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom private int offset; 4971dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom 5071dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom /** 5171dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom * Only created by art directly. 5271dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom */ 5371dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom private ArtField() {} 5471dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom 5571dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom public int getAccessFlags() { 5671dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom return accessFlags; 5771dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom } 5871dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom 5971dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom int getDexFieldIndex() { 6071dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom return fieldDexIndex; 6171dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom } 6271dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom 6371dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom int getOffset() { 6471dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom return offset; 6571dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom } 6671dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom 6771dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom public String getName() { 6871dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom if (fieldDexIndex == -1) { 6971dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom // Proxy classes have 1 synthesized static field with no valid dex index 7071dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom if (!declaringClass.isProxy()) { 7171dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom throw new AssertionError(); 7271dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom } 7371dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom return "throws"; 7471dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom } 7571dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom Dex dex = declaringClass.getDex(); 7671dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom int nameIndex = dex.nameIndexFromFieldIndex(fieldDexIndex); 7771dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom return declaringClass.getDexCacheString(dex, nameIndex); 7871dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom } 7971dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom 8071dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom Class<?> getDeclaringClass() { 8171dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom return declaringClass; 8271dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom } 8371dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom 8471dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom Class<?> getType() { 8571dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom if (fieldDexIndex == -1) { 8671dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom // The type of the synthesized field in a Proxy class is Class[][] 8771dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom if (!declaringClass.isProxy()) { 8871dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom throw new AssertionError(); 8971dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom } 9071dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom return Class[][].class; 9171dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom } 9271dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom Dex dex = declaringClass.getDex(); 9371dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom int typeIndex = dex.typeIndexFromFieldIndex(fieldDexIndex); 9471dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom return declaringClass.getDexCacheType(dex, typeIndex); 9571dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom } 9671dc4f7d4829335f7aba5414b43d16cd316ba22fBrian Carlstrom} 97