Parsovanie .java zdrojakov cestou najmensieho odporu

2010-04-14 Tema obsahu Dusan Zatkovsky
Ahoj.

Maintainujem qtjambi/maven plugin a stojim pred rozhodnutim ci/a/alebo cim 
parsovat javovske zdrojaky. V principe mi ide o extrakciu textov k prekladu ( 
pokial niekto pouziva qt/qtjambi, ide mi o nahradu toolu lupdate ).

Priklad:

public class MainClass extends SomeObject {

public void someMethod() {

String s1 = tr(string1);
String s2 = QApplication.translate(MyContext, string2);
String s3 = QCoreApplication.translate(MyContext, string3, 
5);
//String s4 = QApplication.translate(MyContext, string4, 5);
String s5 = QApplication.translate(
MyContext,
string5,
7);

/*
String s6 = tr(commented);
*/

}

class InnerClass {
void anotherMethod() {
String s6 = tr(string6);
}
}

}


Z tohoto zdrojaku potrebujem vyextrahovat parameter pre tr() a prve dva 
parametre pre QApplication.translate() a QCoreApplication.translate().

Dalej v pripade tr() potrebujem vediet meno class-y ( MainClass ), pripadne aj 
rodicovskej classy (MainClass.InnerClass).

Samozrejme k tomu spravne handlovat zakomentovane casti kodu a viacriadkove 
statementy.

Vysledkom tohoto extraktu by bolo cosi podobne tomuto:

MainClass,string1
MyContext,string2
MyContext,string3
MyContext,string5
MainClass.InnerClass,string6


Mam niekolko moznosti:
- regexp ( primitivne, nezistim meno classy )
- nejaky vlastny tokenizer ( dlhsi cas vyvoja )
- zneuzit cosi existujuce ... ?


Ako by ste na to sli vy?

Dik

-- 
Dusan


... tykajte mi


Re: Parsovanie .java zdrojakov cestou najmensieho odporu

2010-04-14 Tema obsahu Petr Prochazka
A co parsovat bytecode pres ASM http://asm.ow2.org/? Zda se mi to jako
nejlepsi cesta. Parsovat zdrojaky bych uvazoval az jako posledni vec.
Pokud to nelze, kouknul bych napr. do
Findbugshttp://findbugs.sourceforge.net/nebo
Clirr http://clirr.sourceforge.net/ jestli tam nebude neco pouzitelneho...

Petr Prochazka

2010/4/14 Dusan Zatkovsky msk.c...@gmail.com

 Ahoj.

 Maintainujem qtjambi/maven plugin a stojim pred rozhodnutim ci/a/alebo cim
 parsovat javovske zdrojaky. V principe mi ide o extrakciu textov k prekladu
 (
 pokial niekto pouziva qt/qtjambi, ide mi o nahradu toolu lupdate ).

 Priklad:

 public class MainClass extends SomeObject {

public void someMethod() {

String s1 = tr(string1);
String s2 = QApplication.translate(MyContext, string2);
String s3 = QCoreApplication.translate(MyContext,
 string3, 5);
//String s4 = QApplication.translate(MyContext, string4,
 5);
String s5 = QApplication.translate(
MyContext,
string5,
7);

/*
String s6 = tr(commented);
*/

}

class InnerClass {
void anotherMethod() {
String s6 = tr(string6);
}
}

 }


 Z tohoto zdrojaku potrebujem vyextrahovat parameter pre tr() a prve dva
 parametre pre QApplication.translate() a QCoreApplication.translate().

 Dalej v pripade tr() potrebujem vediet meno class-y ( MainClass ), pripadne
 aj
 rodicovskej classy (MainClass.InnerClass).

 Samozrejme k tomu spravne handlovat zakomentovane casti kodu a viacriadkove
 statementy.

 Vysledkom tohoto extraktu by bolo cosi podobne tomuto:

 MainClass,string1
 MyContext,string2
 MyContext,string3
 MyContext,string5
 MainClass.InnerClass,string6


 Mam niekolko moznosti:
 - regexp ( primitivne, nezistim meno classy )
 - nejaky vlastny tokenizer ( dlhsi cas vyvoja )
 - zneuzit cosi existujuce ... ?


 Ako by ste na to sli vy?

 Dik

 --
 Dusan


 ... tykajte mi



