Ich habe viel Code, der Java Reflection verwendet, um beliebige benutzerdefinierte Methoden auf Java-Objekten als Teil einer DSL aufzurufen.
Allerdings sind viele dieser Java-Objekte in der Praxis Scala-Objekte, und einige der Methoden auf ihnen sind mit der Annotation Scala @deprecated
gekennzeichnet. Leider kann der Annotationsmechanismus von Java Scala-Annotationen nicht sehen, und bis Scala 2.10 gab es keinen bequemen Weg (den ich kenne?), Um auf diese Annotationen zuzugreifen.
Ich habe endlich auf 2.10 aufgerüstet und würde gerne Depreciation Warnings von meinem DSL ausgeben. Ich möchte jedoch nicht den gesamten Evaluator umschreiben (zumindest jetzt), um Scala Reflection zu verwenden, also gibt es einen bequemen Weg, von einem java.lang.reflect.Method
zu etwas zu gehen, mit dem ich Scala Reflektion nutzen kann, um herauszufinden, ob Scala-Methode in Frage ist veraltet? Oder muss ich eine Menge der vorhandenen Methodenauflösungslogik unter Verwendung der Scala-Reflexion duplizieren, bevor ich an diese Information gelangen kann?
Es sieht so aus, als ob eine JavaToScala
-Klasse in der Scala-Reflexion existiert, die eine methodToScala
-Methode enthält, die das getan hat, was ich will. Die einzige Spur, die ich finden kann, ist hier , in einem Google-Code-Projekt. Warum wurde die Funktionalität aus der Kernreflexion entfernt? Oder ist es immer noch unter einem anderen Namen?
Bearbeiten: Es sieht so aus, als ob der Code in scala.reflect.runtime.JavaMirrors
weiterlebt, aber leider ist er privat (es gibt noch ein weiteres JavaMirrors
, das Teil der öffentlichen API ist, aber nichts davon bietet.) I kann nicht für das Leben von mir herausfinden, wenn es einen "Weg" von Aufrufen durch eine öffentliche API gibt, der mich ganz hinunter zum privaten methodAsScala
begraben tief in der privaten JavaMirrors
bringt. Es ist frustrierend, um es gelinde auszudrücken: (
Tags und Links scala reflection scala-java-interop