chore: Rewrite ClassContext with scala (#2260)
This commit is contained in:
parent
750bf235f1
commit
391b71a3d0
2 changed files with 11 additions and 43 deletions
|
|
@ -17,7 +17,7 @@ import scala.util.control.NonFatal
|
||||||
|
|
||||||
import org.apache.pekko
|
import org.apache.pekko
|
||||||
import pekko.annotation.InternalApi
|
import pekko.annotation.InternalApi
|
||||||
import pekko.util.{ ClassContext, OptionVal }
|
import pekko.util.OptionVal
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* INTERNAL API
|
* INTERNAL API
|
||||||
|
|
@ -26,6 +26,15 @@ import pekko.util.{ ClassContext, OptionVal }
|
||||||
private[pekko] object LoggerClass {
|
private[pekko] object LoggerClass {
|
||||||
|
|
||||||
private val defaultPrefixesToSkip = List("scala.runtime", "org.apache.pekko.actor.typed.internal")
|
private val defaultPrefixesToSkip = List("scala.runtime", "org.apache.pekko.actor.typed.internal")
|
||||||
|
private val OPTIONS: java.util.Set[StackWalker.Option] = java.util.Set.of(
|
||||||
|
StackWalker.Option.RETAIN_CLASS_REFERENCE, StackWalker.Option.SHOW_HIDDEN_FRAMES)
|
||||||
|
private val CLASS_STACK_WALKER: java.util.function.Function[
|
||||||
|
java.util.stream.Stream[StackWalker.StackFrame], Array[Class[_]]] =
|
||||||
|
(frames: java.util.stream.Stream[StackWalker.StackFrame]) =>
|
||||||
|
frames.map(frame => frame.getDeclaringClass)
|
||||||
|
.toArray[Class[_]]((size: Int) => new Array[Class[_]](size))
|
||||||
|
|
||||||
|
private def getClassStack: Array[Class[_]] = StackWalker.getInstance(OPTIONS).walk(CLASS_STACK_WALKER)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Try to extract a logger class from the call stack, if not possible the provided default is used
|
* Try to extract a logger class from the call stack, if not possible the provided default is used
|
||||||
|
|
@ -43,7 +52,7 @@ private[pekko] object LoggerClass {
|
||||||
loop(additionalPrefixesToSkip ::: defaultPrefixesToSkip)
|
loop(additionalPrefixesToSkip ::: defaultPrefixesToSkip)
|
||||||
}
|
}
|
||||||
|
|
||||||
val trace = ClassContext.getClassStack
|
val trace = getClassStack
|
||||||
var suitableClass: OptionVal[Class[_]] = OptionVal.None
|
var suitableClass: OptionVal[Class[_]] = OptionVal.None
|
||||||
var idx = 1 // skip this method/class and right away
|
var idx = 1 // skip this method/class and right away
|
||||||
while (suitableClass.isEmpty && idx < trace.length) {
|
while (suitableClass.isEmpty && idx < trace.length) {
|
||||||
|
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
/*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
||||||
* (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.apache.pekko.util;
|
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
import org.apache.pekko.annotation.InternalApi;
|
|
||||||
|
|
||||||
/** INTERNAL API */
|
|
||||||
@InternalApi
|
|
||||||
public final class ClassContext {
|
|
||||||
private ClassContext() {
|
|
||||||
throw new UnsupportedOperationException("Cannot instantiate utility class");
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final Set<StackWalker.Option> OPTIONS =
|
|
||||||
Set.of(StackWalker.Option.RETAIN_CLASS_REFERENCE, StackWalker.Option.SHOW_HIDDEN_FRAMES);
|
|
||||||
|
|
||||||
private static final Function<Stream<StackWalker.StackFrame>, Class<?>[]> CLASS_STACK_WALKER =
|
|
||||||
frames -> frames.map(StackWalker.StackFrame::getDeclaringClass).toArray(Class<?>[]::new);
|
|
||||||
|
|
||||||
public static Class<?>[] getClassStack() {
|
|
||||||
return StackWalker.getInstance(OPTIONS).walk(CLASS_STACK_WALKER);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue