[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Class.forName("")



Note also that as of Soot 1.2.4, there is now a third switch,
--dynamic-classes, in addition to --dynamic-path and --dynamic-packages
that allows you specify individual classes as dynamically loaded.
This is not yet documented in the VTA tutorial.

There was a student project to add the kind of constant string
propagation and inference that you describe to Soot, but I don't believe
it ever resulted in anything that could be added to the main Soot code.

Ondrej

On Tue, Dec 03, 2002 at 12:19:48PM -0500, Feng QIAN wrote:
> Hi,
> 
> You pointed out an interesting question. Soot does not statically
> inferring dyanmically loaded class names. To be conservative, Soot allows
> users provides a list of class names which possibly loaded at the rumtime.
> See the tutorial:
> http://www.sable.mcgill.ca/soot/tutorial/vta/
> 
> Cheers,
> Feng
> ---------------------------------------------------------------------
> Feng Qian                                       fqian@sable.mcgill.ca
> Sable Research Group                       http://www.sable.mcgill.ca
> School of Computer Science, McGill University        Montreal, Canada
> 
> On Tue, 3 Dec 2002, redhat wrote:
> 
> > Heya,
> >
> > 	I was again having a play with soot and noticed that when
> > optimizing somebody elses app it wouldn't optimize some of the
> > classes. (cmd: java soot.Main <cp> --whole-optimize --app project.Main)
> > After looking at the source of the project I noticed that they used
> > string concatenation to forName() classes into their app. <exactly what
> > I thought>
> > 	Obviously soot didn't follow these classes as they are defined
> > runtime, I did wonder if it was at all possible, besides from creating
> > an actual instance of the classes somewhere in the code, to optimize
> > these exceptions.
> >
> > 	Although as I read the above text I wondered if it would at all be
> > possible in some cases to `predict' what value would be passed to
> > forName(). Yet in the example below it would seem to be logical to me,
> > but perhaps very complex to code.
> >
> > <pseudocode>
> > 	String string = "com.xlnt.java.awt.";
> > 	switch(i) {
> > 		case FRAME:
> > 			string.concat("Frame");
> > 			break;
> > 		case WINDOW:
> > 			string.concat("Window");
> > 			break;
> > 		default:
> > 			string.concat("Container");
> > 			break;
> > 	}
> > 	return Class.forName(string);
> > </pseudocode>
> >
> > Thanks for any answers,
> >
> > blaze your trail
> > --
> > redhat
> >
> > 'I am become Shiva, destroyer of worlds'
> >
>