[
http://jira.jboss.com/jira/browse/JASSIST-33?page=all ]
Shigeru Chiba closed JASSIST-33.
--------------------------------
Resolution: Done
In Java, if a filed name is the same as a package name,
the package is not visible at all in the class declaring that
field. So this issue is not a bug.
However, because this is inconvenient, I extended
Javassist's compiler so that the package will be visible.
The compiler first tries to compile by assuming the field name
represents a field, then if it fails, it tries again by assuming the
field name represents the package name.
Javassist gets confused when creating method wrappers for fields that
exist in the package name
-----------------------------------------------------------------------------------------------
Key: JASSIST-33
URL:
http://jira.jboss.com/jira/browse/JASSIST-33
Project: Javassist
Issue Type: Bug
Reporter: Kabir Khan
Assigned To: Shigeru Chiba
Hi Chiba,
There is a problem with weaving a class:
package org.jboss.test.aop.regression.jbaop398nosuchfield;
public class POJO
{
private static String org = "Fail";
public int method()
{
return 0;
}
//Want to weave in this method
public String org_r_aop()
{
return
org.jboss.test.aop.regression.jbaop398nosuchfield.POJO.org;
}
}
We get this stack trace:
javassist.CannotCompileException: [source error] no such field: jboss
at javassist.CtBehavior.setBody(CtBehavior.java:364)
at javassist.CtBehavior.setBody(CtBehavior.java:333)
at
org.jboss.aop.instrument.OptimizedFieldAccessTransformer.buildWrappers(OptimizedFieldAccessTransformer.java:278)
at
org.jboss.aop.instrument.OptimizedFieldAccessTransformer.doBuildFieldWrappers(OptimizedFieldAccessTransformer.java:100)
at
org.jboss.aop.instrument.FieldAccessTransformer.buildFieldWrappers(FieldAccessTransformer.java:102)
at org.jboss.aop.instrument.Instrumentor.transform(Instrumentor.java:724)
at org.jboss.aop.ClassicWeavingStrategy.translate(ClassicWeavingStrategy.java:107)
at org.jboss.aop.AspectManager.translate(AspectManager.java:916)
at org.jboss.aop.AspectManager.transform(AspectManager.java:859)
at org.jboss.aop.standalone.AOPTransformer.aspectTransform(AOPTransformer.java:88)
at org.jboss.aop.standalone.AOPTransformer.transform(AOPTransformer.java:75)
at sun.instrument.TransformerManager.transform(TransformerManager.java:122)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:155)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at
org.jboss.test.aop.regression.jbaop398nosuchfield.SimpleTestCase.test(SimpleTestCase.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at
org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: compile error: no such field: jboss
at javassist.compiler.MemberResolver.lookupField(MemberResolver.java:302)
at javassist.compiler.MemberResolver.lookupFieldByJvmName(MemberResolver.java:288)
at javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:829)
at javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:770)
at javassist.compiler.TypeChecker.atExpr(TypeChecker.java:571)
at javassist.compiler.ast.Expr.accept(Expr.java:67)
at javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:827)
at javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:770)
at javassist.compiler.TypeChecker.atExpr(TypeChecker.java:571)
at javassist.compiler.ast.Expr.accept(Expr.java:67)
at javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:827)
at javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:770)
at javassist.compiler.TypeChecker.atExpr(TypeChecker.java:571)
at javassist.compiler.ast.Expr.accept(Expr.java:67)
at javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:827)
at javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:770)
at javassist.compiler.TypeChecker.atExpr(TypeChecker.java:571)
at javassist.compiler.ast.Expr.accept(Expr.java:67)
at javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:827)
at javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:770)
at javassist.compiler.TypeChecker.atExpr(TypeChecker.java:571)
at javassist.compiler.ast.Expr.accept(Expr.java:67)
at javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:827)
at javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:770)
at javassist.compiler.TypeChecker.atExpr(TypeChecker.java:571)
at javassist.compiler.ast.Expr.accept(Expr.java:67)
at javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:827)
at javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:770)
at javassist.compiler.TypeChecker.atExpr(TypeChecker.java:571)
at javassist.compiler.ast.Expr.accept(Expr.java:67)
at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:235)
at javassist.compiler.CodeGen.compileExpr(CodeGen.java:222)
at javassist.compiler.CodeGen.atReturnStmnt2(CodeGen.java:591)
at javassist.compiler.JvstCodeGen.atReturnStmnt(JvstCodeGen.java:424)
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:356)
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)
at javassist.compiler.CodeGen.atMethodBody(CodeGen.java:285)
at javassist.compiler.Javac.compileBody(Javac.java:212)
at javassist.CtBehavior.setBody(CtBehavior.java:358)
... 45 more
[error] failed to transform: org.jboss.test.aop.regression.jbaop398nosuchfield.POJO.. Do
verbose mode if you want full stack trace.
I think it might have to do with the field having the same name as one of the package
name elements, but am not sure!
Cheers,
Kabir
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira