178f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier/* 278f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier * Copyright (C) 2014 The Android Open Source Project 378f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier * 478f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier * Licensed under the Apache License, Version 2.0 (the "License"); 578f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier * you may not use this file except in compliance with the License. 678f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier * You may obtain a copy of the License at 778f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier * 878f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier * http://www.apache.org/licenses/LICENSE-2.0 978f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier * 1078f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier * Unless required by applicable law or agreed to in writing, software 1178f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier * distributed under the License is distributed on an "AS IS" BASIS, 1278f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1378f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier * See the License for the specific language governing permissions and 1478f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier * limitations under the License. 1578f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier */ 1678f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier 17277ccbd200ea43590dfc06a93ae184a765327ad0Andreas Gampe#include "java_lang_ref_Reference.h" 18277ccbd200ea43590dfc06a93ae184a765327ad0Andreas Gampe 1978f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier#include "gc/heap.h" 2078f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier#include "gc/reference_processor.h" 2178f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier#include "jni_internal.h" 2278f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier#include "mirror/object-inl.h" 2378f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier#include "mirror/reference-inl.h" 2478f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier#include "scoped_fast_native_object_access.h" 2578f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier 2678f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartiernamespace art { 2778f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier 28cd48f2d86197d4fe87cc88077bc4af5ba66e5295Mathieu Chartierstatic jobject Reference_getReferent(JNIEnv* env, jobject javaThis) { 2978f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier ScopedFastNativeObjectAccess soa(env); 3078f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier mirror::Reference* const ref = soa.Decode<mirror::Reference*>(javaThis); 3178f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier mirror::Object* const referent = 3278f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier Runtime::Current()->GetHeap()->GetReferenceProcessor()->GetReferent(soa.Self(), ref); 3378f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier return soa.AddLocalReference<jobject>(referent); 3478f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier} 3578f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier 3678f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartierstatic JNINativeMethod gMethods[] = { 37cd48f2d86197d4fe87cc88077bc4af5ba66e5295Mathieu Chartier NATIVE_METHOD(Reference, getReferent, "!()Ljava/lang/Object;"), 3878f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier}; 3978f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier 4078f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartiervoid register_java_lang_ref_Reference(JNIEnv* env) { 4178f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier REGISTER_NATIVE_METHODS("java/lang/ref/Reference"); 4278f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier} 4378f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier 4478f7b4c04ab6e8b5581921bc95b67a9beee1c246Mathieu Chartier} // namespace art 45