anjlab / eclipse-tapestry5-plugin

Eclipse Plugin for Tapestry5
Apache License 2.0
21 stars 9 forks source link

Add a link to the template from stacktrace in the console. #11

Closed criedel closed 10 years ago

criedel commented 10 years ago

Tapestry's exceptions are quite verbose; you'll get an exact pointer to the source of the error, including the line in the template.

Unlike classes templates aren't clickable in the console's stacktrace. It would be awesome if I could click on the template name in my stacktrace and jump right to the line that caused the error.

dmitrygusev commented 10 years ago

I'm not sure I understood what you mean. I can't see template line in stack trace, can you show an example?

criedel commented 10 years ago

Of course! I was thinking about errors like these (bold text indicates where I'd make the text become a link):

Caused by: org.apache.tapestry5.ioc.util.UnknownValueException: Component landings/index:signup does not include a formal parameter 'infoBlock' (and does not support informal parameters). [at classpath:com/example/www/pages/landings/Index.tml, line 169] at org.apache.tapestry5.internal.pageload.PageLoaderImpl$6.execute(PageLoaderImpl.java:529) at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.runActions(ComponentAssemblerImpl.java:235) at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.performAssembleRootComponent(ComponentAssemblerImpl.java:113) ... 140 more

dmitrygusev commented 10 years ago

I think I got it, this info is not in the stack traces (not even in exception.getMessage()) -- it's in TapestryException.toString() , so you must be printing exception.toString() in your logs.

I'll try to include support for this stuff in the next release.

criedel commented 10 years ago

Awesome, thanks!

dmitrygusev commented 10 years ago

There you go! You can try this in version 2.2.0.

Hyperlinks should work in java and stack trace consoles. Current version supports classpath: and context: binding prefixes. Line and column numbers (if present in error message) should be respected if you click the link:

2014-02-06 0 39 05

criedel commented 10 years ago

After upgrading to the latest version I got this error message:

The 'com.anjlab.eclipse.tapestry5.hyperlink.TapestryComponentHyperlinkDetector' extension from plug-in 'com.anjlab.eclipse.tapestry5' to the 'org.eclipse.ui.workbench.texteditor.hyperlinkDetectors' extension point failed to load the hyperlink detector.
Plug-in com.anjlab.eclipse.tapestry5 was unable to load class com.anjlab.eclipse.tapestry5.hyperlink.TapestryComponentHyperlinkDetector.
An error occurred while automatically activating bundle com.anjlab.eclipse.tapestry5 (927).
dmitrygusev commented 10 years ago

I haven't touched this part, do you have any stack trace maybe? Also which version of eclipse are you using?

criedel commented 10 years ago

Here's my eclipse stats:

eclipse.buildId=4.3.0.M20130911-1000
java.version=1.7.0_51
java.vendor=Oracle Corporation
BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=de_DE
Framework arguments:  -product org.eclipse.epp.package.jee.product -keyring /Users/cr/.eclipse_keyring -showlocation
Command-line arguments:  -os macosx -ws cocoa -arch x86_64 -product org.eclipse.epp.package.jee.product -keyring /Users/cr/.eclipse_keyring -showlocation

And here are some exceptions from the error log:

java.lang.NoClassDefFoundError: com/anjlab/eclipse/tapestry5/EclipseUtils
    at com.anjlab.eclipse.tapestry5.watchdog.TapestryContextWatchdog$1.resourceChanged(TapestryContextWatchdog.java:91)
    at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:291)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:285)
    at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:149)
    at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:396)
    at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1531)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2354)
    at org.eclipse.debug.core.model.Breakpoint.setAttribute(Breakpoint.java:196)
    at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.incrementInstallCount(JavaBreakpoint.java:848)
    at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.registerRequest(JavaBreakpoint.java:229)
    at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.createRequest(JavaBreakpoint.java:492)
    at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.createRequests(JavaBreakpoint.java:626)
    at org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.addToTarget(JavaBreakpoint.java:584)
    at org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget.breakpointAdded(JDIDebugTarget.java:1287)
    at org.eclipse.jdt.internal.debug.ui.JavaDebugOptionsManager.notifyTarget(JavaDebugOptionsManager.java:296)
    at org.eclipse.jdt.internal.debug.ui.JavaDebugOptionsManager.handleDebugEvents(JavaDebugOptionsManager.java:515)
    at org.eclipse.debug.core.DebugPlugin$EventNotifier.run(DebugPlugin.java:1132)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.debug.core.DebugPlugin$EventNotifier.dispatch(DebugPlugin.java:1166)
    at org.eclipse.debug.core.DebugPlugin$EventDispatchJob.run(DebugPlugin.java:430)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
