ClassElement makeListElement() { final TypeVariable typeVar = typeVar("E", itype(object)); final ClassElement element = element("List", itype(object), typeVar); DartTypeNode returnTypeNode = new DartTypeNode( new DartIdentifier("Iterator"), Arrays.asList(new DartTypeNode(new DartIdentifier("E")))); DartMethodDefinition iteratorMethod = DartMethodDefinition.create( new DartIdentifier("iterator"), new DartFunction( Collections.<DartParameter>emptyList(), new DartBlock(Collections.<DartStatement>emptyList()), returnTypeNode), Modifiers.NONE, Collections.<DartInitializer>emptyList()); MethodNodeElement iteratorMethodElement = Elements.methodFromMethodNode(iteratorMethod, element); Type returnType = Types.interfaceType(iterElement, Arrays.<Type>asList(typeVar)); FunctionType functionType = ftype(function, returnType, Collections.<String, Type>emptyMap(), null); Elements.setType(iteratorMethodElement, functionType); Elements.addMethod(element, iteratorMethodElement); return element; }
ClassElement element(String name, InterfaceType supertype, TypeVariable... parameters) { ClassElement element = Elements.classNamed(name); element.setSupertype(supertype); element.setType(itype(element, parameters)); coreElements.put(name, element); return element; }
static TypeVariable typeVar(String name, Type bound) { TypeVariableElement element = Elements.typeVariableElement(name, bound); return new TypeVariableImplementation(element); }