AstNode parent = node.getParent();
if (typeName instanceof PrefixedIdentifier && parent instanceof ConstructorName
&& argumentList == null) {
ConstructorName name = (ConstructorName) parent;
if (name.getName() == null) {
PrefixedIdentifier prefixedIdentifier = (PrefixedIdentifier) typeName;
SimpleIdentifier prefix = prefixedIdentifier.getPrefix();
element = getNameScope().lookup(prefix, getDefiningLibrary());
if (element instanceof PrefixElement) {
if (parent.getParent() instanceof InstanceCreationExpression
&& ((InstanceCreationExpression) parent.getParent()).isConst()) {
// If, if this is a const expression, then generate a
// CompileTimeErrorCode.CONST_WITH_NON_TYPE error.
reportErrorForNode(
CompileTimeErrorCode.CONST_WITH_NON_TYPE,
prefixedIdentifier.getIdentifier(),
prefixedIdentifier.getIdentifier().getName());
} else {
// Else, if this expression is a new expression, report a NEW_WITH_NON_TYPE warning.
reportErrorForNode(
StaticWarningCode.NEW_WITH_NON_TYPE,
prefixedIdentifier.getIdentifier(),
prefixedIdentifier.getIdentifier().getName());
}
setElement(prefix, element);
return null;
} else if (element != null) {
//
// Rewrite the constructor name. The parser, when it sees a constructor named "a.b",
// cannot tell whether "a" is a prefix and "b" is a class name, or whether "a" is a
// class name and "b" is a constructor name. It arbitrarily chooses the former, but
// in this case was wrong.
//
name.setName(prefixedIdentifier.getIdentifier());
name.setPeriod(prefixedIdentifier.getPeriod());
node.setName(prefix);
typeName = prefix;
}
}
}