redhat-developer / intellij-quarkus

IntelliJ Quarkus Tools
Eclipse Public License 2.0
114 stars 43 forks source link

Error in Intellij IDEA while editing application.yml config #1282

Closed PsyhoBelka closed 5 months ago

PsyhoBelka commented 6 months ago

While you editing config properties IDE continuously reported the error if property not finished with semicolon. Quarkus Tools v.1.30.0 IDEA v.2022.3.3 Here is the example of error:

Failed to notify classpath resource change

java.lang.RuntimeException: Cannot invoke (class=MicroProfileProjectListener, method=sourceFilesChanged, topic=com.redhat.devtools.intellij.lsp4mp4ij.classpath.ClasspathResourceChangedManager) at com.intellij.util.messages.impl.MessageBusImplKt.invokeListener(MessageBusImpl.kt:639) at com.intellij.util.messages.impl.MessageBusImplKt.deliverMessage(MessageBusImpl.kt:395) at com.intellij.util.messages.impl.MessageBusImplKt.pumpWaiting(MessageBusImpl.kt:374) at com.intellij.util.messages.impl.MessageBusImplKt.access$pumpWaiting(MessageBusImpl.kt:1) at com.intellij.util.messages.impl.MessagePublisher.invoke(MessageBusImpl.kt:433) at jdk.proxy13/jdk.proxy13.$Proxy250.sourceFilesChanged(Unknown Source) at com.redhat.devtools.intellij.lsp4mp4ij.classpath.ClasspathResourceChangedNotifier.notifyChanges(ClasspathResourceChangedNotifier.java:110) at com.redhat.devtools.intellij.lsp4mp4ij.classpath.ClasspathResourceChangedNotifier$1.run(ClasspathResourceChangedNotifier.java:88) at java.base/java.util.TimerThread.mainLoop(Timer.java:566) at java.base/java.util.TimerThread.run(Timer.java:516) Caused by: while scanning a simple key in 'reader', line 52, column 5: ht ^ could not find expected ':' in 'reader', line 53, column 3: swagger-ui: ^

at org.yaml.snakeyaml.scanner.ScannerImpl.stalePossibleSimpleKeys(ScannerImpl.java:520)
at org.yaml.snakeyaml.scanner.ScannerImpl.needMoreTokens(ScannerImpl.java:325)
at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:255)
at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingKey.produce(ParserImpl.java:648)
at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:171)
at org.yaml.snakeyaml.comments.CommentEventsCollector$1.peek(CommentEventsCollector.java:57)
at org.yaml.snakeyaml.comments.CommentEventsCollector$1.peek(CommentEventsCollector.java:43)
at org.yaml.snakeyaml.comments.CommentEventsCollector.collectEvents(CommentEventsCollector.java:136)
at org.yaml.snakeyaml.comments.CommentEventsCollector.collectEvents(CommentEventsCollector.java:116)
at org.yaml.snakeyaml.composer.Composer.composeScalarNode(Composer.java:221)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:190)
at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:321)
at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:312)
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:293)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:194)
at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:321)
at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:312)
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:293)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:194)
at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:321)
at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:312)
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:293)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:194)
at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:321)
at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:312)
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:293)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:194)
at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:321)
at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:312)
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:293)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:194)
at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:321)
at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:312)
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:293)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:194)
at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:116)
at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:142)
at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:155)
at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:477)
at org.yaml.snakeyaml.Yaml.load(Yaml.java:418)
at com.redhat.devtools.intellij.quarkus.psi.internal.utils.YamlUtils.loadYamlAsProperties(YamlUtils.java:42)
at com.redhat.devtools.intellij.quarkus.psi.internal.providers.YamlConfigSource.loadConfig(YamlConfigSource.java:43)
at com.redhat.devtools.intellij.quarkus.psi.internal.providers.YamlConfigSource.loadConfig(YamlConfigSource.java:34)
at com.redhat.devtools.intellij.lsp4mp4ij.psi.core.project.AbstractConfigSource.reload(AbstractConfigSource.java:195)
at com.redhat.devtools.intellij.lsp4mp4ij.psi.core.project.PsiMicroProfileProject.lambda$evictConfigSourcesCache$2(PsiMicroProfileProject.java:201)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:898)
at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:68)
at com.redhat.devtools.intellij.lsp4mp4ij.psi.core.project.PsiMicroProfileProject.evictConfigSourcesCache(PsiMicroProfileProject.java:197)
at com.redhat.devtools.intellij.lsp4mp4ij.psi.core.project.PsiMicroProfileProjectManager$MicroProfileProjectListener.sourceFilesChanged(PsiMicroProfileProjectManager.java:65)
at com.intellij.util.messages.impl.MessageBusImplKt.invokeMethod(MessageBusImpl.kt:655)
at com.intellij.util.messages.impl.MessageBusImplKt.invokeListener(MessageBusImpl.kt:621)
... 9 more
angelozerr commented 6 months ago

As snakeyaml is not a fault tolerant parser, we need to remove it and use the IJ Yaml PsiFile to fix this issue. By using IJ Yaml PsiFile we wiil avoid to reload Yaml with snakeyaml which will avoid some extra process.