Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Not a valid line number error while searching for a java symbol #5369

Closed
niander opened this issue Jun 22, 2023 · 6 comments
Closed

Not a valid line number error while searching for a java symbol #5369

niander opened this issue Jun 22, 2023 · 6 comments
Assignees
Labels
bug Something that is making a piece of functionality unusable investigation needed
Milestone

Comments

@niander
Copy link

niander commented Jun 22, 2023

Describe the bug

I am new to using metals and scala + java development. I will try my best to describe exactly how to reproduce this.

My scala project depends on "com.microsoft.azure" % "msal4j" % "1.13.8". I am able to navigate to the source code of some of the classes imported from this module but others I am not.
For instance, I am able to import and navigate to: com.microsoft.aad.msal4j.ClientCredentialParameters. But, I am not able to navigate to com.microsoft.aad.msal4j.ConfidentialClientApplication.

In VSCode output I can see the following error log:

2023.06.22 16:40:49 ERROR searching for `com/microsoft/aad/msal4j/ConfidentialClientApplication#` failed
java.lang.IllegalArgumentException: 162 is not a valid line number, allowed [0..157]
	at scala.meta.internal.inputs.InternalInput.lineToOffset(InternalInput.scala:37)
	at scala.meta.internal.inputs.InternalInput.lineToOffset$(InternalInput.scala:32)
	at scala.meta.inputs.Input$VirtualFile.lineToOffset(Input.scala:80)
	at scala.meta.internal.mtags.ScalametaCommonEnrichments$XtensionInputOffset.toOffset(ScalametaCommonEnrichments.scala:471)
	at scala.meta.internal.mtags.JavaMtags.toRangePosition(JavaMtags.scala:66)
	at scala.meta.internal.mtags.JavaMtags.$anonfun$visitMethods$1(JavaMtags.scala:169)
	at scala.meta.internal.mtags.JavaMtags.$anonfun$visitMethods$1$adapted(JavaMtags.scala:166)
	at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:575)
	at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:573)
	at scala.collection.AbstractIterable.foreach(Iterable.scala:933)
	at scala.meta.internal.mtags.JavaMtags.visitMethods(JavaMtags.scala:166)
	at scala.meta.internal.mtags.JavaMtags.$anonfun$visitClass$1(JavaMtags.scala:117)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
	at scala.meta.internal.mtags.MtagsIndexer.withOwner(MtagsIndexer.scala:48)
	at scala.meta.internal.mtags.MtagsIndexer.withOwner$(MtagsIndexer.scala:45)
	at scala.meta.internal.mtags.JavaMtags.withOwner(JavaMtags.scala:30)
	at scala.meta.internal.mtags.JavaMtags.visitClass(JavaMtags.scala:107)
	at scala.meta.internal.mtags.JavaMtags.$anonfun$indexRoot$2(JavaMtags.scala:48)
	at scala.meta.internal.mtags.JavaMtags.$anonfun$indexRoot$2$adapted(JavaMtags.scala:48)
	at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:575)
	at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:573)
	at scala.collection.AbstractIterable.foreach(Iterable.scala:933)
	at scala.meta.internal.mtags.JavaMtags.indexRoot(JavaMtags.scala:48)
	at scala.meta.internal.mtags.MtagsIndexer.index(MtagsIndexer.scala:19)
	at scala.meta.internal.mtags.MtagsIndexer.index$(MtagsIndexer.scala:18)
	at scala.meta.internal.mtags.JavaMtags.index(JavaMtags.scala:30)
	at scala.meta.internal.mtags.Mtags.index(Mtags.scala:54)
	at scala.meta.internal.mtags.SymbolIndexBucket.addMtagsSourceFile(SymbolIndexBucket.scala:252)
	at scala.meta.internal.mtags.SymbolIndexBucket.$anonfun$query0$4(SymbolIndexBucket.scala:188)
	at scala.meta.internal.mtags.SymbolIndexBucket.$anonfun$query0$4$adapted(SymbolIndexBucket.scala:188)
	at scala.collection.immutable.List.foreach(List.scala:333)
	at scala.meta.internal.mtags.SymbolIndexBucket.$anonfun$query0$3(SymbolIndexBucket.scala:188)
	at scala.meta.internal.mtags.SymbolIndexBucket.$anonfun$query0$3$adapted(SymbolIndexBucket.scala:188)
	at scala.Option.foreach(Option.scala:437)
	at scala.meta.internal.mtags.SymbolIndexBucket.query0(SymbolIndexBucket.scala:188)
	at scala.meta.internal.mtags.SymbolIndexBucket.query(SymbolIndexBucket.scala:158)
	at scala.meta.internal.mtags.OnDemandSymbolIndex.$anonfun$findSymbolDefinition$1(OnDemandSymbolIndex.scala:139)
	at scala.collection.immutable.List.flatMap(List.scala:293)
	at scala.meta.internal.mtags.OnDemandSymbolIndex.findSymbolDefinition(OnDemandSymbolIndex.scala:139)
	at scala.meta.internal.mtags.OnDemandSymbolIndex.definitions(OnDemandSymbolIndex.scala:56)
	at scala.meta.internal.metals.WorkspaceSearchVisitor.definition(WorkspaceSearchVisitor.scala:91)
	at scala.meta.internal.metals.WorkspaceSearchVisitor.expandClassfile(WorkspaceSearchVisitor.scala:129)
	at scala.meta.internal.metals.WorkspaceSearchVisitor.visitClassfile(WorkspaceSearchVisitor.scala:119)
	at scala.meta.internal.metals.ClasspathSearch.$anonfun$search$5(ClasspathSearch.scala:49)
	at scala.meta.internal.metals.ClasspathSearch.$anonfun$search$5$adapted(ClasspathSearch.scala:39)
	at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:575)
	at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:573)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1300)
	at scala.meta.internal.metals.ClasspathSearch.search(ClasspathSearch.scala:39)
	at scala.meta.internal.metals.WorkspaceSymbolProvider.search(WorkspaceSymbolProvider.scala:82)
	at scala.meta.internal.metals.WorkspaceSymbolProvider.searchExactFrom(WorkspaceSymbolProvider.scala:72)
	at scala.meta.internal.metals.DefinitionProvider.$anonfun$fromSearch$5(DefinitionProvider.scala:169)
	at scala.Option.map(Option.scala:242)
	at scala.meta.internal.metals.DefinitionProvider.$anonfun$fromSearch$4(DefinitionProvider.scala:142)
	at scala.Option.flatMap(Option.scala:283)
	at scala.meta.internal.metals.DefinitionProvider.$anonfun$fromSearch$3(DefinitionProvider.scala:141)
	at scala.Option.flatMap(Option.scala:283)
	at scala.meta.internal.metals.DefinitionProvider.$anonfun$fromSearch$2(DefinitionProvider.scala:140)
	at scala.Option.flatMap(Option.scala:283)
	at scala.meta.internal.metals.DefinitionProvider.fromSearch(DefinitionProvider.scala:138)
	at scala.meta.internal.metals.DefinitionProvider.$anonfun$definition$4(DefinitionProvider.scala:115)
	at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:467)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:750)

