Skip to content

cryptic error message: com.github.javaparser.resolution.UnsolvedSymbolException: Unsolved symbol : Xtory #563

@h1alexbel

Description

@h1alexbel

Here is my test:

@ParameterizedTest
@ClasspathSource(value = "org/eolang/parser/eo-typos/", glob = "**.yaml")
void checksTypoPacks(final String yaml) {
    final Xtory story = new XtSticky(
        new XtYaml(
            yaml,
            eo -> new EoSyntax(new InputOf(String.format("%s\n", eo))).parsed()
        )
    );
    Assumptions.assumeTrue(story.map().get("skip") == null);
    final Xnav after = new Xnav(story.after().inner());
    MatcherAssert.assertThat(
        "We expect the error with correct line number was found",
        after.path("/object/errors/error/@line").findAny().isPresent(),
        Matchers.equalTo(true)
    );
    MatcherAssert.assertThat(
        after.path("/object/errors/error/@line").map(line -> line.text().get()) // <- here is the problem
            .collect(Collectors.toList()),
        Matchers.hasItem(story.map().get("line").toString())
    );
}

On the second assert, the analysis fails with this message:

Caused by: com.github.javaparser.resolution.UnsolvedSymbolException: Unsolved symbol : Xtory
    at com.github.javaparser.ast.type.ClassOrInterfaceType.convertToUsage (ClassOrInterfaceType.java:358)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsage (JavaParserFacade.java:648)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convert (JavaParserFacade.java:679)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convert (JavaParserFacade.java:675)
    at com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserVariableDeclaration.getType (JavaParserVariableDeclaration.java:59)
    at com.github.javaparser.resolution.model.Value.from (Value.java:46)
    at java.util.Optional.map (Optional.java:260)
    at com.github.javaparser.symbolsolver.javaparsermodel.contexts.ExpressionContext.solveSymbolAsValue (ExpressionContext.java:45)
    at com.github.javaparser.symbolsolver.resolution.SymbolSolver.solveSymbolAsValue (SymbolSolver.java:76)
    at com.github.javaparser.symbolsolver.resolution.SymbolSolver.solveSymbolAsValue (SymbolSolver.java:82)
    at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit (TypeExtractor.java:342)
    at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit (TypeExtractor.java:63)
    at com.github.javaparser.ast.expr.NameExpr.accept (NameExpr.java:80)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeConcrete (JavaParserFacade.java:533)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType (JavaParserFacade.java:394)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType (JavaParserFacade.java:359)
    at com.github.javaparser.symbolsolver.javaparsermodel.contexts.MethodCallExprContext.solveMethodAsUsage (MethodCallExprContext.java:104)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solveMethodAsUsage (JavaParserFacade.java:699)
    at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit (TypeExtractor.java:332)
    at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit (TypeExtractor.java:63)
    at com.github.javaparser.ast.expr.MethodCallExpr.accept (MethodCallExpr.java:135)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeConcrete (JavaParserFacade.java:533)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType (JavaParserFacade.java:394)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType (JavaParserFacade.java:359)
    at com.github.javaparser.symbolsolver.javaparsermodel.contexts.MethodCallExprContext.solveMethodAsUsage (MethodCallExprContext.java:104)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solveMethodAsUsage (JavaParserFacade.java:699)
    at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit (TypeExtractor.java:332)
    at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit (TypeExtractor.java:63)
    at com.github.javaparser.ast.expr.MethodCallExpr.accept (MethodCallExpr.java:135)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeConcrete (JavaParserFacade.java:533)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType (JavaParserFacade.java:394)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType (JavaParserFacade.java:359)
    at com.github.javaparser.symbolsolver.javaparsermodel.contexts.MethodCallExprContext.solveMethodAsUsage (MethodCallExprContext.java:104)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solveMethodAsUsage (JavaParserFacade.java:699)
    at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit (TypeExtractor.java:332)
    at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit (TypeExtractor.java:63)
    at com.github.javaparser.ast.expr.MethodCallExpr.accept (MethodCallExpr.java:135)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeConcrete (JavaParserFacade.java:533)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType (JavaParserFacade.java:394)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType (JavaParserFacade.java:390)
    at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType (JavaParserFacade.java:359)
    at com.github.javaparser.symbolsolver.JavaSymbolSolver.calculateType (JavaSymbolSolver.java:443)
    at com.github.javaparser.ast.expr.Expression.calculateResolvedType (Expression.java:578)
    at com.github.lombrozo.testnames.javaparser.AssertionOfHamcrest.explanation (AssertionOfHamcrest.java:78)
    at com.github.lombrozo.testnames.javaparser.JavaParserAssertion.explanation (JavaParserAssertion.java:57)
    at com.github.lombrozo.testnames.rules.RuleAssertionMessage.lambda$complaints$0 (RuleAssertionMessage.java:63)
    at java.util.stream.ReferencePipeline$2$1.accept (ReferencePipeline.java:178)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining (ArrayList.java:1708)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:499)
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential (ForEachOps.java:151)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential (ForEachOps.java:174)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.forEach (ReferencePipeline.java:596)
    at com.github.lombrozo.testnames.rules.RuleAssertionMessage.complaints (RuleAssertionMessage.java:65)
    at com.github.lombrozo.testnames.rules.RuleSuppressed.complaints (RuleSuppressed.java:91)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:197)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining (ArrayList.java:1708)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:499)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential (ReduceOps.java:921)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:682)
    at com.github.lombrozo.testnames.rules.RuleCorrectTestCase.complaints (RuleCorrectTestCase.java:72)
    at com.github.lombrozo.testnames.rules.RuleSuppressed.complaints (RuleSuppressed.java:91)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:197)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:197)
    at java.util.HashMap$KeySpliterator.forEachRemaining (HashMap.java:1715)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:499)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential (ReduceOps.java:921)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:682)
    at com.github.lombrozo.testnames.rules.RuleCorrectTestCases.complaints (RuleCorrectTestCases.java:84)
    at com.github.lombrozo.testnames.rules.RuleSuppressed.complaints (RuleSuppressed.java:91)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:197)
    at java.util.Spliterators$ArraySpliterator.forEachRemaining (Spliterators.java:1024)
    at java.util.stream.ReferencePipeline$Head.forEach (ReferencePipeline.java:762)
    at java.util.stream.ReferencePipeline$7$1.accept (ReferencePipeline.java:276)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:197)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining (ArrayList.java:1708)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:499)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential (ReduceOps.java:921)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:682)
    at com.github.lombrozo.testnames.Cop.inspection (Cop.java:94)
    at com.github.lombrozo.testnames.ValidateMojo.validate (ValidateMojo.java:141)
    at com.github.lombrozo.testnames.ValidateMojo.execute (ValidateMojo.java:131)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
    at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103)
    at java.lang.reflect.Method.invoke (Method.java:580)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)

Looks like jtcop misinterprets the first argument (the actual value under test) as the assertion message, and that's why this cryptic error message.

If we add assertion message to the last assertion, then it will pass:

MatcherAssert.assertThat(
    after.toString(),
    after.path("/object/errors/error/@line").map(line -> line.text().get())
        .collect(Collectors.toList()),
    Matchers.hasItem(story.map().get("line").toString())
);

Metadata

Metadata

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions