Перед попугаем мы бы поймали синтаксические ошибки, подобные этой:
Код: Выделить всё
@Test(expected = MultipleCompilationErrorsException.class)
public void testFailingOldWay() {
CompilerConfiguration config = new CompilerConfiguration();
config.setPluginFactory(ParserPluginFactory.antlr2());
new GroovyShell(config).parse("this is not valid");
}
Код: Выделить всё
@Test
public void testFailingNewWayDoesNotWork() {
CompilerConfiguration config = new CompilerConfiguration();
// Expect the next line to throw a compilation error, but it doesn't.
new GroovyShell(config).parse("this is not valid");
}
Код: Выделить всё
@Test(expected = MultipleCompilationErrorsException.class)
public void testNewIdea() {
CompilerConfiguration config = new CompilerConfiguration();
config.addCompilationCustomizers(new ASTTransformationCustomizer(TypeChecked.class));
new GroovyShell(config).parse("this is not valid");
}
Я прочитал документацию и посмотрел на этот пост о переполнении стека:
Встроенный Groovy: как использовать статическую проверку типов с внешними переменными?
но документация, кажется, дает мне только половину пути к Java-части, и весь пост посвящен тому, как сделать это в groovy, что я и делаю нет.
В Java параметр расширений, похоже, не существует.
Я думаю, что мне нужно создать собственную аннотацию и собственное расширение проверки типов, но я не уверен точно.
Мой план был такой:
Код: Выделить всё
import org.codehaus.groovy.transform.GroovyASTTransformationClass;
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@GroovyASTTransformationClass("flexagon.fd.model.script.AllowUnresolvedVariables")
public @interface NoUnresolvedVariablesAnnotation
{
}
Код: Выделить всё
public class AllowUnresolvedVariables
extends AbstractTypeCheckingExtension
{
public AllowUnresolvedVariables(final StaticTypeCheckingVisitor typeCheckingVisitor)
{
super(typeCheckingVisitor);
}
@Override
public boolean handleUnresolvedVariableExpression(final VariableExpression vexp)
{
return true;
}
}
Я создал простой проект на github, чтобы показать проблемы, с которыми я сталкиваюсь:
https ://github.com/karlhenselin/testGroovy
Я ценю любую вашу помощь.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ava-source
Мобильная версия