diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f6cb9858..3d61223af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ * 【core 】 BooleanUtil中重载歧义修正,修改了包装参数的方法名(issue#I1BSK8@Gitee) * 【core 】 XmlUtil增加xmlToBean和beanToXml方法 * 【db 】 设置全局忽略大小写DbUtil.setCaseInsensitiveGlobal(true)(issue#784@Github) +* 【core 】 增加CallerUtil.getCallerMethodName方法 +* 【core 】 Tree增加getParent方法,可以获取父节点 ### Bug修复 * 【core 】 修复TypeUtil无法获取泛型接口的泛型参数问题(issue#I1BRFI@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/caller/CallerUtil.java b/hutool-core/src/main/java/cn/hutool/core/lang/caller/CallerUtil.java index a8b084bb9..3aaa0414f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/caller/CallerUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/caller/CallerUtil.java @@ -58,6 +58,23 @@ public class CallerUtil { return INSTANCE.isCalledBy(clazz); } + /** + * 获取调用此方法的方法名 + * + * @param isFullName 是否返回全名,全名包括方法所在类的全路径名 + * @return 调用此方法的方法名 + * @since 5.2.4 + */ + public static String getCallerMethodName(boolean isFullName){ + final StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[2]; + final String methodName = stackTraceElement.getMethodName(); + if(false == isFullName){ + return methodName; + } + + return stackTraceElement.getClassName() + "." + methodName; + } + /** * 尝试创建{@link Caller}实现 * diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/caller/StackTraceCaller.java b/hutool-core/src/main/java/cn/hutool/core/lang/caller/StackTraceCaller.java index 422612fc2..acf1851ce 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/caller/StackTraceCaller.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/caller/StackTraceCaller.java @@ -16,7 +16,7 @@ public class StackTraceCaller implements Caller, Serializable { @Override public Class getCaller() { final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - if (null == stackTrace || (OFFSET + 1) >= stackTrace.length) { + if (OFFSET + 1 >= stackTrace.length) { return null; } final String className = stackTrace[OFFSET + 1].getClassName(); @@ -30,7 +30,7 @@ public class StackTraceCaller implements Caller, Serializable { @Override public Class getCallerCaller() { final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - if (null == stackTrace || (OFFSET + 2) >= stackTrace.length) { + if (OFFSET + 2 >= stackTrace.length) { return null; } final String className = stackTrace[OFFSET + 2].getClassName(); @@ -44,7 +44,7 @@ public class StackTraceCaller implements Caller, Serializable { @Override public Class getCaller(int depth) { final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - if (null == stackTrace || (OFFSET + depth) >= stackTrace.length) { + if (OFFSET + depth >= stackTrace.length) { return null; } final String className = stackTrace[OFFSET + depth].getClassName(); @@ -58,11 +58,9 @@ public class StackTraceCaller implements Caller, Serializable { @Override public boolean isCalledBy(Class clazz) { final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - if(null != stackTrace) { - for (final StackTraceElement element : stackTrace) { - if (element.getClassName().equals(clazz.getName())) { - return true; - } + for (final StackTraceElement element : stackTrace) { + if (element.getClassName().equals(clazz.getName())) { + return true; } } return false; diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/tree/Tree.java b/hutool-core/src/main/java/cn/hutool/core/lang/tree/Tree.java index e1f92ef1c..5d8e31a97 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/tree/Tree.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/tree/Tree.java @@ -17,6 +17,7 @@ public class Tree extends LinkedHashMap implements Comparable private static final long serialVersionUID = 1L; private TreeNodeConfig treeNodeConfig; + private Tree parent; public Tree() { this(null); @@ -33,6 +34,30 @@ public class Tree extends LinkedHashMap implements Comparable treeNodeConfig, TreeNodeConfig.DEFAULT_CONFIG); } + /** + * 获取父节点 + * + * @return 父节点 + * @since 5.2.4 + */ + public Tree getParent() { + return parent; + } + + /** + * 设置父节点 + * + * @param parent 父节点 + * @since 5.2.4 + */ + public Tree setParent(Tree parent) { + this.parent = parent; + if(null != parent){ + this.setParentId(parent.getId()); + } + return this; + } + /** * 获取节点ID * @@ -46,7 +71,7 @@ public class Tree extends LinkedHashMap implements Comparable /** * 设置节点ID * - * @param id 节点ID + * @param id 节点ID * @return this */ public Tree setId(T id) { diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeUtil.java b/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeUtil.java index c7aaff1e4..8effecbe3 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeUtil.java @@ -62,18 +62,19 @@ public class TreeUtil { * @return List */ public static List> build(List list, E parentId, TreeNodeConfig treeNodeConfig, NodeParser nodeParser) { - List> treeNodes = CollUtil.newArrayList(); + final List> treeNodes = CollUtil.newArrayList(); + Tree treeNode; for (T obj : list) { - Tree treeNode = new Tree<>(treeNodeConfig); + treeNode = new Tree<>(treeNodeConfig); nodeParser.parse(obj, treeNode); treeNodes.add(treeNode); } List> finalTreeNodes = CollUtil.newArrayList(); - for (Tree treeNode : treeNodes) { - if (parentId.equals(treeNode.getParentId())) { - finalTreeNodes.add(treeNode); - innerBuild(treeNodes, treeNode, 0, treeNodeConfig.getDeep()); + for (Tree node : treeNodes) { + if (parentId.equals(node.getParentId())) { + finalTreeNodes.add(node); + innerBuild(treeNodes, node, 0, treeNodeConfig.getDeep()); } } // 内存每层已经排过了 这是最外层排序 @@ -109,7 +110,8 @@ public class TreeUtil { parentNode.setChildren(children); } children.add(childNode); - childNode.setParentId(parentNode.getId()); +// childNode.setParentId(parentNode.getId()); + childNode.setParent(parentNode); innerBuild(treeNodes, childNode, deep + 1, maxDeep); } } diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/TreeTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/TreeTest.java index 9d39fc729..5803bdf37 100644 --- a/hutool-core/src/test/java/cn/hutool/core/lang/TreeTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/lang/TreeTest.java @@ -37,6 +37,11 @@ public class TreeTest { for (Tree tree : treeNodes) { Assert.assertNotNull(tree); } + + // 测试通过子节点查找父节点 + final Tree rootNode0 = treeNodes.get(0); + final Tree parent = rootNode0.getChildren().get(0).getParent(); + Assert.assertEquals(rootNode0, parent); } @Test diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/CallerTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/caller/CallerTest.java similarity index 86% rename from hutool-core/src/test/java/cn/hutool/core/lang/CallerTest.java rename to hutool-core/src/test/java/cn/hutool/core/lang/caller/CallerTest.java index 1f2e51f51..490b0803c 100644 --- a/hutool-core/src/test/java/cn/hutool/core/lang/CallerTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/lang/caller/CallerTest.java @@ -1,10 +1,8 @@ -package cn.hutool.core.lang; +package cn.hutool.core.lang.caller; import org.junit.Assert; import org.junit.Test; -import cn.hutool.core.lang.caller.CallerUtil; - /** * {@link CallerUtil} 单元测试 * @author Looly diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/caller/CallerUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/caller/CallerUtilTest.java new file mode 100644 index 000000000..51bce8d06 --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/lang/caller/CallerUtilTest.java @@ -0,0 +1,16 @@ +package cn.hutool.core.lang.caller; + +import org.junit.Assert; +import org.junit.Test; + +public class CallerUtilTest { + + @Test + public void getCallerMethodNameTest() { + final String callerMethodName = CallerUtil.getCallerMethodName(false); + Assert.assertEquals("getCallerMethodNameTest", callerMethodName); + + final String fullCallerMethodName = CallerUtil.getCallerMethodName(true); + Assert.assertEquals("cn.hutool.core.lang.caller.CallerUtilTest.getCallerMethodNameTest", fullCallerMethodName); + } +} \ No newline at end of file