Я пишу простой плагин Eclipse, который является генератором кода.Пользователь может выбрать существующий метод, а затем сгенерировать новый тестовый метод в соответствующем тестовом файле с помощью JDT.
Предположим, что тестовые файлы уже существуют, и их содержимое:
public class UserTest extends TestCase {
public void setUp(){}
public void tearDown(){}
public void testCtor(){}
}
СейчасЯ сгенерировал тестовый код:
/** complex javadoc */
public void testSetName() {
....
// complex logic
}
Я хочу добавить его к существующему UserTest
.Я должен кодировать:
String sourceContent = FileUtils.readFileToString("UserTest.java", "UTF-8");
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setSource(content.toCharArray());
CompilationUnit testUnit = (CompilationUnit) parser.createAST(null);
String newTestCode = "public void testSetName() { .... }";
// get the first type
final List<TypeDeclaration> list = new ArrayList<TypeDeclaration>();
testUnit .accept(new ASTVisitor() {
@Override
public boolean visit(TypeDeclaration node) {
list.add(node);
return false;
}
});
TypeDeclaration type = list.get(0);
type.insertMethod(newTestCode); // ! no this method: insertMethod
Но такого метода нет insertMethod
.
Я знаю два варианта:
- Не использовать
jdt
, просто чтобы вставить новый код в тестовый файл, перед последним }
- используйте
testUnit.getAST().newMethodDeclaration()
для создания метода, а затем обновите его.
Но я неМне не нравятся эти две опции, я надеюсь, что есть что-то вроде insertMethod
, которое может позволить мне добавить некоторый текст в блок компиляции теста или преобразовать код теста в MethodDeclaration, а затем добавить к блоку компиляции теста.
ОБНОВЛЕНИЕ
Я вижу ответ nonty и обнаружил, что в jdt есть два CompilationUnit
.Один org.eclipse.jdt.internal.core.CompilationUnit
, другой org.eclipse.jdt.core.dom.CompilationUnit
.Я использовал второй, а nonty использовал первый.
Мне нужно дополнить свой вопрос: сначала я хочу создать плагин eclipse, но позже мне было трудно создать сложный интерфейс с помощью SWTПоэтому я решил создать веб-приложение для генерации кода.Я скопировал эти jdt-баночки из затмения, так что я могу просто использовать org.eclipse.jdt.core.dom.CompilationUnit
.
Есть ли способ использовать org.eclipse.jdt.internal.core.CompilationUnit
вне затмения?