Questions & Answers

SOLVED
Freecastle
I'm new here

Depcrecated Methods: LanguageInfo.getDisplayName()

Jump to solution

Hallo,

in unserem Projekt (FS 4.2) werden momentan relativ groรŸe Logs beim Deployment aufgrund einiger depcreated Methoden erzeugt. Ein Logeintrag sieht so aus:

WARN  12.10.2010 23:08:03.718 {seID=153367} (de.espirit.firstspirit.generate.SiteProduction): deprecated usage of de.espirit.firstspirit.access.store.StoreElement#getDisplayName

     inside of ...

     ...

     inside of: $CMS_IF( #nav.ref.node.getLanguageInfo(#global.language).getDisplayName() != null)$ ....

Der Code sieht an der betroffenen Stelle tatsรคchlich auch so aus: $CMS_IF(#nav.ref.node.getLanguageInfo(#global.language).getDisplayName() != null)$

In den Javadocs ist IDProvider.getLanguageInfo(Language).getDisplayName() jedoch nicht als Deprecated markiert, daher gehe ich davon aus, dass die Warnung aufgrund von Code innerhalb dieser API-Methode erzeugt wird, da hier offensichtlich intern StoreElement.getDisplayName() aufgerufen wird.

Jetzt wird man natรผrlich sagen, dass man als Lรถsung einfach IDProvider.getDisplayName(Language) verwenden soll. Das "Problem" an dieser Methode ist jedoch, dass sie einen Fallback (Masterlanguage) implementiert hat, falls es einen Wert nicht in der jeweiligen Sprache gibt. Das mag vielleicht in 95% aller Fรคlle so gewรผnscht sein, bei uns ist das aber schlecht, da wir hier sehr feingranular verschiedene IF-Bedingungen haben die je nach Konstellation (ist ein Displayname in der Sprache gesetzt oder nicht) unterschiedliche Werte zurรผckliefern sollen.

Genau das hat nรคmlich IDProvider.getLanguageInfo(Language).getDisplayName() gemacht (null falls es den Displayname in der jeweiligen Sprache nicht gibt, oder eben den Displaynamen).

Gibt es hierfรผr vielleicht noch eine andere Mรถglichkeit/Lรถsung? Natรผrlich kรถnnen wir das auch so beibehalten wie es ist, aber hier werden tatsรคchlich Unmengen an Log-Warnings generiert...

Generell wรคre es vielleicht in der API fรผr zukรผnftige Versionen gut, eine neue Methode ala IDProvider.getDisplayNameOrNull(Language) einzufรผhren, oder die IDProvider.getLanguageInfo(Language).getDisplayName()-Methode anders zu implementieren (ohne die Verwendung der depcreated method). Oder vielleicht habe ich auch selbst irgendwo einen Fehler gemacht bzw. etwas falsch bedacht und das stimmt so alles gar nicht - das wรคre natรผrlich noch besser :smileylaugh:

0 Kudos
1 Solution

Accepted Solutions
StefanSchulz
I'm new here

Hallo,

die "Deprecated"-Warnung sollte hier nicht kommen. Sie entsteht durch nicht ganz korrekte Auswertung der Hierarchie: LanguageInfo erweitert StoreElement und รผberschreibt die Methode getDisplayName(). Leider รผbernimmt die Auswertung in einigen Fรคllen die Annotation der originalen Methode.

Diese Problematik wurde intern mit der ID 90024 als Fehler aufgenommen.

Vielen Dank

Stefan

View solution in original post

0 Kudos
2 Replies
StefanSchulz
I'm new here

Hallo,

die "Deprecated"-Warnung sollte hier nicht kommen. Sie entsteht durch nicht ganz korrekte Auswertung der Hierarchie: LanguageInfo erweitert StoreElement und รผberschreibt die Methode getDisplayName(). Leider รผbernimmt die Auswertung in einigen Fรคllen die Annotation der originalen Methode.

Diese Problematik wurde intern mit der ID 90024 als Fehler aufgenommen.

Vielen Dank

Stefan

0 Kudos

Hallo,

danke fรผr die Rรผckmeldung; das wird uns sicherlich auch bei der weiteren Vorgehensweise helfen.

0 Kudos

Type a product name