bytedeco/javacpp

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

Open

#783 aberto em 15 de out. de 2024

Ver no GitHub
 (3 comments) (0 reactions) (0 assignees)Java (620 forks)batch import
bughelp wanted

Métricas do repositório

Stars
 (4.279 stars)
Métricas de merge de PR
 (Mesclagem média 2d) (1 fundiu PR em 30d)

Description

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!

Guia do colaborador