- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在编译基于 java 的语言 - 处理之前,我需要预处理一些代码。在这种语言中,所有类型 color 的实例都需要替换为 int。例如,这是一个代码片段:
color red = 0xffaabbcc;
color[][] primary = new color[10][10];
经过预处理后,上面的代码应如下所示:
int red = 0xffaabbcc;
int[][] primary = new int[10][10];
我正在非 Eclipse 环境中工作。我正在使用 Eclipse JDT ASTParser 来执行此操作。我已经实现了我的 ASTVisitor,它访问所有 SimpleType 节点。以下是 ASTVisitor 实现的代码片段:
public boolean visit(SimpleType node) {
if (node.toString().equals("color")) {
System.out.println("ST color type detected: "
+ node.getStartPosition());
// 1
rewrite.replace(node,
rewrite.getAST().newPrimitiveType(PrimitiveType.INT), null);
// 2
node.setStructuralProperty(SimpleType.NAME_PROPERTY, rewrite
.getAST().newSimpleName("int")); // 2
}
return true;
}
这里的rewrite是ASTRewrite的一个实例。第 1 行没有任何作用(第 2 行被注释掉)。第 2 行导致抛出 IllegalArgumentException,因为 newSimpleName() 不会接受任何像 int 这样的 java 关键字。
用正则表达式查找并替换所有颜色实例对我来说似乎不是正确的方法,因为它可能会导致不必要的更改。但我可能是错的。
我怎样才能实现这个目标?或者我可以采取任何替代解决方案或方法吗?
谢谢
更新编辑:这是执行 ASTRewrite 的代码片段:
CompilationUnit cu = (CompilationUnit) parser.createAST(null);
cu.recordModifications();
rewrite = ASTRewrite.create(cu.getAST());
cu.accept(new XQASTVisitor());
TextEdit edits = cu.rewrite(doc, null);
try {
edits.apply(doc);
} catch (MalformedTreeException e) {
e.printStackTrace();
} catch (BadLocationException e) {
e.printStackTrace();
}
XQAstVisitor 是包含上述访问方法的访问者类。我正在执行其他正确执行的替换。只有这一点会导致问题。
最佳答案
我发现了你的错误!本声明:
TextEdit edits = cu.rewrite(doc, null);
不对。并应替换为以下语句:
TextEdit edits = rewrite.rewriteAST(doc, null);
最后,再次将修改后的文档解析到 CompilationUnit 中,更改将被应用。更重要的是,声明:
node.setStructuralProperty(SimpleType.NAME_PROPERTY, rewrite.getAST().newSimpleName("int"));
不需要。
关于java - 如何使用 ASTRewrite 将特定的 SimpleType 替换为 PrimitiveType?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11619929/
我目前正在使用 Java 作为 GUI 使用 C++ 编写一个小型模拟器。为了实现这一点,我从我的 C++ 代码进行 JNI 调用,将数据数组传递给 GUI 应用程序。但是,由于我在测试运行中进行的调
I just noticed有人使用 PrimitiveType 类。它似乎是 IUserType 的替代品,但我找不到它的任何文档。它有什么用? 最佳答案 PrimitiveType 是 NHibe
I just noticed有人使用 PrimitiveType 类。它似乎是 IUserType 的替代品,但我找不到它的任何文档。它有什么用? 最佳答案 PrimitiveType 是 NHibe
首先使用实体框架代码,Web 应用程序在调用 DbContext 时崩溃并出现以下错误: Assertion failed Expression: primitiveType != null De
在编译基于 java 的语言 - 处理之前,我需要预处理一些代码。在这种语言中,所有类型 color 的实例都需要替换为 int。例如,这是一个代码片段: color red = 0xffaabbcc
我正在将 Java 7 项目迁移到 Java 8。有一种方法正在做这样的事情: if(type instanceof PrimitiveType){ PrimiriveType type = (
当使用 JNI 桥接 c++ 和 Java 时,我们总是希望避免不必要的复制。我发现 GetPrimitiveArrayCritical 可能会给我们很大的机会不复制数组。但我不完全理解它的限制记录
我是一名优秀的程序员,十分优秀!