如何让Eclipse Console将文本超链接到源代码文件?

时间:2011-06-24 14:45:18

标签: eclipse hyperlink console

在代码中:    的System.out.println( “myPackage.MyClass”);

在Eclipse控制台中:    myPackage.MyClass.myMethod

我想在Console中单击输出(myPackage.MyClass.myMethod),它会直接显示相应的方法,类似于异常堆栈跟踪所发生的情况。有什么想法吗?

7 个答案:

答案 0 :(得分:14)

也许这对其他人来说很清楚,但我发现其他答案令人困惑,尽管这是正确的。 eclipse控制台解析模式(FileName.java:lineNumber)是该文件中该行的链接:

(MyFile.java:2)

正如其他答案所指出的,有很多方法可以将其输出到控制台。在线的位置无关紧要,它只是一种模式匹配。正如Colin Smith所示,log4j PatternLayout可以使用(%F:%L)来获取文件名和行号。要以编程方式获取文件名和行号,请​​参阅this question

问题是关于链接到方法,我相信你可以使用Tonny Madsen推荐的consolePatternMatchListeners方法,并在this question中有更详细的描述。

答案 1 :(得分:9)

异常堆栈跟踪的超链接基于行末的文件名和行号。 E.g。

Stack trace:

org.eclipse.jface.internal.databinding.provisional.BindingException: string property does not have a read method.
at org.eclipse.jface.internal.databinding.internal.beans.JavaBeanObservableValue.doGetValue(JavaBeanObservableValue.java:102)
at org.eclipse.jface.internal.databinding.internal.beans.JavaBeanObservableValue.setValue(JavaBeanObservableValue.java:83)

对于第一个堆栈跟踪,它位于文件JavaBeanObservableValue.java中的第102行。在当前类路径中搜索该文件,因此如果您有多个具有相同名称的类,则始终会找到第一个...

换句话说,如果你想根据你的例子添加扩展的超链接,你需要稍微扩展一下控制台视图......

...可以使用org.eclipse.ui.console.consolePatternMatchListeners扩展点完成此操作。使用这个扩展点非常容易,通过查看JDT中的示例,您应该能够让您的示例在没有太多工作的情况下工作......

答案 2 :(得分:7)

更简单的方法是欺骗控制台为您创建链接。格式很简单:

System.out.println("(" + new TestBed().getClass().getSimpleName() + ".java:" + 18 + ")");

显然,您可以根据需要在代码中提供类类型和行号。

答案 3 :(得分:3)

或者,如果您使用log4j,您可以像这样配置您的appender:

<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p %m (%F:%L) in %t%n"/>
    </layout>
</appender>

如果您希望它在IntelliJ IDEA中工作,您可以使用:

        <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p %m - at %c.%M(%F:%L) in %t%n"/>

答案 4 :(得分:0)

我使用自定义控制台视图,并使用

将一个IPatternMatchListener添加到MessageConsole
console.addPatternMatchListener(...)

使用侦听器的一个重要优点是事件提供了创建超链接所需的偏移量

可以在此处找到创建超链接的IPatternMatchListener实现的起点:

https://github.com/mjwach/ErrorLinkyThing/blob/master/source/errorlinkything/ErrorLinkyPatternMatchListenerDelegate.java

最棘手的部分似乎是从文件名中获取完整的文件路径(我不使用记录器)。

在这里可以找到遮阳插件使用的解决方法:

http://sunshade.cvs.sourceforge.net/viewvc/sunshade/net.sourceforge.sunshade/src/net/sourceforge/sunshade/util/FileUtil.java?view=markup

请参阅方法“dereferenceWindowsLink”

我仍在寻找另一种选择。

答案 5 :(得分:0)

这是一个基于其他人的答案的简单包装方法,可以在任何地方使用它来获取格式化的字符串,以便Eclipse控制台链接到 getSourceCodeLine()的任何文件中的行被调用。我还发现在Eclipse中打印到System.err将以 red 显示。

public static String getSourceCodeLine() {
    // An index of 1 references the calling method
    StackTraceElement ste = new Throwable().getStackTrace()[1]; 
    return "(" + ste.getFileName() + ":" + ste.getLineNumber() + ")";
}

public static void main( String[] args )
    System.out.println("Here's a link to " + getSourceCodeLine());
    System.err.println("And a red link to " + getSourceCodeLine());
}

答案 6 :(得分:0)

要添加到其他答案中,您可以使用以下古怪的格式链接到特定的班级:

java.util..(List.java:100)
java.awt..(List.java:100)