}
}
private void processRootTag(MXMLTreeBuilder builder, IMXMLTagData rootTag, IMXMLTextData asDoc)
{
ClassDefinition fileDef = fileScope.getMainClassDefinition();
assert fileDef != null;
IDefinition tagDef = builder.getFileScope().resolveTagToDefinition(rootTag);
// Report a problem if the root tag doesn't map to a definition.
if (tagDef == null)
{
ICompilerProblem problem = new MXMLUnresolvedTagProblem(rootTag);
builder.addProblem(problem);
return;
}
// Report a problem if that definition isn't for a class.
if (!(tagDef instanceof IClassDefinition))
{
ICompilerProblem problem = new MXMLNotAClassProblem(rootTag, tagDef.getQualifiedName());
builder.addProblem(problem);
return;
}
IClassDefinition tagDefinition = (IClassDefinition)tagDef;
// Report a problem if that class is final.
if (tagDefinition != null && tagDefinition.isFinal())
{
ICompilerProblem problem = new MXMLFinalClassProblem(rootTag, tagDef.getQualifiedName());
builder.addProblem(problem);
return;
}
// Report a problem is that class's constructor has required parameters.
IFunctionDefinition constructor = tagDefinition.getConstructor();
if (constructor != null && constructor.hasRequiredParameters())
{
ICompilerProblem problem = new MXMLConstructorHasParametersProblem(rootTag, tagDef.getQualifiedName());
builder.addProblem(problem);
return;
}
documentNode = new MXMLDocumentNode(this);
documentNode.setClassReference(project, tagDefinition);
documentNode.setClassDefinition(fileDef);
documentNode.initializeFromTag(builder, rootTag);
if (asDoc != null)
{
IASDocComment asDocComment = builder.getWorkspace().getASDocDelegate().createASDocComment(asDoc, tagDefinition);
documentNode.setASDocComment(asDocComment);
}
fileDef.setNode(documentNode);
// TODO setNode() sets the nameStart and nameEnd to -1
// Fix setNode() to set the values properly
// From MXMLScopeBuilder - CM clients expect the name start of the root class definition to be at 0.
if (fileDef.getNameStart() == -1 && fileDef.getNameEnd() == -1)
fileDef.setNameLocation(0, 0);
}