Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse plugin 我能';t使用cdt插件eclipse从c源代码获取AST_Eclipse Plugin_Eclipse Cdt_Abstract Syntax Tree - Fatal编程技术网

Eclipse plugin 我能';t使用cdt插件eclipse从c源代码获取AST

Eclipse plugin 我能';t使用cdt插件eclipse从c源代码获取AST,eclipse-plugin,eclipse-cdt,abstract-syntax-tree,Eclipse Plugin,Eclipse Cdt,Abstract Syntax Tree,我需要使用getAST()方法从源文件获取AST。我创建了一个.cproject,因为我认为如果它是丢失的,但它仍然犯了同样的错误。在守则的这部分: ITranslationUnit tu = (ITranslationUnit) CoreModel.getDefault (). Create (iFile); 如果在tu中返回Null,我相信错误就是因为这个原因,但是我不理解为什么在使用.cproject测试CDT项目时返回Null。我也不理解IFile,因为它返回了一个我不知道的路径,比如

我需要使用getAST()方法从源文件获取AST。我创建了一个.cproject,因为我认为如果它是丢失的,但它仍然犯了同样的错误。在守则的这部分:

ITranslationUnit tu = (ITranslationUnit) CoreModel.getDefault (). Create (iFile);
如果在tu中返回Null,我相信错误就是因为这个原因,但是我不理解为什么在使用.cproject测试CDT项目时返回Null。我也不理解IFile,因为它返回了一个我不知道的路径,比如:“L/Users/raiza-arteman/runtime-EclipseApplication/testeAST/src/code.c”。以下是课程:

    public void analyzeFilesInSrc() throws Exception{
        ICProject project = CoreModel.getDefault().getCModel().getCProject(SampleHandler.PROJECT);//project to analyse
        IIndex index = CCorePlugin.getIndexManager().getIndex(project);
        System.out.println("iindex "+index);

        // It gets all C files from the SRC path to analyze.
        this.filesInSrc = new ArrayList<String>();
        this.setSrcFiles(SampleHandler.RUNTIME_WORKSPACE_PATH + SampleHandler.PROJECT + File.separator + "src");

        // For each C file in the SRC folder..
        for (String file : this.filesInSrc){
            String completeFilePath = file.replace(SampleHandler.RUNTIME_WORKSPACE_PATH, "");

            System.out.println(completeFilePath.replace(PROJECT + File.separator + "src" + File.separator, ""));
            this.editDirectives(file);

            IPath iFilePath = new Path(completeFilePath);
            IFile iFile = ResourcesPlugin.getWorkspace().getRoot().getFile(iFilePath);

            System.out.println("ifile "+iFile);
            System.out.println("Itranslatiotounit "+(ITranslationUnit) CoreModel.getDefault().create(iFile));
            ITranslationUnit tu = (ITranslationUnit) CoreModel.getDefault().create(iFile);

            System.out.println("tu "+tu);
            try {
                // We need a read-lock on the index.
                index.acquireReadLock();
                IASTTranslationUnit ast= tu.getAST(index, ITranslationUnit.AST_PARSE_INACTIVE_CODE);

                this.setTypes(ast);
                this.setMacros(ast);
}

在我可以在CDT项目中使用它之后,我将需要解析任何c代码,即使它不是来自CDT,因此我在这里看到了一个建议,将.cproject文件放在项目的根目录中

手动创建一个
.cproject
文件不是一个好办法-它的格式没有文档记录,被认为是一个实现细节。作为创建真实项目的一部分,您应该让Eclipse创建该文件以及任何其他项目元数据文件


<> P>实际项目的创建可以在Eclipse UI(文件>新的C++项目)中手动完成,或者可以使用API类,和.< /P>< P>手动创建<代码>。CProjt文件不是要走的方式-它的格式是未记录的,并且被认为是实现细节。作为创建真实项目的一部分,您应该让Eclipse创建该文件以及任何其他项目元数据文件

实际项目的创建可以在Eclipse UI中手动完成(<代码>文件>新C++项目),或者可以使用API、./p>自动实现

java.lang.NullPointerException
    at analysis.handlers.SampleHandler.analyzeFilesInSrc(SampleHandler.java:249)
    at analysis.handlers.SampleHandler.execute(SampleHandler.java:103)
    at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:295)
    at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:90)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)