Re: ConstantNameAndType...how do get the type?
"Dave Brosius" <[email protected]>
| Newsgroups | gmane.comp.jakarta.bcel.user |
|---|---|
| Message-ID | <00ae01c4f9bf$636e4fa0$387596d1@MBFG> |
Yes, i bleieve CONSTANT_NameAndType can signify fields or methods. I'm not sure at this level (getTag), you can differentiate, but could be wrong. ----- Original Message ----- From: "Dean Hiller" <[email protected]> To: "BCEL Users List" <[email protected]> Sent: Thursday, January 13, 2005 2:55 PM Subject: Re: ConstantNameAndType...how do get the type? > Actually after the -g option is added, it works great, but I am confused > now > and this is more just for my knowledge. > > The one thing I don't get is I have a case statement for all the Constants > in the ConstantPool > > Notice this one case statement....(My question is in the comments in the > below code...) > > byte tag = c.getTag(); > switch(tag) { > case Constants.CONSTANT_Class: > ///some stuff.... > break; > case Constants.CONSTANT_Fieldref: > //some stuff > break; > case Constants.CONSTANT_NameAndType: > //Here I seem to be getting field signatures and method > signatures > //ie. I can use getReturnTypes but it will throw an exception on > some and on others I can use the code you gave me previously. > // How do I tell if it is a field signature or method > signature??? > break; > > thanks, > dean > > > ----- Original Message ----- > From: "Dave Brosius" <[email protected]> > To: "BCEL Users List" <[email protected]> > Sent: Thursday, January 13, 2005 8:50 AM > Subject: Re: ConstantNameAndType...how do get the type? > > >> Oh, ()V is a method signature. >> >> Use >> >> Type getReturnType(String signature) >> or >> Type[] getArgumentTypes(String signature) >> >> >> ----- Original Message ----- >> From: "Dean Hiller" <[email protected]> >> To: "BCEL Users List" <[email protected]> >> Sent: Thursday, January 13, 2005 9:53 AM >> Subject: Re: ConstantNameAndType...how do get the type? >> >> >> > thanks much for the hint, though that didn't seem to work as other >> > constants >> > then caused what looks like the same exception even though the code is >> > different. >> > >> > Here is the code with line numbers... >> > >> > 193 String sig5 = ((ConstantNameAndType)c).getSignature(pool); >> > 194 log("type="+Type.getType(sig5)); >> > >> > Here is the exception...notice the exception coming out of line > 194....(Is >> > there some way to prevent this? This looks like the same exception I > got >> > with my previous code) >> > >> > 1) >> > > testLocalVarDepend(net.sf.antcontrib.design.VerifyDesignTest)C:\ROOT\views\s >> > fviews\ant-contrib2\test\resources\design\verifydesign.xml:102: >> > org.apache.bcel.classfile.ClassFormatException: Invalid method > signature: >> > ()V >> > >> > at org.apache.tools.ant.Task.perform(Task.java:373) >> > >> > at org.apache.tools.ant.Target.execute(Target.java:341) >> > >> > at org.apache.tools.ant.Target.performTasks(Target.java:369) >> > >> > at org.apache.tools.ant.Project.executeTarget(Project.java:1214) >> > >> > at >> > org.apache.tools.ant.BuildFileTest.executeTarget(BuildFileTest.java:232) >> > >> > at >> > > net.sf.antcontrib.design.VerifyDesignTest.testLocalVarDepend(VerifyDesignTes >> > t.java:116) >> > >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> > >> > at >> > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 >> > ) >> > >> > at >> > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl >> > .java:25) >> > >> > at >> > > net.sf.antcontrib.design.VerifyDesignTest.main(VerifyDesignTest.java:205) >> > >> > Caused by: org.apache.bcel.classfile.ClassFormatException: Invalid > method >> > signature: ()V >> > >> > at org.apache.bcel.classfile.Utility.typeOfSignature(Utility.java:1024) >> > >> > at org.apache.bcel.generic.Type.getType(Type.java:158) >> > >> > at >> > > net.sf.antcontrib.design.VerifyDesign.processConstant(VerifyDesign.java:194) >> > >> > at >> > > net.sf.antcontrib.design.VerifyDesign.processConstantPool(VerifyDesign.java: >> > 152) >> > >> > at >> > > net.sf.antcontrib.design.VerifyDesign.verifyClassAdheresToDesign(VerifyDesig >> > n.java:136) >> > >> > at net.sf.antcontrib.design.VerifyDesign.execute(VerifyDesign.java:94) >> > >> > at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) >> > >> > at org.apache.tools.ant.Task.perform(Task.java:364) >> > >> > ... 21 more >> > >> > --- Nested Exception --- >> > >> > org.apache.bcel.classfile.ClassFormatException: Invalid method > signature: >> > ()V >> > >> > at org.apache.bcel.classfile.Utility.typeOfSignature(Utility.java:1024) >> > >> > at org.apache.bcel.generic.Type.getType(Type.java:158) >> > >> > at >> > > net.sf.antcontrib.design.VerifyDesign.processConstant(VerifyDesign.java:194) >> > >> > at >> > > net.sf.antcontrib.design.VerifyDesign.processConstantPool(VerifyDesign.java: >> > 152) >> > >> > at >> > > net.sf.antcontrib.design.VerifyDesign.verifyClassAdheresToDesign(VerifyDesig >> > n.java:136) >> > >> > at net.sf.antcontrib.design.VerifyDesign.execute(VerifyDesign.java:94) >> > >> > at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) >> > >> > at org.apache.tools.ant.Task.perform(Task.java:364) >> > >> > at org.apache.tools.ant.Target.execute(Target.java:341) >> > >> > at org.apache.tools.ant.Target.performTasks(Target.java:369) >> > >> > at org.apache.tools.ant.Project.executeTarget(Project.java:1214) >> > >> > at >> > org.apache.tools.ant.BuildFileTest.executeTarget(BuildFileTest.java:232) >> > >> > at >> > > net.sf.antcontrib.design.VerifyDesignTest.testLocalVarDepend(VerifyDesignTes >> > t.java:116) >> > >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> > >> > at >> > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 >> > ) >> > >> > at >> > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl >> > .java:25) >> > >> > at >> > > net.sf.antcontrib.design.VerifyDesignTest.main(VerifyDesignTest.java:205) >> > >> > >> > ----- Original Message ----- >> > From: "Dave Brosius" <[email protected]> >> > To: "BCEL Users List" <[email protected]> >> > Sent: Wednesday, January 12, 2005 11:03 PM >> > Subject: Re: ConstantNameAndType...how do get the type? >> > >> > >> >> Can't you use >> >> ConstantNameAndType.getSignature(pool), and then >> >> Type getType(String signature) >> >> >> >> >> >> >> >> >> >> I am trying to get the type information out of of a >> >> ConstantNameAndType... >> >> >> >> here is my code so far >> >> String temp = >> >> pool.constantToString(((ConstantNameAndType)c).getNameIndex(), >> >> Constants.CONSTANT_Utf8) >> >> + " " >> >> + >> >> pool.constantToString(((ConstantNameAndType)c).getSignatureIndex(), >> >> Constants.CONSTANT_Utf8); >> >> log("temp="+temp); >> >> String temp2 = >> >> pool.constantToString(((ConstantNameAndType)c).getSignatureIndex(), >> >> Constants.CONSTANT_Utf8); >> >> log("temp2="+temp2); >> >> //log("temp2a="+Utility.typeOfSignature(temp2)); >> >> log("temp3="+Utility.compactClassName(temp2)); >> >> >> >> which prints the following..... >> >> const[18]=c Lmod/dummy/DummyClass; >> >> inst=org.apache.bcel.classfile.ConstantNameAndType >> >> >> >> temp=c Lmod/dummy/DummyClass; >> >> >> >> temp2=Lmod/dummy/DummyClass; >> >> >> >> temp3=Lmod.dummy.DummyClass; >> >> >> >> I am just trying to get the mod.dummy.DummyClass string. how do I do > so? >> >> If I uncomment the temp2a above it breaks because of other >> >> ConstantNameAndTypes like the following message when I uncomment >> >> temp2a >> >> above..... >> >> >> >> const[18]=<init> ()V >> >> inst=org.apache.bcel.classfile.ConstantNameAndType >> >> >> >> temp=<init> ()V >> >> >> >> temp2=()V >> >> >> >> E >> >> >> >> Time: 2.244 >> >> >> >> There was 1 error: >> >> >> >> 1) >> >> >> > > testLocalVarDepend(net.sf.antcontrib.design.VerifyDesignTest)C:\ROOT\views\s >> > fviews\ant-contrib2\test\resources\design\verifydesign.xml:102: >> >> org.apache.bcel.classfile.ClassFormatException: Invalid method > signature: >> >> ()V >> >> >> >> at org.apache.tools.ant.Task.perform(Task.java:373) >> >> >> >> at org.apache.tools.ant.Target.execute(Target.java:341) >> >> >> >> at org.apache.tools.ant.Target.performTasks(Target.java:369) >> >> >> >> at org.apache.tools.ant.Project.executeTarget(Project.java:1214) >> >> >> >> at >> > org.apache.tools.ant.BuildFileTest.executeTarget(BuildFileTest.java:232) >> >> >> >> at >> >> >> > > net.sf.antcontrib.design.VerifyDesignTest.testLocalVarDepend(VerifyDesignTes >> > t.java:116) >> >> >> >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> >> >> >> at >> >> >> > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 >> > ) >> >> >> >> at >> >> >> > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl >> > .java:25) >> >> >> >> at >> > > net.sf.antcontrib.design.VerifyDesignTest.main(VerifyDesignTest.java:205) >> >> >> >> Caused by: org.apache.bcel.classfile.ClassFormatException: Invalid > method >> >> signature: ()V >> >> >> >> at >> >> org.apache.bcel.classfile.Utility.typeOfSignature(Utility.java:1024) >> >> >> >> at >> >> >> > > net.sf.antcontrib.design.VerifyDesign.processConstant(VerifyDesign.java:189) >> >> >> >> at >> >> >> > > net.sf.antcontrib.design.VerifyDesign.processConstantPool(VerifyDesign.java: >> > 151) >> >> >> >> at >> >> >> > > net.sf.antcontrib.design.VerifyDesign.verifyClassAdheresToDesign(VerifyDesig >> > n.java:135) >> >> >> >> at net.sf.antcontrib.design.VerifyDesign.execute(VerifyDesign.java:93) >> >> >> >> at >> >> org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) >> >> >> >> at org.apache.tools.ant.Task.perform(Task.java:364) >> >> >> >> ... 21 more >> >> >> >> --- Nested Exception --- >> >> >> >> org.apache.bcel.classfile.ClassFormatException: Invalid method > signature: >> >> ()V >> >> >> >> at >> >> org.apache.bcel.classfile.Utility.typeOfSignature(Utility.java:1024) >> >> >> >> at >> >> >> > > net.sf.antcontrib.design.VerifyDesign.processConstant(VerifyDesign.java:189) >> >> >> >> at >> >> >> > > net.sf.antcontrib.design.VerifyDesign.processConstantPool(VerifyDesign.java: >> > 151) >> >> >> >> at >> >> >> > > net.sf.antcontrib.design.VerifyDesign.verifyClassAdheresToDesign(VerifyDesig >> > n.java:135) >> >> >> >> at net.sf.antcontrib.design.VerifyDesign.execute(VerifyDesign.java:93) >> >> >> >> at >> >> org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) >> >> >> >> at org.apache.tools.ant.Task.perform(Task.java:364) >> >> >> >> at org.apache.tools.ant.Target.execute(Target.java:341) >> >> >> >> at org.apache.tools.ant.Target.performTasks(Target.java:369) >> >> >> >> at org.apache.tools.ant.Project.executeTarget(Project.java:1214) >> >> >> >> at >> > org.apache.tools.ant.BuildFileTest.executeTarget(BuildFileTest.java:232) >> >> >> >> at >> >> >> > > net.sf.antcontrib.design.VerifyDesignTest.testLocalVarDepend(VerifyDesignTes >> > t.java:116) >> >> >> >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> >> >> >> at >> >> >> > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 >> > ) >> >> >> >> at >> >> >> > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl >> > .java:25) >> >> >> >> at >> > > net.sf.antcontrib.design.VerifyDesignTest.main(VerifyDesignTest.java:205) >> >> >> >> thanks for any help, >> >> >> >> dean >> >> >> >> >> >> >> >> --------------------------------------------------------------------- >> >> To unsubscribe, e-mail: [email protected] >> >> For additional commands, e-mail: [email protected] >> >> >> > >> > >> > --------------------------------------------------------------------- >> > To unsubscribe, e-mail: [email protected] >> > For additional commands, e-mail: [email protected] >> > >> > >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >