19528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggenpackage com.github.javaparser.ast.nodeTypes;
29528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen
39528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggenimport java.util.List;
49528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen
59528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggenimport com.github.javaparser.ast.Node;
69528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggenimport com.github.javaparser.ast.type.ClassOrInterfaceType;
79528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen
89528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggenpublic interface NodeWithImplements<T> {
99528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen    public List<ClassOrInterfaceType> getImplements();
109528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen
119528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen    public T setImplements(List<ClassOrInterfaceType> implementsList);
129528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen
139528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen    /**
149528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen     * Add an implements to this
159528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen     *
169528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen     * @param name the name of the type to extends from
179528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen     * @return this
189528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen     */
199528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen    @SuppressWarnings("unchecked")
209528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen    public default T addImplements(String name) {
219528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen        ClassOrInterfaceType classOrInterfaceType = new ClassOrInterfaceType(name);
229528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen        getImplements().add(classOrInterfaceType);
239528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen        classOrInterfaceType.setParentNode((Node) this);
249528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen        return (T) this;
259528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen    }
269528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen
279528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen    /**
289528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen     * Add an implements to this and automatically add the import
299528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen     *
309528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen     * @param clazz the type to implements from
319528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen     * @return this
329528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen     */
339528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen    public default T addImplements(Class<?> clazz) {
349528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen        ((Node) this).tryAddImportToParentCompilationUnit(clazz);
359528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen        return addImplements(clazz.getSimpleName());
369528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen    }
379528039468accca4734ee3b35670bd1d52369e4cDanny van Bruggen}
38