@Override
public Void visitClassTypeAlias(ClassTypeAlias node) {
super.visitClassTypeAlias(node);
ClassElementImpl classElement = getClassElement(node.getName());
ErrorCode errorCode = CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS;
InterfaceType superclassType = resolveType(
node.getSuperclass(),
errorCode,
CompileTimeErrorCode.EXTENDS_ENUM,
errorCode);
if (superclassType == null) {
superclassType = getTypeProvider().getObjectType();
}
if (classElement != null && superclassType != null) {
classElement.setSupertype(superclassType);
ClassElement superclassElement = superclassType.getElement();
if (superclassElement != null) {
ConstructorElement[] constructors = superclassElement.getConstructors();
int count = constructors.length;
if (count > 0) {
Type[] parameterTypes = TypeParameterTypeImpl.getTypes(superclassType.getTypeParameters());
Type[] argumentTypes = getArgumentTypes(
node.getSuperclass().getTypeArguments(),
parameterTypes);
InterfaceType classType = classElement.getType();
ArrayList<ConstructorElement> implicitConstructors = new ArrayList<ConstructorElement>(
count);
for (int i = 0; i < count; i++) {
ConstructorElement explicitConstructor = constructors[i];
if (!explicitConstructor.isFactory()) {