JEP 259 предоставляет эффективный стандартный API для стекирования, который позволяет легко фильтровать и ленивый доступ к информации в стеках. Перед API Stack-Walking обычными способами доступа к фреймам стека были:
Throwable::getStackTrace
иThread::getStackTrace
возвращать массив изStackTraceElement
объектов, которые содержат имя класса и имя метода каждого Элемент stack-trace.
SecurityManager::getClassContext
- защищенный метод, который позволяет подклассуSecurityManager
обращаться к контексту класса.JDK-internal
blockquote>sun.reflect.Reflection::getCallerClass
метод, который вы должны 't use anywayИспользование этих API обычно неэффективно:
Эти API требуют, чтобы виртуальная машина охотно захватывала моментальный снимок всего стека, и они возвращаются информация, представляющая весь стек. Невозможно избежать затрат на изучение всех кадров, если вызывающий объект интересуется только несколькими кадрами в стеке.
blockquote>Чтобы найти класс непосредственного вызывающего, сначала получите a
StackWalker
:StackWalker walker = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);
Затем либо вызовите
getCallerClass()
:Class> callerClass = walker.getCallerClass();
, либо
walk
StackFrame
s и получите первое предыдущееStackFrame
:walker.walk(frames -> frames.map(StackWalker.StackFrame::getDeclaringClass).skip(1).findFirst());
Я только что выпустил плагин Xo для Angular, который призван стать основой для WordPress и Angular. Должны соответствовать всем вашим потребностям выше.
https://wordpress.org/plugins/xo-for-angular/
В настоящее время он находится в стадии бета-тестирования и будет признателен за любые отзывы!
Основные понятия :
Документация (работа в процессе): https://angularxo.io/
Плагин GitHub: https://github.com/WarriorRocker/angular -xo-core
Пример темы: https://github.com/WarriorRocker/angular-xo-material
Дайте мне знать, что вы думаете, спасибо!