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

SourceCodeParser errors on records #3892

Open
Chessray opened this issue Jan 24, 2025 · 2 comments
Open

SourceCodeParser errors on records #3892

Chessray opened this issue Jan 24, 2025 · 2 comments
Labels
bug Only issues that describe bugs.

Comments

@Chessray
Copy link

Chessray commented Jan 24, 2025

Bug

Expected Behavior

GIVEN

I have got a project with code containing records

WHEN

I apply the SourceCodeParser

THEN

The parser processes the record files just like all the others.

Actual Behavior

I see NullPointerExceptions during the ccsh run, and WebStudio displays an error saying the JSON file is empty or invalid when trying to import it.

Screenshots

Cannot invoke "org.sonar.plugins.java.api.tree.Tree.kind()" because "node" is null
	at org.sonar.java.model.JSymbol.variableOwner(JSymbol.java:209)
	at org.sonar.java.model.JSymbol.convertOwner(JSymbol.java:162)
	at org.sonar.java.model.JSymbol.owner(JSymbol.java:148)
	at org.sonar.java.checks.SpecializedFunctionalInterfacesCheck.checkVariableTypeAndInitializer(SpecializedFunctionalInterfacesCheck.java:79)
	at org.sonar.java.checks.SpecializedFunctionalInterfacesCheck.visitNode(SpecializedFunctionalInterfacesCheck.java:58)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.lambda$visit$6(VisitorsBridge.java:306)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.lambda$forEach$9(VisitorsBridge.java:321)
	at org.sonar.java.model.VisitorsBridge.runScanner(VisitorsBridge.java:185)
	at org.sonar.java.model.VisitorsBridge.access$100(VisitorsBridge.java:64)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.forEach(VisitorsBridge.java:321)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.visit(VisitorsBridge.java:308)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.visitChildren(VisitorsBridge.java:292)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.visit(VisitorsBridge.java:312)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.visitChildren(VisitorsBridge.java:292)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.visit(VisitorsBridge.java:312)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.run(VisitorsBridge.java:283)
	at org.sonar.java.model.VisitorsBridge.visitFile(VisitorsBridge.java:167)
	at org.sonar.java.ast.JavaAstScanner.simpleScan(JavaAstScanner.java:98)
	at org.sonar.java.ast.JavaAstScanner.scan(JavaAstScanner.java:64)
	at org.sonar.java.JavaSquid.scanSources(JavaSquid.java:114)
	at org.sonar.java.JavaSquid.scan(JavaSquid.java:107)
	at org.sonar.plugins.java.JavaSquidSensor.execute(JavaSquidSensor.java:103)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.sonaranalyzers.JavaSonarAnalyzer$executeScan$1$1.invokeSuspend(JavaSonarAnalyzer.kt:190)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:277)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:95)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:69)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:48)
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.sonaranalyzers.JavaSonarAnalyzer.executeScan(JavaSonarAnalyzer.kt:179)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.sonaranalyzers.JavaSonarAnalyzer.scanFiles(JavaSonarAnalyzer.kt:129)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.ProjectParser.scanProject(ProjectParser.kt:27)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.SourceCodeParserMain.call(SourceCodeParserMain.kt:131)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.SourceCodeParserMain.call(SourceCodeParserMain.kt:33)
	at picocli.CommandLine.executeUserObject(CommandLine.java:2045)
	at picocli.CommandLine.access$1500(CommandLine.java:148)
	at picocli.CommandLine$RunAll.recursivelyExecuteUserObject(CommandLine.java:2540)
	at picocli.CommandLine$RunAll.recursivelyExecuteUserObject(CommandLine.java:2542)
	at picocli.CommandLine$RunAll.handle(CommandLine.java:2536)
	at picocli.CommandLine$RunAll.handle(CommandLine.java:2496)
	at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
	at picocli.CommandLine$RunAll.execute(CommandLine.java:2498)
	at picocli.CommandLine.execute(CommandLine.java:2174)
	at de.maibornwolff.codecharta.tools.ccsh.Ccsh$Companion.executeCommandLine(Ccsh.kt:102)
	at de.maibornwolff.codecharta.tools.ccsh.Ccsh$Companion.main(Ccsh.kt:86)
	at de.maibornwolff.codecharta.tools.ccsh.Ccsh.main(Ccsh.kt)
