176f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti/* 276f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * Copyright (C) 2007-2010 Júlio Vilmar Gesser. 376f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * Copyright (C) 2011, 2013-2016 The JavaParser Team. 476f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * 576f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * This file is part of JavaParser. 676f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * 776f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * JavaParser can be used either under the terms of 876f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * a) the GNU Lesser General Public License as published by 976f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * the Free Software Foundation, either version 3 of the License, or 1076f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * (at your option) any later version. 1176f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * b) the terms of the Apache License 1276f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * 1376f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * You should have received a copy of both licenses in LICENCE.LGPL and 1476f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * LICENCE.APACHE. Please refer to those files for details. 1576f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * 1676f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * JavaParser is distributed in the hope that it will be useful, 1776f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * but WITHOUT ANY WARRANTY; without even the implied warranty of 1876f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1976f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti * GNU Lesser General Public License for more details. 2076f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti */ 2176f5dc9d043237e8ada0e6597d6c8d48b67f6d8fFederico Tomassetti 22a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruzpackage com.github.javaparser.ast.nodeTypes; 23a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz 24a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruzimport com.github.javaparser.ast.Node; 25515a9392928c14a60dc9dfa42a98198a4d877534Danny van Bruggenimport com.github.javaparser.ast.NodeList; 26a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruzimport com.github.javaparser.ast.type.ClassOrInterfaceType; 27a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz 283ac3a3476541e667a7687092a75149ff0f3cc248Danny van Bruggenimport static com.github.javaparser.JavaParser.parseClassOrInterfaceType; 293ac3a3476541e667a7687092a75149ff0f3cc248Danny van Bruggen 30efcf35033981fce82569bf348fc0fda9964e2cadDanny van Bruggen/** 31efcf35033981fce82569bf348fc0fda9964e2cadDanny van Bruggen * A node that extends other types. 32efcf35033981fce82569bf348fc0fda9964e2cadDanny van Bruggen */ 33b4a14725d39b2bc28712d2c66b54b7baf3851f16Federico Tomassettipublic interface NodeWithExtends<N extends Node> { 34e0d5efee2e83c5bb1ecbaf60e00458dc384f04adDanny van Bruggen NodeList<ClassOrInterfaceType> getExtendedTypes(); 35a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz 36fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen void tryAddImportToParentCompilationUnit(Class<?> clazz); 37fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen 38e0d5efee2e83c5bb1ecbaf60e00458dc384f04adDanny van Bruggen default ClassOrInterfaceType getExtendedTypes(int i) { 39e0d5efee2e83c5bb1ecbaf60e00458dc384f04adDanny van Bruggen return getExtendedTypes().get(i); 40c5695fda8d8877606cc59a899c772f1eb2a28b27Quan Nguyen } 41c5695fda8d8877606cc59a899c772f1eb2a28b27Quan Nguyen 42e0d5efee2e83c5bb1ecbaf60e00458dc384f04adDanny van Bruggen N setExtendedTypes(NodeList<ClassOrInterfaceType> extendsList); 43a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz 44b22aa91ed4cfc38b71b2673f8bafe65fefaa8841Pierre Struve @SuppressWarnings("unchecked") 458eceff64e19aff2c0c0555e985e8815ea6ddf709Pierre Struve default N setExtendedType(int i, ClassOrInterfaceType extend) { 468eceff64e19aff2c0c0555e985e8815ea6ddf709Pierre Struve getExtendedTypes().set(i, extend); 47b22aa91ed4cfc38b71b2673f8bafe65fefaa8841Pierre Struve return (N) this; 48b22aa91ed4cfc38b71b2673f8bafe65fefaa8841Pierre Struve } 49b22aa91ed4cfc38b71b2673f8bafe65fefaa8841Pierre Struve 50b22aa91ed4cfc38b71b2673f8bafe65fefaa8841Pierre Struve @SuppressWarnings("unchecked") 518eceff64e19aff2c0c0555e985e8815ea6ddf709Pierre Struve default N addExtendedType(ClassOrInterfaceType extend) { 528eceff64e19aff2c0c0555e985e8815ea6ddf709Pierre Struve getExtendedTypes().add(extend); 53b22aa91ed4cfc38b71b2673f8bafe65fefaa8841Pierre Struve return (N) this; 54b22aa91ed4cfc38b71b2673f8bafe65fefaa8841Pierre Struve } 55fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen 56fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen /** 57fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen * @deprecated use addExtendedType 58fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen */ 59fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen default N addExtends(Class<?> clazz) { 60fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen return addExtendedType(clazz); 61fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen } 62fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen 63fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen /** 64fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen * @deprecated use addExtendedType 65fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen */ 66fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen default N addExtends(String name) { 67fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen return addExtendedType(name); 68fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen } 69fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen 70a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz /** 71fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen * Add an "extends" to this and automatically add the import 724296abb695b767f7471dd255d0679516183b062aDanny van Bruggen * 73a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz * @param clazz the class to extand from 74034162a61bc1613164a292542656946d641e1ca3Maximilien Cruz * @return this 75a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz */ 76fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen default N addExtendedType(Class<?> clazz) { 77fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen tryAddImportToParentCompilationUnit(clazz); 78fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen return addExtendedType(clazz.getSimpleName()); 79a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz } 80a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz 81a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz /** 82fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen * Add an "extends" to this 834296abb695b767f7471dd255d0679516183b062aDanny van Bruggen * 84a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz * @param name the name of the type to extends from 85034162a61bc1613164a292542656946d641e1ca3Maximilien Cruz * @return this 86a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz */ 87a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz @SuppressWarnings("unchecked") 88fb64b0e802225db09cb8601d0ba5c912b35069a4Danny van Bruggen default N addExtendedType(String name) { 894466fd0c992859d097777ca54601d733c80b0c2fDanny van Bruggen getExtendedTypes().add(parseClassOrInterfaceType(name)); 90b4a14725d39b2bc28712d2c66b54b7baf3851f16Federico Tomassetti return (N) this; 91a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz } 92a1f66c031ceba5943473b1bdd95765cff87a663cMaximilien Cruz} 93