。我试图从0写一个只使用常量使用jdt的类。当我尝试将修饰符设置为字段声明时出现错误
错误:线程“main”中的异常java.lang.UnsupportedOperationException:仅在JLS2 AST中支持操作。
我尝试的代码
public static void createConstantClasses () throws MalformedTreeException, BadLocationException, org.eclipse.jface.text.BadLocationException{
//todosLiterales();
List<String> lista = getPackages();
String filename;
for(int i = 0;i< lista.size();i++){
AST ast = AST.newAST(AST.JLS3);
CompilationUnit cu = ast.newCompilationUnit();
PackageDeclaration p1 = ast.newPackageDeclaration();
p1.setName(ast.newSimpleName("constante"));
cu.setPackage(p1);
TypeDeclaration td = ast.newTypeDeclaration();
if(lista.get(i).lastIndexOf('.')>=0){
filename="Constant"+lista.get(i).substring(lista.get(i).lastIndexOf('.')+1
, lista.get(i).lastIndexOf(';'));
td.setName(ast.newSimpleName(filename));
}else{
filename="Constant"+lista.get(i).substring(8
, lista.get(i).lastIndexOf(';'));
td.setName(ast.newSimpleName(filename));
}
for(int j =0;j<getVisitadores().size();j++ ){
if(getVisitadores().get(j).packageori.compareTo(lista.get(i))==0){
int listasize=getVisitadores().get(j).getListaStringliterales().size();
for(int k=0; k<listasize;k++){
ModifierKeyword keyword = null;
Modifier modifi =ast.newModifier(keyword.FINAL_KEYWORD);
Type tipo = ast.newSimpleType(ast.newSimpleName("String"));
VariableDeclarationFragment fragment = ast.newVariableDeclarationFragment();
System.out.println(getVisitadores().get(j).listaStringliterales.get(k).nombreVar);
fragment.setName(ast.newSimpleName(getVisitadores().get(j).listaStringliterales.get(k).nombreVar));
StringLiteral ini = ast.newStringLiteral();
ini.setLiteralValue((String) getVisitadores().get(j).listaStringliterales.get(k).value);
fragment.setInitializer(ini);
FieldDeclaration campo =ast.newFieldDeclaration(fragment);
campo.setModifiers(48);
campo.setType(tipo);
//campo.setProperty("public", Modifier.PUBLIC);
//campo.setModifiers(modifi);
td.bodyDeclarations().add(campo);
System.out.println(td.bodyDeclarations());
}//final de bucle
}//final del if
//System.out.println(cu);
}cu.types().add(td);//final 2 bucle
//cu.types().add(td);
System.out.println(cu.toString());
System.out.println(cu);
Document documento = new Document (cu.toString());
escribirArchivo(filename+".java",documento);
}
}`
当我玩它时我得到的是这样的
package constante;
class Constantcore {
String StringCTMain0="soy el original ";
String StringCTMain1="SOME.FUCKINF.PATH";
String StringCTMain2="\\.";
String StringCTMain3="JAVA.UTIL.BBVa";
String StringCTMain4="es el visitador ";
String StringCTMain5="y tiene ";
String StringCTMain6="literales";
String StringCTMain7="vistador ";
String StringCTMain8=" litereal ";
String StringCTMain9="constante";
String StringCTMain10="Constant";
String StringCTMain11="String";
String StringCTMain12=".java";
String StringCTMain13=".";
String StringCTMain14="src";
String StringCTMain15="IOException";
String StringCTVisitador0="default";
String StringCTVisitador1="paquete original en el visistador ";
String StringCTVisitador2="meanwhile at visitmethod ";
String StringCTVisitador3="StringCT";
String StringCTVisitador4="IOException";
}
我期望实现的是这样的
package constante;
class Constantcore {
public final static String StringCTMain0="soy el original ";
public final static String StringCTMain1="SOME.FUCKINF.PATH";
public final static String StringCTMain2="\\.";
public final static String StringCTMain3="JAVA.UTIL.BBVa";
public final static String StringCTMain4="es el visitador ";
public final static String StringCTMain5="y tiene ";
public final static String StringCTMain6="literales";
public final static String StringCTMain7="vistador ";
public final static String StringCTMain8=" litereal ";
public final static String StringCTMain9="constante";
public final static String StringCTMain10="Constant";
public final static String StringCTMain11="String";
public final static String StringCTMain12=".java";
public final static String StringCTMain13=".";
public final static String StringCTMain14="src";
public final static String StringCTMain15="IOException";
public final static String StringCTVisitador0="default";
public final static String StringCTVisitador1="paquete original en el visistador ";
public final static String StringCTVisitador2="meanwhile at visitmethod ";
public final static String StringCTVisitador3="StringCT";
public final static String StringCTVisitador4="IOException";
}
有人能帮忙吗? thx提前
已解决:需要更改此行
campo.setModifiers(48);
为此并重复我们想要添加的每个修饰符
ModifierKeyword amp= ModifierKeyword.PUBLIC_KEYWORD;
campo.modifiers().add(ast.newModifier(amp));