@Override public Void visitClassTypeAlias(ClassTypeAlias node) { ElementHolder holder = new ElementHolder(); functionTypesToFix = new ArrayList<FunctionTypeImpl>(); visitChildren(holder, node); SimpleIdentifier className = node.getName(); ClassElementImpl element = new ClassElementImpl(className); element.setAbstract(node.getAbstractKeyword() != null); element.setTypedef(true); TypeParameterElement[] typeParameters = holder.getTypeParameters(); element.setTypeParameters(typeParameters); Type[] typeArguments = createTypeParameterTypes(typeParameters); InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element); interfaceType.setTypeArguments(typeArguments); element.setType(interfaceType); // set default constructor element.setConstructors(createDefaultConstructors(interfaceType)); for (FunctionTypeImpl functionType : functionTypesToFix) { functionType.setTypeArguments(typeArguments); } functionTypesToFix = null; currentHolder.addType(element); className.setStaticElement(element); holder.validate(); return null; }
@Override public Void visitClassDeclaration(ClassDeclaration node) { ElementHolder holder = new ElementHolder(); isValidMixin = true; functionTypesToFix = new ArrayList<FunctionTypeImpl>(); visitChildren(holder, node); SimpleIdentifier className = node.getName(); ClassElementImpl element = new ClassElementImpl(className); TypeParameterElement[] typeParameters = holder.getTypeParameters(); Type[] typeArguments = createTypeParameterTypes(typeParameters); InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element); interfaceType.setTypeArguments(typeArguments); element.setType(interfaceType); ConstructorElement[] constructors = holder.getConstructors(); if (constructors.length == 0) { // // Create the default constructor. // constructors = createDefaultConstructors(interfaceType); } element.setAbstract(node.getAbstractKeyword() != null); element.setAccessors(holder.getAccessors()); element.setConstructors(constructors); element.setFields(holder.getFields()); element.setMethods(holder.getMethods()); element.setTypeParameters(typeParameters); element.setValidMixin(isValidMixin); int functionTypeCount = functionTypesToFix.size(); for (int i = 0; i < functionTypeCount; i++) { functionTypesToFix.get(i).setTypeArguments(typeArguments); } functionTypesToFix = null; currentHolder.addType(element); className.setStaticElement(element); holder.validate(); return null; }
@Override public Void visitFunctionTypeAlias(FunctionTypeAlias node) { ElementHolder holder = new ElementHolder(); visitChildren(holder, node); SimpleIdentifier aliasName = node.getName(); ParameterElement[] parameters = holder.getParameters(); TypeParameterElement[] typeParameters = holder.getTypeParameters(); FunctionTypeAliasElementImpl element = new FunctionTypeAliasElementImpl(aliasName); element.setParameters(parameters); element.setTypeParameters(typeParameters); FunctionTypeImpl type = new FunctionTypeImpl(element); type.setTypeArguments(createTypeParameterTypes(typeParameters)); element.setType(type); currentHolder.addTypeAlias(element); aliasName.setStaticElement(element); holder.validate(); return null; }