přetypování (java.sql.Timestamp do java.util.Date)

Oto Buchta tapik na buchtovi.cz
Pondělí Září 22 17:39:03 CEST 2008


On Mon, Sep 22, 2008 at 02:38:51PM +0200, Stöhr Miroslav RNDr. Ph.D. wrote:
> Zdravím kolegy,
> 
> mám následující otázku: V poměrně rozsáhlém projektu se nám vyskytl problém v tom, že v jednom modulu dochází k následující konstrukci
> 
> 	myObject.setDateAttribute(originalObject.getTimestampAttribute);  //*1
> 
> tj. dochází k tomu, že do atributu typu java.util.Date je vložen atribut java.sql.Timestamp (potomek java.util.Date, takže je vše OK).
> 
> Problém je v tom, že v jiném modulu, kam se dostane myObjekt, začne vadit, že 
> 
> 	java.util.Date myObject.getDateAttribute();
> 
> vrátí java.sql.Timestamp (díky používání jedné interní knihovny, kterou bohužel nemohu jednoduše změnit). 
> 
> Oprava je jednoduchá -- do místa //*1 vložím jednoduchou konverzi z Timestamp do Date (kupř. new Date(timestamp.getTime()), nebo tak něco podobného). 
> 
> No a teď můj dotaz: Jak co nejrychleji vyhledat v kódu všechna místa typu //*1 ? Mohou to být v principu jednotky výskytů mezi řádově tisícovkami podobných volání v mnoha stovkách tříd. 
> 
> Díky za každý nápad (kromě ručního procházení :-))

TMTOWDI

Hodne zalezi na tom, co vlastne hledate. Rekl bych, ze nalezeni vsech mist,
kde je jako parametr pouzit java.sql.Timestamp a ocekava se java.util.Date,
bude asi hodne komplikovane.

Zkusil bych nasledujici:
a) omezit se na vyskyt vsech pouziti setteru, nechat si je vyhledat a vysledek
grepnout na getTimeStampAttribute
b) opacny postup - pouziti getteru a grep na setter
c) pouzit klasicky grep na ony dva retezce na radku

Ja osobne bych volil verzi a) s nasledujicim postupem
1) otevrit IntelliJ ;-)
2) jit na radek //*1
3) na setter metode dat Alt-F7 (Find Usages)
4a) pokud je malo vysledku, projdu rucne
4b) v okne vysledku dat expand all -> export to text-> save
5) otevrit textak ve VIM a /getTimeStampAttribute

Oto 'tapik' Buchta
 




Další informace o konferenci Konference