1 package net.sourceforge.jenesis4java; 2 3 /* 4 * #%L 5 * Jenesis 4 Java Code Generator 6 * %% 7 * Copyright (C) 2000 - 2015 jenesis4java 8 * %% 9 * This program is free software: you can redistribute it and/or modify 10 * it under the terms of the GNU Lesser General Public License as 11 * published by the Free Software Foundation, either version 3 of the 12 * License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Lesser Public License for more details. 18 * 19 * You should have received a copy of the GNU General Lesser Public 20 * License along with this program. If not, see 21 * <http://www.gnu.org/licenses/lgpl-3.0.html>. 22 * #L% 23 */ 24 25 import java.util.List; 26 27 /** 28 * Copyright (C) 2008, 2010 Richard van Nieuwenhoven - ritchie [at] gmx [dot] at 29 * Copyright (C) 2000, 2001 Paul Cody Johnston - pcj@inxar.org <br> 30 * This file is part of Jenesis4java. Jenesis4java is free software: you can 31 * redistribute it and/or modify it under the terms of the GNU Lesser General 32 * Public License as published by the Free Software Foundation, either version 3 33 * of the License, or (at your option) any later version.<br> 34 * Jenesis4java is distributed in the hope that it will be useful, but WITHOUT 35 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 36 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 37 * details.<br> 38 * You should have received a copy of the GNU Lesser General Public License 39 * along with Jenesis4java. If not, see <http://www.gnu.org/licenses/>. 40 */ 41 /** 42 * {@code Declaration} subinterface for compilation units. A compilation unit is 43 * the source code atom in a typical filesystem. It consists of three parts, 44 * each of which is optional: 45 * <UL> 46 * <LI>A package declaration (�7.4), giving the fully qualified name (�6.7) 47 * of the package to which the compilation unit belongs 48 * <LI>Iimport declarations (�7.5) that allow types from other packages to be 49 * referred to using their simple names 50 * <LI>Type declarations (�7.6) of class and interface types 51 * </UL> 52 */ 53 public interface CompilationUnit extends Codeable { 54 55 /** 56 * Adds the given import declaration to the compilation unit. 57 */ 58 Import addImport(Class<?> clazz); 59 60 /** 61 * Adds the given import declaration to the compilation unit. 62 */ 63 Import addImport(String name); 64 65 /** 66 * Generates the source code file. 67 */ 68 CompilationUnit encode(); 69 70 /** 71 * Returns the filesystem location where the compilation unit should be 72 * written. 73 */ 74 String getCodebase(); 75 76 /** 77 * Gets the list of imports as an list of {@code ImportDeclaration} 78 */ 79 List<Import> getImports(); 80 81 /** 82 * Returns the package name as a {@code Package}. 83 */ 84 Namespace getNamespace(); 85 86 PackageClass getPackageClass(String name); 87 88 /** 89 * Gets the top level class or interface. 90 */ 91 TypeDeclaration getTopLevelType(); 92 93 /** 94 * Returns a list of types members as an list of {@code TypeDeclaration}. 95 */ 96 List<TypeDeclaration> getTypes(); 97 98 /** 99 * Adds a new class to this compilation unit. 100 */ 101 PackageClass newClass(String name); 102 103 /** 104 * Adds a new interface to this compilation unit. 105 */ 106 Interface newInterface(String name); 107 108 /** 109 * Adds a new public class to this compilation unit. 110 */ 111 PackageClass newPublicClass(String name); 112 113 /** 114 * Adds a new interface to this compilation unit. 115 */ 116 Interface newPublicInterface(String name); 117 118 /** 119 * Sets the package name and returns the corresponding package declaration. 120 */ 121 Namespace setNamespace(String name); 122 }