/* * JacORB - a free Java ORB * * Copyright (C) 1997-2014 Gerald Brose / The JacORB Team. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.jacorb.idl; /** * JacORB IDL compiler classes * * @author Gerald Brose */ import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.logging.Level; /** * Note: a module's name is its package name! */ public class Module extends Declaration implements Scope { public Definitions spec; private ScopeData scopeData; private String unreplacedName = null; public Module(int num) { super(num); pack_name = ""; } public void setScopeData(ScopeData data) { scopeData = data; } public ScopeData getScopeData() { return scopeData; } public void setPackage(String s) { if (unreplacedName == null) unreplacedName = s; s = parser.pack_replace(s); if (pack_name.length() > 0) { pack_name = s + "." + pack_name; spec.setPackage(s); } else { pack_name = s; if (lexer.needsJavaEscape(this)) pack_name = "_" + s; name = pack_name; spec.setPackage(pack_name); } } String full_name() { return pack_name; } public void set_included(boolean i) { included = i; spec.set_included(i); } public void setEnclosingSymbol(IdlSymbol s) { if (enclosing_symbol != null && enclosing_symbol != s) throw new RuntimeException("Compiler Error: trying to reassign container for " + name); enclosing_symbol = s; spec.setEnclosingSymbol(this); } public void parse() { try { NameTable.define(unreplacedName, full_name(), IDLTypes.MODULE); } catch (NameAlreadyDefined nad) { parser.error("Module name " + full_name() + " already defined", token); } spec.parse(); } public void print(PrintWriter ps) { if (parser.generateIR) { try { // Java Interface file String path = parser.out_dir + fileSeparator + pack_name.replace('.', fileSeparator); File dir = new File(path); if (!dir.exists()) { if (!dir.mkdirs()) { org.jacorb.idl.parser.fatal_error("Unable to create " + path, null); } } File f = new File(dir, "_" + originalModuleName() + "Module.java"); if (GlobalInputStream.isMoreRecentThan(f)) { PrintWriter moduleWriter = new PrintWriter(new java.io.FileWriter(f )); moduleWriter.println("package " + pack_name + ";" + Environment.NL); moduleWriter.println("/**" + Environment.NL + "* IR module information, generated by the JacORB IDL compiler" + Environment.NL + " */"); moduleWriter.println("public class _" + originalModuleName() + "Module {}"); moduleWriter.close(); } } catch (IOException io) { parser.logger.log(Level.WARNING, "Exception: ", io); } } spec.print(ps); } /** * @return the original, unreplaced module name * (needed to build a repositoryID that is untouched by * the compiler option -i2jpackage */ public String originalModuleName() { return unreplacedName; } public Definitions getDefinitions() { return spec; } /** */ public void accept(IDLTreeVisitor visitor) { visitor.visitModule(this); } public String toString() { return "module " + name; } }