Testen für leere groovy Schließung?

stimmen
1

Ich möchte dem Anwender eine Eigenschaft groovigem Klasse lassen liefern, die eine Datei-Selektor-Verschluss ist, die ich AntBuilder die ‚Kopie‘ Aufgabe weitergeben an:

  class Foo {
    def ANT = { fileset(dir:'/tmp/tmp1') }
  }

in meinem Code, hebe ich die ANT-Eigenschaft als ‚Fant‘ und passieren zu Ant:

  ant.copy(todir:'/tmp/tmp2', fAnt)

Dies funktioniert - aber, wenn der Benutzer in einem leeren Verschluss passiert (def ANT = {}) oder mit einem Selektor, der nichts aus (vielleicht die fileset dir nicht existiert), dann es explodiert. Ich habe versucht, die Ameise Kopie mit einem Try-Catch rund um das InvokerInvocationException zu fangen, aber irgendwie die Ausnahme kommt durch sowieso ... während ich, dass das Aufspüren, ist es eine Möglichkeit, eine groovige Closure des Inhalt als String zurück zu lesen, oder zu testen, ob es leer ist?

Veröffentlicht am 30/12/2009 um 02:01
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Ein Rätsel gelöst - die Ausnahme, die ich fangen müssen, ist org.apache.tools.ant.BuildException - so kann ich nur, dass Fehler bescheren, aber die ursprüngliche Frage bleibt - ist es eine Möglichkeit, einen Verschluss der Inhalt zu untersuchen?

Beantwortet am 30/12/2009 um 02:23
quelle vom benutzer

stimmen
1

Kurz gesagt: Nein, Sie können nicht einen Verschluss in einem meanngful Weg zur Laufzeit dekompilieren. Wenn es Benutzer geliefert wird, könnte die Schließung auch eine Java-Klasse sein.

Lange Antwort: Wenn Sie eine Menge Arbeit tun mögen, können Sie in der Lage sein, aber es ist wahrscheinlich nicht wert. Der Groovy - Parser ist Teil der API, so dass , wenn Sie Zugriff auf die Quelle haben, können Sie theoretisch den AST untersuchen und festzustellen , ob der Verschluss ist leer. Schauen Sie in die SourceUnit Klasse.

Es ist mit ziemlicher Sicherheit nicht wert, obwohl der Aufwand. Du bist besser dran, die Ausnahme zu kontrollieren und das Hinzufügen einer hilfreiche Meldung wie „Sie haben möglicherweise einen leeren Verschluss oder ungültig fileset bestanden“.

Beantwortet am 30/12/2009 um 17:44
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more