Re: Parsovanie .java zdrojakov cestou najmensieho odporu

2010-04-14 Tema obsahu Dusan Zatkovsky
On Wednesday 14 of April 2010 13:04:42 Petr Prochazka wrote:

Na to asm sa pozriem, vychadzal som z predpokladu, ze za tak masivnou podporou 
refactoringu a kontrole syntaxe v IDE-ckach je cosi, co by mozno slo 
pouzit...

D

-- 
Dusan


... tykajte mi


Re: Parsovanie .java zdrojakov cestou najmensieho odporu

2010-04-14 Tema obsahu Petr Prochazka
Idea ma podporu pro export string konstant do properties souboru (nebo jenom
konstant? presne ted nevim), ale ja osobne to zatim jeste nepouzil. Eclipse
a NB nevim, moc je nepouzivam...
Jinak o nicem takovem nevim...


Petr Prochazka

2010/4/14 Dusan Zatkovsky msk.c...@gmail.com

 On Wednesday 14 of April 2010 13:04:42 Petr Prochazka wrote:

 Na to asm sa pozriem, vychadzal som z predpokladu, ze za tak masivnou
 podporou
 refactoringu a kontrole syntaxe v IDE-ckach je cosi, co by mozno slo
 pouzit...

 D

 --
 Dusan


 ... tykajte mi



RE: Parsovanie .java zdrojakov cestou najmensieho odporu

2010-04-14 Tema obsahu Tomas Hubalek
Určitě by měl jít použít AntLR. Gramatika pro Javu už je hotová, netřeba ji 
vymýšlet znova.

A nedávno jsem narazil ještě na tohle, to by mohlo být ještě jednodušší než 
AntLR
http://code.google.com/p/javaparser/wiki/UsingThisParser

Tom

 -Original Message-
 From: konference-boun...@java.cz 
 [mailto:konference-boun...@java.cz] On Behalf Of Dusan Zatkovsky
 Sent: Wednesday, April 14, 2010 1:05 PM
 To: konference@java.cz
 Subject: Parsovanie .java zdrojakov cestou najmensieho odporu
 
 Ahoj.
 
 Maintainujem qtjambi/maven plugin a stojim pred rozhodnutim 
 ci/a/alebo cim parsovat javovske zdrojaky. V principe mi ide 
 o extrakciu textov k prekladu ( pokial niekto pouziva 
 qt/qtjambi, ide mi o nahradu toolu lupdate ).
 
 Priklad:
 
 public class MainClass extends SomeObject {
 
   public void someMethod() {
 
   String s1 = tr(string1);
   String s2 = QApplication.translate(MyContext, 
 string2);
   String s3 = 
 QCoreApplication.translate(MyContext, string3, 5);
   //String s4 = 
 QApplication.translate(MyContext, string4, 5);
   String s5 = QApplication.translate(
   MyContext,
   string5,
   7);
 
   /*
   String s6 = tr(commented);
   */
 
   }
 
   class InnerClass {
   void anotherMethod() {
   String s6 = tr(string6);
   }
   }
 
 }
 
 
 Z tohoto zdrojaku potrebujem vyextrahovat parameter pre tr() 
 a prve dva parametre pre QApplication.translate() a 
 QCoreApplication.translate().
 
 Dalej v pripade tr() potrebujem vediet meno class-y ( 
 MainClass ), pripadne aj rodicovskej classy (MainClass.InnerClass).
 
 Samozrejme k tomu spravne handlovat zakomentovane casti kodu 
 a viacriadkove statementy.
 
 Vysledkom tohoto extraktu by bolo cosi podobne tomuto:
 
 MainClass,string1
 MyContext,string2
 MyContext,string3
 MyContext,string5
 MainClass.InnerClass,string6
 
 
 Mam niekolko moznosti:
 - regexp ( primitivne, nezistim meno classy )
 - nejaky vlastny tokenizer ( dlhsi cas vyvoja )
 - zneuzit cosi existujuce ... ?
 
 
 Ako by ste na to sli vy?
 
 Dik
 
 --
 Dusan
 
 
 ... tykajte mi
 


Re: Parsovanie .java zdrojakov cestou najmensieho odporu

2010-04-14 Tema obsahu Rastislav Siekel

