Java Reference
In-Depth Information
//Thenanalyzethearguments,collecting
//theirtypes(inClassform)asargTypes
argTypes=newType[arguments.size()];
for(inti=0;i<arguments.size();i++){
arguments.set(i,(JExpression)arguments.get(i).analyze(
context));
argTypes[i]=arguments.get(i).type();
}
//Wherearewenow?(Foraccess)
TypethisType=((JTypeDecl)context.classContext
.definition()).thisType();
//Thenanalyzethetarget
if(target==null){
//Impliedthis(or,impliedtypeforstatics)
if(!context.methodContext().isStatic()){
target=newJThis(line()).analyze(context);
}
else{
target=newJVariable(line(),
context.definingType().toString()).
analyze(context);
}
}else{
target=(JExpression)target.analyze(context);
if(target.type().isPrimitive()){
JAST.compilationUnit.reportSemanticError(line(),
"cannotinvokeamessageonaprimitivetype:"
+target.type());
}
}
//FindappropriateMethodforthismessageexpression
method=target.type().methodFor(messageName,argTypes);
if(method==null){
JAST.compilationUnit.reportSemanticError(line(),
"Cannotfindmethodfor:"
+Type.signatureFor(messageName,argTypes));
type=Type.ANY;
}else{
context.definingType().checkAccess(line,
(Member)method);
type=method.returnType();
//Non-staticmethodcannotbereferencedfroma
//staticcontext.
if(!method.isStatic()){
if(targetinstanceofJVariable&&
((JVariable)target).iDefn()instanceof
TypeNameDefn){
JAST.compilationUnit.reportSemanticError(line(),
"Non-staticmethod"+
Type.signatureFor(messageName,argTypes)+
"cannotbereferencedfromastaticcontext");
}
}
}
returnthis;
}
 
Search WWH ::




Custom Search