Bitbucket url creates stacktrace

Issue #96 resolved
Håkan Ullström created an issue

Seems like Bitbucket servers hosted on root of a host does not work. example:

does not work:
https://example.com/projects/asd/repos/yyy

works:
https://example.com/xxx/projects/asd/repos/yyy

Looked in the git history and there was a recent change adding a traling “/” to the uri resolve on

https://bitbucket.org/atlassianlabs/intellij-bitbucket-references-plugin/commits/5a23067be602e1f53c6e29e0c4af758987fac278#chg-src/main/java/com/atlassian/bitbucket/linky/configuration/LinkConfigurationForm.java
line 126

as well as a comment to // TODO verify this 😃

I do not know the full reson behind adding this but i recommend removing it again.
Another recommendation is to replace the splitting, joining and lastIndexOf with a regex. (tell me if you need help with this)

Recompiled without trailing “/” and works great! really a great tool!

Stacktrace:

java.lang.IllegalArgumentException: Expected authority at index 2: //
    at java.base/java.net.URI.create(URI.java:883)
    at java.base/java.net.URI.resolve(URI.java:1066)
    at com.atlassian.bitbucket.linky.configuration.LinkConfigurationForm.getBitbucketServer(LinkConfigurationForm.java:126)
    at com.atlassian.bitbucket.linky.configuration.LinkConfigurationForm.lambda$isModified$0(LinkConfigurationForm.java:77)
    at java.base/java.util.Optional.map(Optional.java:265)
    at com.atlassian.bitbucket.linky.configuration.LinkConfigurationForm.isModified(LinkConfigurationForm.java:77)
    at java.base/java.util.stream.MatchOps$1MatchSink.accept(MatchOps.java:90)
    at java.base/java.util.HashMap$ValueSpliterator.tryAdvance(HashMap.java:1696)
    at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:278)
    at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
    at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127)
    at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230)
    at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:528)
    at com.atlassian.bitbucket.linky.configuration.MainConfigurationForm.isModified(MainConfigurationForm.java:130)
    at com.intellij.openapi.options.ex.ConfigurableWrapper.isModified(ConfigurableWrapper.java:163)
    at com.intellij.openapi.options.newEditor.SettingsEditor.checkModifiedInternal(SettingsEditor.java:418)
    at com.intellij.openapi.options.newEditor.SettingsEditor.checkModifiedForItem(SettingsEditor.java:412)
    at com.intellij.openapi.options.newEditor.SettingsEditor.checkModified(SettingsEditor.java:400)
    at com.intellij.openapi.options.newEditor.SettingsEditor$5.updateCurrent(SettingsEditor.java:202)
    at com.intellij.openapi.options.newEditor.ConfigurableEditor.updateIfCurrent(ConfigurableEditor.java:240)
    at com.intellij.openapi.options.newEditor.ConfigurableEditor$4.run(ConfigurableEditor.java:194)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:324)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:314)
    at com.intellij.util.ui.update.MergingUpdateQueue.lambda$flush$1(MergingUpdateQueue.java:264)
    at com.intellij.util.ui.EdtInvocationManager.invokeAndWaitIfNeeded(EdtInvocationManager.java:57)
    at com.intellij.util.ui.UIUtil.invokeAndWaitIfNeeded(UIUtil.java:2438)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:275)
    at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:233)
    at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:231)
    at com.intellij.util.Alarm$Request.runSafely(Alarm.java:371)
    at com.intellij.util.Alarm$Request.run(Alarm.java:358)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:217)
    at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:309)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:441)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:424)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:407)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:908)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:781)
    at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:424)
    at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:698)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:423)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)
    at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
    at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
    at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
    at java.desktop/java.awt.Dialog.show(Dialog.java:1063)
    at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:708)
    at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:433)
    at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1698)
    at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1657)
    at com.intellij.openapi.options.newEditor.SettingsDialog.lambda$show$0(SettingsDialog.java:86)
    at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:83)
    at com.intellij.openapi.application.TransactionGuardImpl.submitTransactionAndWait(TransactionGuardImpl.java:149)
    at com.intellij.openapi.options.newEditor.SettingsDialog.show(SettingsDialog.java:86)
    at com.intellij.ide.actions.ShowSettingsUtilImpl.showSettingsDialog(ShowSettingsUtilImpl.java:84)
    at com.intellij.ide.actions.ShowSettingsAction.perform(ShowSettingsAction.java:54)
    at com.intellij.ui.mac.MacOSApplicationProvider$Worker.lambda$null$1(MacOSApplicationProvider.java:66)
    at com.intellij.ui.mac.MacOSApplicationProvider$Worker.lambda$submit$7(MacOSApplicationProvider.java:162)
    at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:83)
    at com.intellij.openapi.application.TransactionGuardImpl.lambda$pollQueueLater$0(TransactionGuardImpl.java:68)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:441)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:424)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:407)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:908)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:781)
    at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:424)
    at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:698)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:423)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.net.URISyntaxException: Expected authority at index 2: //
    at java.base/java.net.URI$Parser.fail(URI.java:2913)
    at java.base/java.net.URI$Parser.failExpecting(URI.java:2919)
    at java.base/java.net.URI$Parser.parseHierarchical(URI.java:3163)
    at java.base/java.net.URI$Parser.parse(URI.java:3125)
    at java.base/java.net.URI.<init>(URI.java:600)
    at java.base/java.net.URI.create(URI.java:881)
    ... 98 more

Comments (7)

  1. Daniil Penkin staff

    Oops, I somehow overlooked your report, sorry @Håkan Ullström . Thanks for it and for the stacktrace, I’ll fix this issue in the upcoming release.

    Cheers,
    Daniil

  2. Daniil Penkin staff

    Just an update: the fix for this didn’t make it into the version I’ve just released, but please don’t think that I forgot about it. I have more time this week dedicated to Linky.

  3. Log in to comment