Skip to content

#Help Wanted# ParserException: Could not parse declaration at 'delete' #783

@HelloRayDeng

Description

@HelloRayDeng

Situation: I am keeping getting org.bytedeco.javacpp.tools.ParserException as shown below at the code line like this Scope & operator = (const Scope&) = delete; by using JavaCPP.

Here is the ParserException message, which shows "Could not parse declaration at 'delete'":

[ERROR] Failed to execute JavaCPP Builder: /mnt/c/Users/ksas/Workspace/KS-Workspace/SOAMaster-ng/common/service-monitor-tracer-java/cppbuild/linux-x86_64/include/scope.hpp:30:Could not parse declaration at 'delete'
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 32.953 s
[INFO] Finished at: 2024-10-15T10:08:00+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.bytedeco:javacpp:1.7.0-SNAPSHOT:parse (javacpp-parser) on project service-monitor-tracer-java: Failed to execute JavaCPP Builder: /mnt/c/Users/ksas/Workspace/KS-Workspace/SOAMaster-ng/common/service-monitor-tracer-java/cppbuild/linux-x86_64/include/scope.hpp:30:Could not parse declaration at 'delete' -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.bytedeco:javacpp:1.7.0-SNAPSHOT:parse (javacpp-parser) on project service-monitor-tracer-java: Failed to execute JavaCPP Builder
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:569)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: org.apache.maven.plugin.MojoExecutionException: Failed to execute JavaCPP Builder
at org.bytedeco.javacpp.tools.BuildMojo.execute (BuildMojo.java:426)
at org.bytedeco.javacpp.tools.ParseMojo.execute (ParseMojo.java:39)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:569)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: org.bytedeco.javacpp.tools.ParserException: /mnt/c/Users/ksas/Workspace/KS-Workspace/SOAMaster-ng/common/service-monitor-tracer-java/cppbuild/linux-x86_64/include/scope.hpp:30:Could not parse declaration at 'delete'
at org.bytedeco.javacpp.tools.Parser.declarations (Parser.java:4250)
at org.bytedeco.javacpp.tools.Parser.group (Parser.java:3597)
at org.bytedeco.javacpp.tools.Parser.declarations (Parser.java:4243)
at org.bytedeco.javacpp.tools.Parser.namespace (Parser.java:4127)
at org.bytedeco.javacpp.tools.Parser.declarations (Parser.java:4242)
at org.bytedeco.javacpp.tools.Parser.parse (Parser.java:4333)
at org.bytedeco.javacpp.tools.Parser.parse (Parser.java:4483)
at org.bytedeco.javacpp.tools.Builder.parse (Builder.java:101)
at org.bytedeco.javacpp.tools.Builder.build (Builder.java:1102)
at org.bytedeco.javacpp.tools.BuildMojo.execute (BuildMojo.java:420)
at org.bytedeco.javacpp.tools.ParseMojo.execute (ParseMojo.java:39)

Here is my cpp code of 'scope.hpp':

#ifndef SOAMASTER_SCOPE_H
#define SOAMASTER_SCOPE_H

#include "span.hpp"
#include "visibility_control.hpp"

namespace soamaster {

/// @brief Calling stack manager.
class SOAMASTER_PUBLIC Scope {
public:
  /// @brief Construct the scope object, it always appears with StartSpan().
  /// @param pSpan  The pointer of the matched span.
  explicit Scope(Span * pSpan) noexcept;
  // @brief Destruct the scope object.
  ~Scope() noexcept;

private:
  /// @brief Reserve the current span, which should match the top one of runtime context.
  Span * pSpan_;
  /// @brief Mask some default methods in class.
  Scope() = delete;
  Scope(const Scope&) = delete;
  Scope(Scope&&) = delete;
  Scope & operator = (const Scope&) = delete;
  Scope & operator = (const Scope&&) = delete;
};

} // End namespace

#endif /* SOAMASTER_SCOPE_H */

Here is my java code using InfoMapper:

@Properties(
        inherit = javacpp.class,
        target = "com.xxxxxx.tracer",
        global = "com.xxxxxx.tracer.global.TracerApi",
        value = {
                @Platform(
                        include = {
                                "span.hpp",
                                "scope.hpp",
                                "service_monitor_tracer.hpp"
                        },
                        link = {
                                "tracer@.1",
                                "ddsc@.1",
                                "ddscxx@.1",
                                "ks"
                        },
                        resource = {
                                "include",
                                "lib",
                                "bin"
                        }
                )
        }
)
@NoException
public class TracerApi implements InfoMapper {
    @Override
    public void map(InfoMap infoMap) {
        infoMap
                // Skip visibility macros in both C++ and Java code
                .put(new Info("SOAMASTER_PUBLIC").cppTypes().annotations().skip())
                .put(new Info("SOAMASTER_EXPORT").cppTypes().annotations().skip())
                .put(new Info("SOAMASTER_IMPORT").cppTypes().annotations().skip())
                .put(new Info("SOAMASTER_PUBLIC_TYPE").cppTypes().annotations().skip())

                .put(new Info("soamaster::Scope::Scope").skip())
                .put(new Info("soamaster::Scope::Scope(const soamaster::Scope&)").skip())
                .put(new Info("soamaster::Scope::Scope(soamaster::Scope&&)").skip())

                .put(new Info("soamaster::Scope& operator=").skip())
                .put(new Info("soamaster::Scope& operator=(const soamaster::Scope&)").skip())
                .put(new Info("soamaster::Scope& operator=(soamaster::Scope&&)").skip());
    }
}

Trying: I have already set a few Info objects in infoMap to skip parsing those methods with delete syntax, which work for constructors, but not for the opearator= with delete, and always failed with this ParserException: Could not parse declaration at 'delete'? Can someone please tell me how can I solve this problem? How should I handle this operator override with delete syntax in javacpp? Thanks for help!

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions