java 中的特殊“%”

Special "%" in java

当我阅读 Eclipse 的源代码时,我发现了一个名为“$className$.java”的文件。部分内容如下:

package $packageName$;

%  if viewType =="treeViewer"
import java.util.ArrayList;
% endif

import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.graphics.Image;
import org.eclipse.jface.action.*;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.*;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.SWT;
% if viewType == "treeViewer"
import org.eclipse.core.runtime.IAdaptable;
% endif
% Options in the template:
%
% packageName
% className
% viewName
% viewCategoryId
% viewCategoryName
% viewType
% doubleClick
% popup
% localToolbar
% localPulldown
% sorter
% filter
% drillDown

public class $className$ extends ViewPart {
%if viewType == "tableViewer"
    private TableViewer viewer;
%else
%  if viewType == "treeViewer"
    private TreeViewer viewer;
    private DrillDownAdapter drillDownAdapter;
%  endif
%endif
%if (localToolbar || localPulldown || popup)
    private Action action1;
    private Action action2;
%endif
%if doubleClick
    private Action doubleClickAction;
%endif

我试图提取 if 的 AST,然后我得到了一个错误。 java 中的“% if”和“% endif”是什么意思?我怎样才能得到它的 AST?

这不是有效的 Java 源文件,它要么是用于生成 Java 某种类型文件的 Eclipse 文件模板,要么是首先需要 运行 在成为实际有效的 Java 源文件之前通过预处理器。

如果是第一个,那么你甚至不应该尝试从中获取AST,如果是后者,你需要找出这个项目使用的是哪个预处理器(Java中没有标准的) ), 运行 文件并从预处理步骤的结果中提取 AST。