java.lang.NullPointerException: Cannot invoke "org.sonar.plugins.java.api.tree.ClassTree.simpleName()" because the return value of "java.util.Deque.peek()" is null
	at org.sonar.java.Measurer.visitNode(Measurer.java:119)
	at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:103)
	at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:128)
	at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:105)
	at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:128)
	at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:105)
	at org.sonar.java.ast.visitors.SubscriptionVisitor.scanTree(SubscriptionVisitor.java:86)
	at org.sonar.java.Measurer.scanFile(Measurer.java:86)
	at org.sonar.java.model.VisitorsBridge.lambda$runScanner$0(VisitorsBridge.java:180)
	at org.sonar.java.model.VisitorsBridge.runScanner(VisitorsBridge.java:185)
	at org.sonar.java.model.VisitorsBridge.runScanner(VisitorsBridge.java:180)
	at org.sonar.java.model.VisitorsBridge.visitFile(VisitorsBridge.java:160)
	at org.sonar.java.ast.JavaAstScanner.simpleScan(JavaAstScanner.java:98)
	at org.sonar.java.ast.JavaAstScanner.scan(JavaAstScanner.java:64)
	at org.sonar.java.JavaSquid.scanSources(JavaSquid.java:114)
	at org.sonar.java.JavaSquid.scan(JavaSquid.java:107)
	at org.sonar.plugins.java.JavaSquidSensor.execute(JavaSquidSensor.java:103)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.sonaranalyzers.JavaSonarAnalyzer$executeScan$1$1.invokeSuspend(JavaSonarAnalyzer.kt:190)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:277)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:95)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:69)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:48)
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.sonaranalyzers.JavaSonarAnalyzer.executeScan(JavaSonarAnalyzer.kt:179)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.sonaranalyzers.JavaSonarAnalyzer.scanFiles(JavaSonarAnalyzer.kt:129)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.ProjectParser.scanProject(ProjectParser.kt:27)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.SourceCodeParserMain.call(SourceCodeParserMain.kt:131)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.SourceCodeParserMain.call(SourceCodeParserMain.kt:33)
	at picocli.CommandLine.executeUserObject(CommandLine.java:2045)
	at picocli.CommandLine.access$1500(CommandLine.java:148)
	at picocli.CommandLine$RunAll.recursivelyExecuteUserObject(CommandLine.java:2540)
	at picocli.CommandLine$RunAll.recursivelyExecuteUserObject(CommandLine.java:2542)
	at picocli.CommandLine$RunAll.handle(CommandLine.java:2536)
	at picocli.CommandLine$RunAll.handle(CommandLine.java:2496)
	at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
	at picocli.CommandLine$RunAll.execute(CommandLine.java:2498)
	at picocli.CommandLine.execute(CommandLine.java:2174)
	at de.maibornwolff.codecharta.tools.ccsh.Ccsh$Companion.executeCommandLine(Ccsh.kt:102)
	at de.maibornwolff.codecharta.tools.ccsh.Ccsh$Companion.main(Ccsh.kt:86)
	at de.maibornwolff.codecharta.tools.ccsh.Ccsh.main(Ccsh.kt)
