/* * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code 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 General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package org.jboss.com.sun.corba.se.impl.presentation.rmi; /** * Holds information about the OMG IDL mapping of a Java type. */ public class IDLType { private Class<?> cl_; // terminology for OMG IDL type package name private String[] modules_; // name of element within module private String memberName_; public IDLType(Class<?> cl, String[] modules, String memberName) { cl_ = cl; modules_ = modules; memberName_ = memberName; } public IDLType(Class<?> cl, String memberName) { this(cl, new String[0], memberName); } public Class<?> getJavaClass() { return cl_; } public String[] getModules() { return modules_; } public String makeConcatenatedName(char separator, boolean fixIDLKeywords) { StringBuffer sbuff = new StringBuffer(); for (int ctr = 0; ctr < modules_.length; ctr++) { String mod = modules_[ctr]; if (ctr > 0) sbuff.append(separator); if (fixIDLKeywords && IDLNameTranslatorImpl.isIDLKeyword(mod)) mod = IDLNameTranslatorImpl.mangleIDLKeywordClash(mod); sbuff.append(mod); } return sbuff.toString(); } public String getModuleName() { // Note that this should probably be makeConcatenatedName( '/', true ) for spec compliance, but rmic does it // this way, so we'll leave this. // The effect is that an overloaded method like void foo( bar.typedef.Baz ) will get an IDL name of // foo__bar_typedef_Baz instead of foo__bar__typedef_Baz (note the extra _ before typedef). return makeConcatenatedName('_', false); } public String getExceptionName() { // Here we will check for IDL keyword collisions (see bug 5010332). // This means that the repository ID for foo.exception.SomeException is "IDL:foo/_exception/SomeEx:1.0" (note // the underscore in front of the exception module name). String modName = makeConcatenatedName('/', true); String suffix = "Exception"; String excName = memberName_; if (excName.endsWith(suffix)) { int last = excName.length() - suffix.length(); excName = excName.substring(0, last); } // See bug 4989312: we must always add the Ex. excName += "Ex"; if (modName.length() == 0) return "IDL:" + excName + ":1.0"; else return "IDL:" + modName + '/' + excName + ":1.0"; } public String getMemberName() { return memberName_; } /** * True if this type doesn't have a containing module. This would be true of a java type defined in the default * package or a primitive. */ public boolean hasModule() { return (modules_.length > 0); } }