development of java tools using swt and wala af hans søndergaard, viauc

13
1 Development of Java tools using SWT and WALA Infinit Højniveausprog, 10 February 2010 Hans Søndergaard Builder example SWT, - The Standard Widget Toolkit WALA, - for static analysis of Java bytecode Example: Profile generator Conclusion

Upload: infinit-innovationsnetvaerket-for-it

Post on 30-May-2015

384 views

Category:

Technology


1 download

DESCRIPTION

Oplægget blev holdt ved et seminar i InfinIT-interessegruppen højniveau sprog til indlejrede systemer den 10. februar 2010. Læs mere om interessegruppen på http://www.infinit.dk/dk/interessegrupper/hoejniveau_sprog_til_indlejrede_systemer/

TRANSCRIPT

Page 1: Development of Java tools using SWT and WALA af Hans Søndergaard, ViaUC

1

Development of Java tools using

SWT and WALA

Infinit Højniveausprog, 10 February 2010

Hans Søndergaard

• Builder example

• SWT, - The Standard Widget Toolkit

• WALA, - for static analysis of Java bytecode

• Example: Profile generator

• Conclusion

Page 2: Development of Java tools using SWT and WALA af Hans Søndergaard, ViaUC

Model: JemBuilder

2

aJile Systems:• Builder for the aJile Java processor

Page 3: Development of Java tools using SWT and WALA af Hans Søndergaard, ViaUC

GUI programming using SWT

• SWT : The Standard Widget Toolkit – designed to provide efficient, portable access

to the user-interface facilities of the operating systems on which it is implemented

– part of Eclipse– many code snippets– see http://www.eclipse.org/swt/

3

Page 4: Development of Java tools using SWT and WALA af Hans Søndergaard, ViaUC

SWT versus Swing

• No clear difference as to performance

• Swing – has more memory consumption than SWT – has all its components implemented by itself

• has much more classes to be loaded in runtime.

4

Page 5: Development of Java tools using SWT and WALA af Hans Søndergaard, ViaUC

Analysis of Java bytecode

5

• WALA provides static analysis capabilities for Java bytecode

• WALA features include:

Java type system and class hierarchy analysis Interprocedural dataflow analysis Pointer analysis and call graph construction General framework for iterative dataflow General analysis utilities and data structures A dynamic load-time instrumentation library for Java

• open source license• http://wala.sourceforge.net/wiki/index.php/Main_Page

Page 6: Development of Java tools using SWT and WALA af Hans Søndergaard, ViaUC

Example: PositiveListChecker

• Scans a list of classes to be checked• A Profile must be available

– a positive list of classes with methods• The result is written in a report file.

Generated report file:

Not on positive list ====================

(type, class, method)

(7, java/lang/Object, null)

(10, hello/NotPositiveClass, staticMethod1)

(7, hello/NotPositiveClass, null)

6

Page 7: Development of Java tools using SWT and WALA af Hans Søndergaard, ViaUC

Profile generator

7

Page 8: Development of Java tools using SWT and WALA af Hans Søndergaard, ViaUC

Profile generator: Add to Available classes

8

Page 9: Development of Java tools using SWT and WALA af Hans Søndergaard, ViaUC

Code snippet: Available classes: Add

Button addButton = new Button (composite, SWT.PUSH);

addButton.setText (" Add ");

addButton.addSelectionListener (new SelectionAdapter () {

public void widgetSelected (SelectionEvent e) {

FileDialog fileDialog = new FileDialog(fileList.getShell(), SWT.OPEN);

String[] filterNames = new String[] {"Class Files“,"Jar Files“,"All Files(*)"};

String [] filterExtensions = new String [] {"*.class", "*.jar", "*"};

...

String fileName = fileDialog.open();

... // see next slide

}

});

9

Page 10: Development of Java tools using SWT and WALA af Hans Søndergaard, ViaUC

Code snippet: Available classes: Add

String[] args = {fileName}; // class or jar file

try {

pjchecker.ClassList list = new ClassList (args); // uses WALA lib

HashSet<ClassInfo> classSet = list.getClassList();

Iterator<ClassInfo> itr = classSet.iterator();

for (; itr.hasNext(); )

{

ClassInfo info = itr.next();

if (info.methodName == null) // a class

availableClassList.addClass(info.className);

else // a method

availableClassList.addMethod(info.className, info.methodName);

}

createTree (availableListTree, availableClassList);

}

catch(...) {...}

10

Page 11: Development of Java tools using SWT and WALA af Hans Søndergaard, ViaUC

Code snippet: Using WALA classes

• com.ibm.wala.shrikeBT.shrikeCT.OfflineInstrumenter;

OfflineInstrumenter oi = new OfflineInstrumenter(); oi.parseStandardArgs(args);

• com.ibm.wala.shrikeBT.shrikeCT.ClassInstrumenter;

ClassInstrumenter ci;

oi.beginTraversal();

while ((ci = oi.nextClass()) != null)

doClass( ci.getReader() );

11

Page 12: Development of Java tools using SWT and WALA af Hans Søndergaard, ViaUC

Code snippet: Using WALA classes

• com.ibm.wala.shrikeCT.ClassReader;

String className = cr.getName();

ClassInfo c = new ClassInfo (ClassConstants.CONSTANT_Class, className, null);

classSet.add(c);

for (int i = 1; i < cr.getMethodCount(); i++) {

int accessFlag = cr.getMethodAccessFlags(i);

if ((accessFlag & 0x0002) != 0x0002) // private methods not included in list

{

if (! cr.getMethodName(i).equals("<init>") &&

!cr.getMethodName(i).equals("<clinit>")) {

c = new ClassInfo ( ClassConstants.CONSTANT_MethodRef,

className, cr.getMethodName(i));

classSet.add(c);

}

}

} 12

Page 13: Development of Java tools using SWT and WALA af Hans Søndergaard, ViaUC

Conclusion

• SWT is an alternative to Swing– part of Eclipse– less classes and less memory consumption– many code snippets

• WALA– harder to install and get down to use– but many features for static analysis of Java

bytecode

13