Dobrý den,

typ proměnné k dispozici je. Např. toto pravidlo změní každé přiřazení do
proměnné typu long:

Assignment {
    Identifier [id: ident, instanceof: "java.lang.Long"],
    Expression [id: expr]
} ->
Assignment {
    Identifier [ref: ident],
    Literal [kind: LONG_LITERAL, value: 42]
}

Lze dělat i složitější transformace. Např. p = x - y, kde p je typu long a
x a y jsou nějaké výrazy, lze transformovat na p = y / x:

Assignment {
    Identifier [id: ident, instanceof: "java.lang.Long"],
    Binary [kind: MINUS] {
        Expression [id: x],
        Expression [id: y]
    }
} ->
Assignment {
    Identifier [ref: ident],
    Binary [kind: DIVIDE] {
        Expression [ref: y],
        Expression [ref: x]
    }
}

Př.: v = 12 - 24 bude nahrazeno v = 24 / 12 a v = x - 2 * y bude nahrazeno
v = 2 * y / x.

Jméno souboru ani číslo řádku bohužel vypsat nejde a běží to zatím pouze v
NetBeans. Nicméně NetBeans zobrazí nalezené řádky v refaktorovacím okně.

Z.
-- 
Zdenek Tronicek
FIT CTU in Prague


Filip Jirsák napsal(a):
> Dobrý večer,
> já bohužel nemám s RefactoringNG osobní zkušenost, jenom jsem viděl pár
> příkladů a připadalo mi to zajímavé ale zatím jsem neměl příležitost si to
> na něčem vyzkoušet. Jenom mne napadlo, že by to mohlo řešit váš problém.
> Ale
> jestli se nepletu, autorem nebo spoluautorem je Zdeněk Troníček, který na
> váš dotaz také reagoval, ten na vaše otázky asi bude umět odpovědět lépe.
> Z toho, co jsem o tom zaznamenal – podpora pro typy tam je, ten přiřazený
> výraz byste musel dokázat popsat pravidlem a pak popsat, na co se má
> přepsat. Přinejhorším můžete zkusit generovat automaticky skripty pro
> RefactoringNG :-) Podívejte se ještě na java.cz, najdete tam nějaké
> podcasty, blogy nebo workshopy k RefactoringNG.
> Pokud vím, je to nyní jen modul do NetBeans. Taky bych uvítal, kdyby jádro
> byla samostatná knihovna, myslím, že třeba ve spojení s anotacema a apt by
> to byl mocný nástroj.
>
> S pozdravem
>
> Filip Jirsák
>
>
> 2011/2/28 Dušan Kolář <ko...@fit.vutbr.cz>
>
>>  Dobré ráno,
>>
>>   toto vypadá slibně - chtěl jsem se zeptat, jestli je tam nějaká
>> podpora
>> pro typy - mně třeba zajímá přiřazení do proměnné typu long - tedy ne
>> konkrétní jméno, ale typ a potom potřebuji přistoupit na ten přiřazovaný
>> výraz, jako na jeho strom. Ale to asi nejde, co? :-(  A aspoň to
>> přiřazení,
>> že bych si dopsal, aby to vypsalo jméno souboru a řádek, to by nějak šlo
>> udělat? Zatím jsem koukal na příklady a tutorial a z toho mi plyne, že
>> spíše
>> ne... :-(
>>
>>   Dále jsem se chtěl zeptat, jestli to je nějak spustitelné z příkazové
>> řádky. NetBeans jsem neměl nainstalovány ani nepamatuji, tak možná přes
>> ně
>> (myšleno jako cmdline)? Nebo jen přes jejich GUI?
>>
>>   Děkuji za případné odkazy...
>>
>>   Dušan Kolář
>>
>> On 25.2.2011 11:02, Filip Jirsák wrote:
>>
>> Zdravím,
>> podívejte se na projekt RefactoringNG –
>> http://kenai.com/projects/refactoringng . Je to nástroj pro změny kódu,
>> jenom funguje trochu jinak, než popisujete – nevyvolává váš kód, místo
>> toho
>> popíšete, co se má čím nahradit.
>>
>> S pozdravem
>>
>> Filip Jirsák
>>
>>
>> 2011/2/25 Dušan Kolář <ko...@fit.vutbr.cz>
>>
>>> Zdravím konferenci,
>>>
>>>  před lety jsem používal nástroj Spoon ( http://spoon.gforge.iniria.fr/
>>> )
>>> celkem úspěšně na změny ve zdrojácích, které se generovaly (ne zcela
>>> korektně) a bylo třeba je změnit.
>>>
>>>  Zdá se, že tento projekt je ale více jak 3 roky mrtev. Nepoužíváte,
>>> nebo
>>> nevíte někdo o něčem podobném, co by aktivně žilo?  Nejde mi jen o to
>>> naparsovat Javu, ale mít možnost se zaháčkovat tak, že mi vyvolá třeba
>>> pro
>>> každý přiřazovací příkaz můj kód, já potom změním ten kód a nakonec
>>> nechám
>>> opět vygenerovat Javovský kód, ale upravený.
>>>
>>>  Nevím, jestli to prostě jen blbě googlám, nebo mám smůlu... :-\  Ale
>>> psat
>>> se mi to celé nechce. :-(
>>>
>>>
>>>  Pěkný den,
>>>
>>>    Dušan
>>>
>>>
>>
>

Odpovedet emailem