Describe the bug
An error occurs when a external query is fired for a resource that does not have a field with the @Id annotation
To Reproduce
Create a resource without any field having the @Id notation.
Create a finder for that resource.
Fire an external query for the just created resource.
Expected behavior
Unless a client exception occurs either return results or empty list if none are found.
Stacktrace
Error: Can't process the @print directive!
In pubsub/topic.gyro on line 1 from column 1 to 42:
1: @print: $(external-query google::topic {})
Caused by: Error: Can't resolve external-query reference!
In pubsub/topic.gyro on line 1 from column 9 to 42:
1: @print: $(external-query google::topic {})
Caused by: Error: null
Caused by: Unexpected error: java.lang.NullPointerException
at gyro.core.resource.DiffableType.newExternal(DiffableType.java:159)
at gyro.core.resource.DiffableType.newExternalWithCredentials(DiffableType.java:164)
at gyro.core.finder.Finder.newResource(Finder.java:50)
at gyro.google.GoogleFinder.newResource(GoogleFinder.java:80)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at gyro.google.GoogleFinder.findAll(GoogleFinder.java:41)
at gyro.core.reference.FinderReferenceResolver.resolve(FinderReferenceResolver.java:97)
at gyro.core.scope.NodeEvaluator.visitReference(NodeEvaluator.java:691)
at gyro.core.scope.NodeEvaluator.visitReference(NodeEvaluator.java:81)
at gyro.lang.ast.value.ReferenceNode.accept(ReferenceNode.java:56)
at gyro.lang.ast.NodeVisitor.visit(NodeVisitor.java:37)
at gyro.core.OptionArgumentProcessor.convert(OptionArgumentProcessor.java:106)
at gyro.core.OptionArgumentProcessor.getArgument(OptionArgumentProcessor.java:131)
at gyro.core.PrintDirectiveProcessor.process(PrintDirectiveProcessor.java:32)
at gyro.core.scope.NodeEvaluator.visitDirective(NodeEvaluator.java:383)
at gyro.core.scope.NodeEvaluator.visitDirective(NodeEvaluator.java:81)
at gyro.lang.ast.block.DirectiveNode.accept(DirectiveNode.java:77)
at gyro.lang.ast.NodeVisitor.visit(NodeVisitor.java:37)
at gyro.core.scope.NodeEvaluator.lambda$evaluateBody$31(NodeEvaluator.java:341)
at gyro.core.scope.Defer.execute(Defer.java:50)
at gyro.core.scope.NodeEvaluator.evaluateBody(NodeEvaluator.java:341)
at gyro.core.scope.NodeEvaluator.visitFile(NodeEvaluator.java:424)
at gyro.core.scope.NodeEvaluator.visitFile(NodeEvaluator.java:81)
at gyro.lang.ast.block.FileNode.accept(FileNode.java:32)
at gyro.lang.ast.NodeVisitor.visit(NodeVisitor.java:37)
at gyro.core.scope.NodeEvaluator.lambda$evaluateBody$31(NodeEvaluator.java:341)
at gyro.core.scope.Defer.execute(Defer.java:50)
at gyro.core.scope.NodeEvaluator.evaluateBody(NodeEvaluator.java:341)
at gyro.core.scope.NodeEvaluator.evaluate(NodeEvaluator.java:325)
at gyro.core.scope.RootScope.evaluate(RootScope.java:427)
at gyro.core.command.AbstractConfigCommand.doExecute(AbstractConfigCommand.java:179)
at gyro.core.command.AbstractCommand.execute(AbstractCommand.java:75)
at gyro.core.command.AbstractCommand.call(AbstractCommand.java:80)
at gyro.core.command.AbstractCommand.call(AbstractCommand.java:41)
at picocli.CommandLine.executeUserObject(CommandLine.java:1933)
at picocli.CommandLine.access$1100(CommandLine.java:145)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2332)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2326)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2291)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2159)
at picocli.CommandLine.execute(CommandLine.java:2058)
at gyro.cli.Gyro.run(Gyro.java:262)
at gyro.cli.Gyro.main(Gyro.java:89)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Additional context
Gyro should not error out in such a situation as this is not user rectifiable.
Option1: not use the @Id field if not found which is causing the error.
Option2: Throw a gyro bug stating that the resource does not have an @Id field
Option3: Check for this in a test which fails at build time thus mitigating this issue even before this occurs.
Describe the bug An error occurs when a external query is fired for a resource that does not have a field with the @Id annotation
To Reproduce Create a resource without any field having the @Id notation. Create a finder for that resource. Fire an external query for the just created resource.
Expected behavior Unless a client exception occurs either return results or empty list if none are found.
Stacktrace
Additional context Gyro should not error out in such a situation as this is not user rectifiable.