/** Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*********************/package java.lang;import jdk.internal.misc.JavaLangInvokeAccess;import jdk.internal.misc.SharedSecrets;import static java.lang.StackWalker.Option.*;import java.lang.StackWalker.StackFrame;import java.lang.invoke.MethodType;class StackFrameInfo implements StackFrame {private final byte RETAIN_CLASS_REF = 0x01;private final static JavaLangInvokeAccess JLIA =SharedSecrets.getJavaLangInvokeAccess();private final byte flags;private final Object memberName;private final short bci;private volatile StackTraceElement ste;/** Create StackFrameInfo for StackFrameTraverser and LiveStackFrameTraverser* to use*/StackFrameInfo(StackWalker walker) {this.flags = walker.retainClassRef ? RETAIN_CLASS_REF : 0;this.bci = -1;this.memberName = JLIA.newMemberName();}// package-private called by StackStreamFactory to skip// the capability checkClass<?> declaringClass() {return JLIA.getDeclaringClass(memberName);}// ----- implementation of StackFrame methods@Overridepublic String getClassName() {return declaringClass().getName();}@Overridepublic Class<?> getDeclaringClass() {ensureRetainClassRefEnabled();return declaringClass();}@Overridepublic String getMethodName() {return JLIA.getName(memberName);}@Overridepublic MethodType getMethodType() {ensureRetainClassRefEnabled();return JLIA.getMethodType(memberName);}@Overridepublic String getDescriptor() {return JLIA.getMethodDescriptor(memberName);}@Overridepublic int getByteCodeIndex() {// bci not available for native methodsif (isNativeMethod())return -1;return bci;}@Overridepublic String getFileName() {return toStackTraceElement().getFileName();}@Overridepublic int getLineNumber() {// line number not available for native methodsif (isNativeMethod())return -2;return toStackTraceElement().getLineNumber();}@Overridepublic boolean isNativeMethod() {return JLIA.isNative(memberName);}@Overridepublic String toString() {return toStackTraceElement().toString();}@Overridepublic StackTraceElement toStackTraceElement() {StackTraceElement s = ste;if (s == null) {synchronized (this) {s = ste;if (s == null) {ste = s = StackTraceElement.of(this);}}}return s;}private void ensureRetainClassRefEnabled() {if ((flags & RETAIN_CLASS_REF) == 0) {throw new UnsupportedOperationException("No access to RETAIN_CLASS_REFERENCE");}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。