From 89073ac97ad45eab853b32fe9815fe5a0b8e0a2a Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 9 Mar 2010 12:53:30 +0000 Subject: [PATCH] Method.invoke & Constructor.newInstance considered auxiliary --- .../execution/filters/AuxiliaryCallsFolding.java | 6 +++--- .../execution/filters/ExceptionFilter.java | 14 ++++++++------ .../filters/ReflectionStackFrameFilter.java | 7 +++++++ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/java/execution/openapi/src/com/intellij/execution/filters/AuxiliaryCallsFolding.java b/java/execution/openapi/src/com/intellij/execution/filters/AuxiliaryCallsFolding.java index 5240ad7b7add..83df6698588d 100644 --- a/java/execution/openapi/src/com/intellij/execution/filters/AuxiliaryCallsFolding.java +++ b/java/execution/openapi/src/com/intellij/execution/filters/AuxiliaryCallsFolding.java @@ -13,12 +13,12 @@ public class AuxiliaryCallsFolding extends ConsoleFolding { @Override public boolean shouldFoldLine(String line) { final Trinity pair = ExceptionFilter.parseExceptionLine(line); - return pair != null && shouldFold(pair.first); + return pair != null && shouldFold(pair.first, pair.second); } - private static boolean shouldFold(String className) { + private static boolean shouldFold(String className, String methodName) { for (StackFrameFilter provider : StackFrameFilter.EP_NAME.getExtensions()) { - if (provider.isAuxiliaryFrame(className, "")) { + if (provider.isAuxiliaryFrame(className, methodName)) { return true; } } diff --git a/java/execution/openapi/src/com/intellij/execution/filters/ExceptionFilter.java b/java/execution/openapi/src/com/intellij/execution/filters/ExceptionFilter.java index 6b05b21f3fa6..bce070511d3d 100644 --- a/java/execution/openapi/src/com/intellij/execution/filters/ExceptionFilter.java +++ b/java/execution/openapi/src/com/intellij/execution/filters/ExceptionFilter.java @@ -74,13 +74,12 @@ public class ExceptionFilter implements Filter, DumbAware { if (lastDotIndex < 0 || lastDotIndex < atIndex) return null; String className = line.substring(atIndex + AT.length() + 1, lastDotIndex).trim(); - //String methodName = text.substring(lastDotIndex + 1, lparenthIndex).trim(); + String methodName = line.substring(lastDotIndex + 1, lparenthIndex).trim(); final int rparenthIndex = line.indexOf(')', lparenthIndex); if (rparenthIndex < 0) return null; - final String fileAndLine = line.substring(lparenthIndex + 1, rparenthIndex).trim(); - return Trinity.create(className, fileAndLine, new TextRange(lparenthIndex, rparenthIndex)); + return Trinity.create(className, methodName, new TextRange(lparenthIndex, rparenthIndex)); } public Result applyFilter(final String line, final int textEndOffset) { @@ -95,7 +94,9 @@ public class ExceptionFilter implements Filter, DumbAware { className = className.substring(0, dollarIndex); } - final String fileAndLine = info.second; + final int lparenthIndex = info.third.getStartOffset(); + final int rparenthIndex = info.third.getEndOffset(); + final String fileAndLine = line.substring(lparenthIndex + 1, rparenthIndex).trim(); final int colonIndex = fileAndLine.lastIndexOf(':'); if (colonIndex < 0) return null; @@ -118,8 +119,9 @@ public class ExceptionFilter implements Filter, DumbAware { */ final int textStartOffset = textEndOffset - line.length(); - final int highlightStartOffset = textStartOffset + info.third.getStartOffset() + 1; - final int highlightEndOffset = textStartOffset + info.third.getEndOffset(); + + final int highlightStartOffset = textStartOffset + lparenthIndex + 1; + final int highlightEndOffset = textStartOffset + rparenthIndex; VirtualFile virtualFile = file.getVirtualFile(); final OpenFileHyperlinkInfo linkInfo = new OpenFileHyperlinkInfo(myProject, virtualFile, lineNumber - 1); TextAttributes attributes = HYPERLINK_ATTRIBUTES.clone(); diff --git a/java/execution/openapi/src/com/intellij/execution/filters/ReflectionStackFrameFilter.java b/java/execution/openapi/src/com/intellij/execution/filters/ReflectionStackFrameFilter.java index ed60d87c0b4d..3cd61a5d95f8 100644 --- a/java/execution/openapi/src/com/intellij/execution/filters/ReflectionStackFrameFilter.java +++ b/java/execution/openapi/src/com/intellij/execution/filters/ReflectionStackFrameFilter.java @@ -5,6 +5,13 @@ package com.intellij.execution.filters; */ public class ReflectionStackFrameFilter extends StackFrameFilter { public boolean isAuxiliaryFrame(String className, String methodName) { + if (className.equals("java.lang.reflect.Method") && methodName.equals("invoke")) { + return true; + } + if (className.equals("java.lang.reflect.Constructor") && methodName.equals("newInstance")) { + return true; + } + return className.startsWith("sun.reflect."); } }