Ich versuche, einen Java-Methodennamen mit einer Regex zu vergleichen, aber ich bin nicht sicher, wie man es in Rascal macht. Ich möchte eine Methode abgleichen, deren Name mit test
beginnt (z. B. JUnit 3-Testfälle), und sie in einen JUnit 4-Testfall mit der @Test
Annotation umwandeln und das test
Präfix entfernen. Mein Code sieht wie folgt aus:Übereinstimmender deklarierter Methodenname zu Regex
public tuple[int, CompilationUnit] refactorJUnitTestCaseDeclaration(CompilationUnit cu) {
int total = 0;
println(cu);
CompilationUnit unit = visit(cu) {
case(MethodDeclaration)`public void <Identifier name>() <MethodBody body>`: {
if(/test[A-Z]*/ := name) {
total += 1;
newName = name[4..];
insert (MethodDeclaration)`@Test public void <Identifier newName>() <MethodBody body>`;
};
}
};
return <total, unit>;
}
Dieser Code führt zu dem folgenden Fehler:
Expected str, but got Identifier
Gibt es eine Möglichkeit, die name
Methodenbezeichner als String zuzugreifen, so kann ich versuchen, es zu entsprechen? Wenn nicht, was ist der beste Weg, um diese Aufgabe zu erfüllen?
Es funktionierte großartig! Vielen Dank! – urielSilva