1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "abstract_method.h"
18 
19 #include "art_method-inl.h"
20 
21 namespace art {
22 namespace mirror {
23 
CreateFromArtMethod(ArtMethod * method)24 bool AbstractMethod::CreateFromArtMethod(ArtMethod* method) {
25   auto* interface_method = method->GetInterfaceMethodIfProxy(sizeof(void*));
26   SetArtMethod(method);
27   SetFieldObject<false>(DeclaringClassOffset(), method->GetDeclaringClass());
28   SetFieldObject<false>(
29       DeclaringClassOfOverriddenMethodOffset(), interface_method->GetDeclaringClass());
30   SetField32<false>(AccessFlagsOffset(), method->GetAccessFlags());
31   SetField32<false>(DexMethodIndexOffset(), method->GetDexMethodIndex());
32   return true;
33 }
34 
GetArtMethod()35 ArtMethod* AbstractMethod::GetArtMethod() {
36   return reinterpret_cast<ArtMethod*>(GetField64(ArtMethodOffset()));
37 }
38 
SetArtMethod(ArtMethod * method)39 void AbstractMethod::SetArtMethod(ArtMethod* method) {
40   SetField64<false>(ArtMethodOffset(), reinterpret_cast<uint64_t>(method));
41 }
42 
GetDeclaringClass()43 mirror::Class* AbstractMethod::GetDeclaringClass() {
44   return GetFieldObject<mirror::Class>(DeclaringClassOffset());
45 }
46 
47 }  // namespace mirror
48 }  // namespace art
49