Vor Parrot würden wir fangen Syntaxfehler wie dieser:
Code: Select all
@Test(expected = MultipleCompilationErrorsException.class)
public void testFailingOldWay() {
CompilerConfiguration config = new CompilerConfiguration();
config.setPluginFactory(ParserPluginFactory.antlr2());
new GroovyShell(config).parse("this is not valid");
}
Code: Select all
@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");
}
Code: Select all
@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");
}
Ich habe die Dokumente gelesen und mir diesen Stapelüberlauf-Beitrag angesehen:
Embedded Groovy: Wie verwende ich die statische Typprüfung mit externen Variablen?
aber die Dokumente scheinen mir nur halbwegs für den Java-Teil zu helfen, und in dem Beitrag geht es nur darum, es in Groovy zu machen, was ich bin nicht.
In Java scheint der Erweiterungsparameter nicht zu existieren.
Ich denke, dass ich eine benutzerdefinierte Annotation und eine benutzerdefinierte Typprüfungserweiterung erstellen muss, aber das ist der Fall Ich bin mir nicht genau sicher.
Mein Plan war folgender:
Code: Select all
import org.codehaus.groovy.transform.GroovyASTTransformationClass;
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@GroovyASTTransformationClass("flexagon.fd.model.script.AllowUnresolvedVariables")
public @interface NoUnresolvedVariablesAnnotation
{
}
Code: Select all
public class AllowUnresolvedVariables
extends AbstractTypeCheckingExtension
{
public AllowUnresolvedVariables(final StaticTypeCheckingVisitor typeCheckingVisitor)
{
super(typeCheckingVisitor);
}
@Override
public boolean handleUnresolvedVariableExpression(final VariableExpression vexp)
{
return true;
}
}
Ich habe ein einfaches Projekt auf Github erstellt, um die Probleme zu zeigen, die ich habe:
https ://github.com/karlhenselin/testGroovy
Ich freue mich über jede Hilfe, die Sie leisten können.