< prev index next >
src/java.base/share/classes/java/lang/StackFrameInfo.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 36,89 ****
SharedSecrets.getJavaLangInvokeAccess();
// Footprint improvement: MemberName::clazz can replace
// StackFrameInfo::declaringClass.
! private final StackWalker walker;
! private final Class<?> declaringClass;
private final Object memberName;
private final short bci;
private volatile StackTraceElement ste;
/*
* Create StackFrameInfo for StackFrameTraverser and LiveStackFrameTraverser
* to use
*/
StackFrameInfo(StackWalker walker) {
! this.walker = walker;
! this.declaringClass = null;
this.bci = -1;
this.memberName = JLIA.newMemberName();
}
// package-private called by StackStreamFactory to skip
// the capability check
Class<?> declaringClass() {
! return declaringClass;
}
// ----- implementation of StackFrame methods
@Override
public String getClassName() {
! return declaringClass.getName();
}
@Override
public Class<?> getDeclaringClass() {
! walker.ensureAccessEnabled(RETAIN_CLASS_REFERENCE);
! return declaringClass;
}
@Override
public String getMethodName() {
return JLIA.getName(memberName);
}
@Override
public MethodType getMethodType() {
! walker.ensureAccessEnabled(RETAIN_CLASS_REFERENCE);
return JLIA.getMethodType(memberName);
}
@Override
public String getDescriptor() {
--- 36,87 ----
SharedSecrets.getJavaLangInvokeAccess();
// Footprint improvement: MemberName::clazz can replace
// StackFrameInfo::declaringClass.
! private final boolean retainClassRef;
private final Object memberName;
private final short bci;
private volatile StackTraceElement ste;
/*
* Create StackFrameInfo for StackFrameTraverser and LiveStackFrameTraverser
* to use
*/
StackFrameInfo(StackWalker walker) {
! this.retainClassRef = walker.retainClassRef;
this.bci = -1;
this.memberName = JLIA.newMemberName();
}
// package-private called by StackStreamFactory to skip
// the capability check
Class<?> declaringClass() {
! return JLIA.getDeclaringClass(memberName);
}
// ----- implementation of StackFrame methods
@Override
public String getClassName() {
! return declaringClass().getName();
}
@Override
public Class<?> getDeclaringClass() {
! ensureRetainClassRefEnabled();
! return declaringClass();
}
@Override
public String getMethodName() {
return JLIA.getName(memberName);
}
@Override
public MethodType getMethodType() {
! ensureRetainClassRefEnabled();
return JLIA.getMethodType(memberName);
}
@Override
public String getDescriptor() {
*** 135,140 ****
--- 133,144 ----
}
}
}
return s;
}
+
+ private void ensureRetainClassRefEnabled() {
+ if (!retainClassRef) {
+ throw new UnsupportedOperationException("No access to RETAIN_CLASS_REFERENCE");
+ }
+ }
}
< prev index next >