[jboss-cvs] javassist/src/main/javassist/compiler ...
Shigeru Chiba
chiba at is.titech.ac.jp
Fri May 11 09:37:19 EDT 2007
User: chiba
Date: 07/05/11 09:37:19
Modified: src/main/javassist/compiler TypeChecker.java
Log:
fixed JIRA JASSIST-33
Revision Changes Path
1.16 +45 -13 javassist/src/main/javassist/compiler/TypeChecker.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: TypeChecker.java
===================================================================
RCS file: /cvsroot/jboss/javassist/src/main/javassist/compiler/TypeChecker.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- TypeChecker.java 13 Jun 2006 02:33:13 -0000 1.15
+++ TypeChecker.java 11 May 2007 13:37:19 -0000 1.16
@@ -822,12 +822,9 @@
mem.setField(f);
return f;
}
- else if (op == '.')
+ else if (op == '.') {
try {
e.oprand1().accept(this);
- if (exprType == CLASS && arrayDim == 0)
- return resolver.lookupFieldByJvmName(className,
- (Symbol)e.oprand2());
}
catch (NoFieldException nfe) {
if (nfe.getExpr() != e.oprand1())
@@ -837,21 +834,56 @@
* If EXPR might be part of a qualified class name,
* lookupFieldByJvmName2() throws NoFieldException.
*/
- Member fname = (Member)e.oprand2();
- String jvmClassName = nfe.getField();
- CtField f = resolver.lookupFieldByJvmName2(jvmClassName,
- fname, expr);
- e.setOperator(MEMBER);
- e.setOprand1(new Symbol(MemberResolver.jvmToJavaName(
- jvmClassName)));
- fname.setField(f);
- return f;
+ return fieldAccess2(e, nfe.getField());
+ }
+
+ CompileError err = null;
+ try {
+ if (exprType == CLASS && arrayDim == 0)
+ return resolver.lookupFieldByJvmName(className,
+ (Symbol)e.oprand2());
+ }
+ catch (CompileError ce) {
+ err = ce;
+ }
+
+ /* If a filed name is the same name as a package's,
+ * a static member of a class in that package is not
+ * visible. For example,
+ *
+ * class Foo {
+ * int javassist;
+ * }
+ *
+ * It is impossible to add the following method:
+ *
+ * String m() { return javassist.CtClass.intType.toString(); }
+ *
+ * because javassist is a field name. However, this is
+ * often inconvenient, this compiler allows it. The following
+ * code is for that.
+ */
+ ASTree oprnd1 = e.oprand1();
+ if (oprnd1 instanceof Symbol)
+ return fieldAccess2(e, ((Symbol)oprnd1).get());
+
+ if (err != null)
+ throw err;
}
}
throw new CompileError("bad filed access");
}
+ private CtField fieldAccess2(Expr e, String jvmClassName) throws CompileError {
+ Member fname = (Member)e.oprand2();
+ CtField f = resolver.lookupFieldByJvmName2(jvmClassName, fname, e);
+ e.setOperator(MEMBER);
+ e.setOprand1(new Symbol(MemberResolver.jvmToJavaName(jvmClassName)));
+ fname.setField(f);
+ return f;
+ }
+
public void atClassObject(Expr expr) throws CompileError {
exprType = CLASS;
arrayDim = 0;
More information about the jboss-cvs-commits
mailing list