2023.06.22 16:40:49 ERROR searching for `com/microsoft/aad/msal4j/ConfidentialClientApplication.` failed
java.lang.IllegalArgumentException: 162 is not a valid line number, allowed [0..157]
	at scala.meta.internal.inputs.InternalInput.lineToOffset(InternalInput.scala:37)
	at scala.meta.internal.inputs.InternalInput.lineToOffset$(InternalInput.scala:32)
	at scala.meta.inputs.Input$VirtualFile.lineToOffset(Input.scala:80)
	at scala.meta.internal.mtags.ScalametaCommonEnrichments$XtensionInputOffset.toOffset(ScalametaCommonEnrichments.scala:471)
	at scala.meta.internal.mtags.JavaMtags.toRangePosition(JavaMtags.scala:66)
	at scala.meta.internal.mtags.JavaMtags.$anonfun$visitMethods$1(JavaMtags.scala:169)
	at scala.meta.internal.mtags.JavaMtags.$anonfun$visitMethods$1$adapted(JavaMtags.scala:166)
	at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:575)
	at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:573)
	at scala.collection.AbstractIterable.foreach(Iterable.scala:933)
	at scala.meta.internal.mtags.JavaMtags.visitMethods(JavaMtags.scala:166)
	at scala.meta.internal.mtags.JavaMtags.$anonfun$visitClass$1(JavaMtags.scala:117)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
	at scala.meta.internal.mtags.MtagsIndexer.withOwner(MtagsIndexer.scala:48)
	at scala.meta.internal.mtags.MtagsIndexer.withOwner$(MtagsIndexer.scala:45)
	at scala.meta.internal.mtags.JavaMtags.withOwner(JavaMtags.scala:30)
	at scala.meta.internal.mtags.JavaMtags.visitClass(JavaMtags.scala:107)
	at scala.meta.internal.mtags.JavaMtags.$anonfun$indexRoot$2(JavaMtags.scala:48)
	at scala.meta.internal.mtags.JavaMtags.$anonfun$indexRoot$2$adapted(JavaMtags.scala:48)
	at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:575)
	at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:573)
	at scala.collection.AbstractIterable.foreach(Iterable.scala:933)
	at scala.meta.internal.mtags.JavaMtags.indexRoot(JavaMtags.scala:48)
	at scala.meta.internal.mtags.MtagsIndexer.index(MtagsIndexer.scala:19)
	at scala.meta.internal.mtags.MtagsIndexer.index$(MtagsIndexer.scala:18)
	at scala.meta.internal.mtags.JavaMtags.index(JavaMtags.scala:30)
	at scala.meta.internal.mtags.Mtags.index(Mtags.scala:54)
	at scala.meta.internal.mtags.SymbolIndexBucket.addMtagsSourceFile(SymbolIndexBucket.scala:252)
	at scala.meta.internal.mtags.SymbolIndexBucket.$anonfun$query0$4(SymbolIndexBucket.scala:188)
	at scala.meta.internal.mtags.SymbolIndexBucket.$anonfun$query0$4$adapted(SymbolIndexBucket.scala:188)
	at scala.collection.immutable.List.foreach(List.scala:333)
	at scala.meta.internal.mtags.SymbolIndexBucket.$anonfun$query0$3(SymbolIndexBucket.scala:188)
	at scala.meta.internal.mtags.SymbolIndexBucket.$anonfun$query0$3$adapted(SymbolIndexBucket.scala:188)
	at scala.Option.foreach(Option.scala:437)
	at scala.meta.internal.mtags.SymbolIndexBucket.query0(SymbolIndexBucket.scala:188)
	at scala.meta.internal.mtags.SymbolIndexBucket.query(SymbolIndexBucket.scala:158)
	at scala.meta.internal.mtags.OnDemandSymbolIndex.$anonfun$findSymbolDefinition$1(OnDemandSymbolIndex.scala:139)
	at scala.collection.immutable.List.flatMap(List.scala:293)
	at scala.meta.internal.mtags.OnDemandSymbolIndex.findSymbolDefinition(OnDemandSymbolIndex.scala:139)
	at scala.meta.internal.mtags.OnDemandSymbolIndex.definitions(OnDemandSymbolIndex.scala:56)
	at scala.meta.internal.metals.WorkspaceSearchVisitor.definition(WorkspaceSearchVisitor.scala:94)
	at scala.meta.internal.metals.WorkspaceSearchVisitor.expandClassfile(WorkspaceSearchVisitor.scala:129)
	at scala.meta.internal.metals.WorkspaceSearchVisitor.visitClassfile(WorkspaceSearchVisitor.scala:119)
	at scala.meta.internal.metals.ClasspathSearch.$anonfun$search$5(ClasspathSearch.scala:49)
	at scala.meta.internal.metals.ClasspathSearch.$anonfun$search$5$adapted(ClasspathSearch.scala:39)
	at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:575)
	at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:573)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1300)
	at scala.meta.internal.metals.ClasspathSearch.search(ClasspathSearch.scala:39)
	at scala.meta.internal.metals.WorkspaceSymbolProvider.search(WorkspaceSymbolProvider.scala:82)
	at scala.meta.internal.metals.WorkspaceSymbolProvider.searchExactFrom(WorkspaceSymbolProvider.scala:72)
	at scala.meta.internal.metals.DefinitionProvider.$anonfun$fromSearch$5(DefinitionProvider.scala:169)
	at scala.Option.map(Option.scala:242)
	at scala.meta.internal.metals.DefinitionProvider.$anonfun$fromSearch$4(DefinitionProvider.scala:142)
	at scala.Option.flatMap(Option.scala:283)
	at scala.meta.internal.metals.DefinitionProvider.$anonfun$fromSearch$3(DefinitionProvider.scala:141)
	at scala.Option.flatMap(Option.scala:283)
	at scala.meta.internal.metals.DefinitionProvider.$anonfun$fromSearch$2(DefinitionProvider.scala:140)
	at scala.Option.flatMap(Option.scala:283)
	at scala.meta.internal.metals.DefinitionProvider.fromSearch(DefinitionProvider.scala:138)
	at scala.meta.internal.metals.DefinitionProvider.$anonfun$definition$4(DefinitionProvider.scala:115)
	at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:467)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:750)

Please let me know if you need any more information.

Expected behavior

No response

Operating system

Windows

Editor/Extension

VS Code

Version of Metals

v0.11.12

Extra context or search terms

IllegalArgumentException

@tgodzik
Copy link
Contributor

tgodzik commented Jun 23, 2023

Thanks for reporting! We should be able to reproduce it with that library.

@tgodzik tgodzik added this to Triage in Metals Issue Board via automation Jun 23, 2023
@tgodzik tgodzik added bug Something that is making a piece of functionality unusable investigation needed labels Jun 23, 2023
@niander
Copy link
Author

niander commented Jun 27, 2023

Thanks! Any idea on how I can mitigate this? The java language support in VSCode is able to load and navigate to the symbols but if metals is running, the java extensions won't work properly so I can't use both of them.

@tgodzik
Copy link
Contributor

tgodzik commented Jun 28, 2023

Thanks! Any idea on how I can mitigate this? The java language support in VSCode is able to load and navigate to the symbols but if metals is running, the java extensions won't work properly so I can't use both of them.

Unfortunately there is no way for Metals and Java extension work together properly :/ We would need to turn off Java support completely in Metals, but that might cause other issues, which might be hard to anticipate. Ideally, there could be a way to prioritize a language server for a file, but I don't think there is a way.

Though currently, you should get suggestions from both inside Java files 🤔

@niander
Copy link
Author

niander commented Jun 28, 2023

Though currently, you should get suggestions from both inside Java files 🤔

I don't think that is what is happening for me. If Metals is running and after navigating to a Java file, the java language support doesn't start.

@tgodzik
Copy link
Contributor

tgodzik commented Jun 29, 2023

Ach, that might be because Java plugin doesn't understand the virtual files we create. If you navigate from a Java file it would understand it, but otherwise it will not be able to provide any support.

@kasiaMarek
Copy link
Contributor

fixed upstream by scalameta/scalameta#3343

Metals Issue Board automation moved this from Triage to Done Nov 6, 2023
@tgodzik tgodzik added this to the Metals v1.1.1 milestone Dec 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something that is making a piece of functionality unusable investigation needed
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

3 participants