Eclipse má tiez( moz(nost( Externalize Strings
Týka sa to String kons(tánt, aj Stringov vo volaní metód. Ak to chcete 
jednorazovo...


Rastislav Bedo Siekel


Ing. Rastislav Siekel
Prosoft s.r.o., Kuzmányho 8, 010 01 Z(ilina, Slovakia
E-mail : sie...@prosoft.sk mailto:sie...@prosoft.sk
Tel : 041/562 54 91
Fax : 041/562 54 97
Mobil : 0905 34 00 20

On 14. 4. 2010 13:15, Petr Prochazka wrote:
Idea ma podporu pro export string konstant do properties souboru (nebo 
jenom konstant? presne ted nevim), ale ja osobne to zatim jeste 
nepouzil. Eclipse a NB nevim, moc je nepouzivam...

Jinak o nicem takovem nevim...


Petr Prochazka

2010/4/14 Dusan Zatkovsky msk.c...@gmail.com mailto:msk.c...@gmail.com

On Wednesday 14 of April 2010 13:04:42 Petr Prochazka wrote:

Na to asm sa pozriem, vychadzal som z predpokladu, ze za tak
masivnou podporou
refactoringu a kontrole syntaxe v IDE-ckach je cosi, co by mozno slo
pouzit...

D

--
Dusan


... tykajte mi




RE: Parsovanie .java zdrojakov cestou najmensieho odporu

2010-04-14 Tema obsahu Polak Michal
 Na to asm sa pozriem, vychadzal som z predpokladu, ze za tak masivnou
 podporou
 refactoringu a kontrole syntaxe v IDE-ckach je cosi, co by mozno slo
 pouzit...


Eclipse obsahuje JDT (Java Development Tools) - pomoci tohoto je v Eclipsu 
provaden refactoring a dalsi.
Mimo jine obsahuje i parser zdrojovych kodu.

http://www.vogella.de/articles/EclipseJDT/article.html

S uspechem parseruju javovske zdrojaky ve svem Eclipse pluginu.

Jak vykutat JDT do standalone java aplikace/antu/mavenu bohuzel netusim.
Treba to zadny problem neni


Na vykousani textu ze zdrojaku mozna ani nic tak sloziteho jako parser 
nepotrebujete.
Treba by vam stacil lexer.
Rozhodne nedoporucuji snazit se vykousavat texty pomoci regularnich vyrazu. :-)

Michal Polak


Re: Parsovanie .java zdrojakov cestou najmensieho odporu

2010-04-14 Tema obsahu Dusan Zatkovsky
On Wednesday 14 of April 2010 14:46:50 Dusan Zatkovsky wrote:
 Bingo! Musim uznat, ze som sa tomu venoval tak 15 minut a mam to s
 javaparser skoro hotove!

 Diky diky.

Keby to niekoho zaujimalo, moze sa inspirovat:

File src = new File(src/main/java/test/App.java);

CompilationUnit u = JavaParser.parse(src);
new MethodVisitor().visit(u, null);

// toto sa bude prekladat
tr(tr string 1);
this.tr(tr string 2);
QApplication.translate(context1, text1);
QApplication.translate(context2, text2, 3);

// toto sa nebude prekladat
// QApplication.translate(context3, text3, 3);

// toto sa tiez nebude prekladat
/* test
QApplication.translate(context4, text4, 3);
 * 
 */

private static class MethodVisitor extends VoidVisitorAdapter {

private String className;

public void visit(ClassOrInterfaceDeclaration n, Object arg) {

this.className = n.getName();
super.visit(n, arg);

}

public void visit(MethodCallExpr n, Object arg) {

String name = n.getName();
Expression scope = n.getScope();
List args = n.getArgs();

if (name.equals(tr)) {
if (args.size() == 1) {
Translator.translate( className, args.get(0).toString());
}
} else if (name.equals(translate)  scope != null  
scope.toString().equals(QApplication)) {
if (args.size() == 2) {
Translator.translate(args.get(0).toString(), 
args.get(1).toString());
} else if (args.size() == 3) {
System.out.println(args.get(2));
Translator.translate(args.get(0).toString(), 
args.get(1).toString(), new Integer(args.get(2).toString()).intValue());
}
}

super.visit(n, arg);
}
}



... ake jednoduche !


-- 
Dusan


... tykajte mi