< 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 >