Caused by: org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter$TerminatingClassNotFoundException: An error occurred while automatically activating bundle com.anjlab.eclipse.tapestry5 (927).
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:124)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:340)
    at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1212)
    at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174)
    at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
    at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
    at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
    at org.eclipse.ui.internal.console.PatternMatchListenerExtension.createDelegate(PatternMatchListenerExtension.java:81)
    at org.eclipse.ui.internal.console.PatternMatchListener.<init>(PatternMatchListener.java:26)
    at org.eclipse.ui.internal.console.ConsoleManager.createPatternMatchListeners(ConsoleManager.java:406)
    at org.eclipse.ui.internal.console.ConsoleManager.addConsoles(ConsoleManager.java:222)
    at org.eclipse.debug.internal.ui.views.console.ProcessConsoleManager.launchChanged(ProcessConsoleManager.java:149)
    at org.eclipse.debug.internal.core.LaunchManager$LaunchNotifier.run(LaunchManager.java:447)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.debug.internal.core.LaunchManager$LaunchNotifier.notify(LaunchManager.java:428)
    at org.eclipse.debug.internal.core.LaunchManager.fireUpdate(LaunchManager.java:1017)
    at org.eclipse.debug.core.Launch.fireChanged(Launch.java:388)
    at org.eclipse.debug.core.Launch.addProcess(Launch.java:351)
    at org.eclipse.debug.core.model.RuntimeProcess.<init>(RuntimeProcess.java:125)
    at org.eclipse.debug.core.DebugPlugin.newProcess(DebugPlugin.java:767)
    at org.eclipse.jdt.launching.AbstractVMRunner.newProcess(AbstractVMRunner.java:165)
    at org.eclipse.jdt.internal.launching.StandardVMDebugger.run(StandardVMDebugger.java:277)
    at org.eclipse.m2e.internal.launch.MavenRuntimeLaunchSupport$1.run(MavenRuntimeLaunchSupport.java:203)
    at org.eclipse.jdt.launching.JavaLaunchDelegate.launch(JavaLaunchDelegate.java:101)
    at org.eclipse.m2e.internal.launch.MavenLaunchDelegate.launch(MavenLaunchDelegate.java:88)
    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:858)
    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:707)
    at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:1018)
    at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1222)
    ... 1 more
Caused by: org.osgi.framework.BundleException: Exception in com.anjlab.eclipse.tapestry5.Activator.start() of bundle com.anjlab.eclipse.tapestry5.
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300)
    at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:478)
    at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263)
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:109)
    ... 38 more
Caused by: java.lang.NullPointerException
    at com.anjlab.eclipse.tapestry5.watchdog.WindowSelectionListener.windowOpened(WindowSelectionListener.java:46)
    at com.anjlab.eclipse.tapestry5.watchdog.WindowSelectionListener.addListener(WindowSelectionListener.java:93)
    at com.anjlab.eclipse.tapestry5.watchdog.TapestryContextWatchdog.start(TapestryContextWatchdog.java:185)
    at com.anjlab.eclipse.tapestry5.Activator.start(Activator.java:60)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
    ... 44 more
org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter$TerminatingClassNotFoundException: An error occurred while automatically activating bundle com.anjlab.eclipse.tapestry5 (927).
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:124)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:340)
    at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1212)
    at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174)
    at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
    at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
    at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
    at org.eclipse.ui.internal.console.PatternMatchListenerExtension.createDelegate(PatternMatchListenerExtension.java:81)
    at org.eclipse.ui.internal.console.PatternMatchListener.<init>(PatternMatchListener.java:26)
    at org.eclipse.ui.internal.console.ConsoleManager.createPatternMatchListeners(ConsoleManager.java:406)
    at org.eclipse.ui.internal.console.ConsoleManager.addConsoles(ConsoleManager.java:222)
    at org.eclipse.debug.internal.ui.views.console.ProcessConsoleManager.launchChanged(ProcessConsoleManager.java:149)
    at org.eclipse.debug.internal.core.LaunchManager$LaunchNotifier.run(LaunchManager.java:447)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.debug.internal.core.LaunchManager$LaunchNotifier.notify(LaunchManager.java:428)
    at org.eclipse.debug.internal.core.LaunchManager.fireUpdate(LaunchManager.java:1017)
    at org.eclipse.debug.core.Launch.fireChanged(Launch.java:388)
    at org.eclipse.debug.core.Launch.addProcess(Launch.java:351)
    at org.eclipse.debug.core.model.RuntimeProcess.<init>(RuntimeProcess.java:125)
    at org.eclipse.debug.core.DebugPlugin.newProcess(DebugPlugin.java:767)
    at org.eclipse.jdt.launching.AbstractVMRunner.newProcess(AbstractVMRunner.java:165)
    at org.eclipse.jdt.internal.launching.StandardVMDebugger.run(StandardVMDebugger.java:277)
    at org.eclipse.m2e.internal.launch.MavenRuntimeLaunchSupport$1.run(MavenRuntimeLaunchSupport.java:203)
    at org.eclipse.jdt.launching.JavaLaunchDelegate.launch(JavaLaunchDelegate.java:101)
    at org.eclipse.m2e.internal.launch.MavenLaunchDelegate.launch(MavenLaunchDelegate.java:88)
    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:858)
    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:707)
    at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:1018)
    at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1222)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
Caused by: org.osgi.framework.BundleException: Exception in com.anjlab.eclipse.tapestry5.Activator.start() of bundle com.anjlab.eclipse.tapestry5.
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300)
    at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:478)
    at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263)
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:109)
    ... 38 more
Caused by: java.lang.NullPointerException
    at com.anjlab.eclipse.tapestry5.watchdog.WindowSelectionListener.windowOpened(WindowSelectionListener.java:46)
    at com.anjlab.eclipse.tapestry5.watchdog.WindowSelectionListener.addListener(WindowSelectionListener.java:93)
    at com.anjlab.eclipse.tapestry5.watchdog.TapestryContextWatchdog.start(TapestryContextWatchdog.java:185)
    at com.anjlab.eclipse.tapestry5.Activator.start(Activator.java:60)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
    ... 44 more
dmitrygusev commented 10 years ago

That was NPE that causing this error.

Fixed in version 2.2.1 -- available for update now.

criedel commented 10 years ago

Thanks, now it works!