java.lang.NullPointerException: Cannot invoke "org.sonar.plugins.java.api.tree.Tree.kind()" because "node" is null
	at org.sonar.java.model.JSymbol.variableOwner(JSymbol.java:209)
	at org.sonar.java.model.JSymbol.convertOwner(JSymbol.java:162)
	at org.sonar.java.model.JSymbol.owner(JSymbol.java:148)
	at org.sonar.java.checks.SpecializedFunctionalInterfacesCheck.checkVariableTypeAndInitializer(SpecializedFunctionalInterfacesCheck.java:79)
	at org.sonar.java.checks.SpecializedFunctionalInterfacesCheck.visitNode(SpecializedFunctionalInterfacesCheck.java:58)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.lambda$visit$6(VisitorsBridge.java:306)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.lambda$forEach$9(VisitorsBridge.java:321)
	at org.sonar.java.model.VisitorsBridge.runScanner(VisitorsBridge.java:185)
	at org.sonar.java.model.VisitorsBridge.access$100(VisitorsBridge.java:64)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.forEach(VisitorsBridge.java:321)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.visit(VisitorsBridge.java:308)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.visitChildren(VisitorsBridge.java:292)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.visit(VisitorsBridge.java:312)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.visitChildren(VisitorsBridge.java:292)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.visit(VisitorsBridge.java:312)
	at org.sonar.java.model.VisitorsBridge$IssuableSubsciptionVisitorsRunner.run(VisitorsBridge.java:283)
	at org.sonar.java.model.VisitorsBridge.visitFile(VisitorsBridge.java:167)
	at org.sonar.java.ast.JavaAstScanner.simpleScan(JavaAstScanner.java:98)
	at org.sonar.java.ast.JavaAstScanner.scan(JavaAstScanner.java:64)
	at org.sonar.java.JavaSquid.scanSources(JavaSquid.java:114)
	at org.sonar.java.JavaSquid.scan(JavaSquid.java:107)
	at org.sonar.plugins.java.JavaSquidSensor.execute(JavaSquidSensor.java:103)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.sonaranalyzers.JavaSonarAnalyzer$executeScan$1$1.invokeSuspend(JavaSonarAnalyzer.kt:190)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:277)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:95)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:69)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:48)
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.sonaranalyzers.JavaSonarAnalyzer.executeScan(JavaSonarAnalyzer.kt:179)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.sonaranalyzers.JavaSonarAnalyzer.scanFiles(JavaSonarAnalyzer.kt:129)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.ProjectParser.scanProject(ProjectParser.kt:27)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.SourceCodeParserMain.call(SourceCodeParserMain.kt:131)
	at de.maibornwolff.codecharta.parser.sourcecodeparser.SourceCodeParserMain.call(SourceCodeParserMain.kt:33)
	at picocli.CommandLine.executeUserObject(CommandLine.java:2045)
	at picocli.CommandLine.access$1500(CommandLine.java:148)
	at picocli.CommandLine$RunAll.recursivelyExecuteUserObject(CommandLine.java:2540)
	at picocli.CommandLine$RunAll.recursivelyExecuteUserObject(CommandLine.java:2542)
	at picocli.CommandLine$RunAll.handle(CommandLine.java:2536)
	at picocli.CommandLine$RunAll.handle(CommandLine.java:2496)
	at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
	at picocli.CommandLine$RunAll.execute(CommandLine.java:2498)
	at picocli.CommandLine.execute(CommandLine.java:2174)
	at de.maibornwolff.codecharta.tools.ccsh.Ccsh$Companion.executeCommandLine(Ccsh.kt:102)
	at de.maibornwolff.codecharta.tools.ccsh.Ccsh$Companion.main(Ccsh.kt:86)
	at de.maibornwolff.codecharta.tools.ccsh.Ccsh.main(Ccsh.kt)
Image

Steps to Reproduce the Problem

Sorry, I can't share the project code; but I looked at the files that the parser complains about and noticed that they're all Java Records (some simple, some with a body). I used this command: ccsh sourcecodeparser app/src/main/java -o coreservice.cc.json

Specifications

  • is released in online-demo: yes | no
  • CodeCharta Version: 1.130.0
  • OS: MacOSX Sequoia 15.2
  • Browser: Arc
@Chessray Chessray added the bug Only issues that describe bugs. label Jan 24, 2025
@ChristianHuehn
Copy link
Collaborator

ChristianHuehn commented Jan 29, 2025

We are investing it right now, looks like our parser adds .gz at the end when in reality it's just a json file. Try removing .gz at the end. Thanks for reporting 👍

@Chessray
Copy link
Author

You're right about the file ending. Thanks. :-) Doesn't explain the warnings on the records though.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Only issues that describe bugs.
Projects
None yet
Development

No branches or pull requests

2 participants