#
#
# Copyright 1996-2007 Sun Microsystems, Inc.  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.  Sun designates this
# particular file as subject to the "Classpath" exception as provided
# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
 

#*****************************************************************************
#*                    Copyright (c) IBM Corporation 1998                     *
#*                                                                           *
#* (C) Copyright IBM Corp. 1998                                              *
#*                                                                           *
#*****************************************************************************

# To add a generator sun.rmi.rmic.Foo which is invoked via the -foo option:
#
#   1. Add "foo" to generator.args list.
#   2. Add line: generator.class.foo=sun.rmi.rmic.Foo
#   3. Update rmic.usage string to include new arguments.

# For each available generator, list the command line argument used
# to invoke it.  The value can be a single item or a comma separated
# list.

generator.args=v1.1,vcompat,v1.2,iiop,idl,xprint

# For each generator, specify the class to invoke, using the following
# syntax:
#
#     generator.class.{arg}=fullClassName
#
# The 'default' entry is required and will be used if none of the args
# specified in generator.args is passed. Note that {arg} is compared
# using String.equalsIgnoreCase().

generator.class.default=sun.rmi.rmic.RMIGenerator

generator.class.v1.1=sun.rmi.rmic.RMIGenerator
generator.class.vcompat=sun.rmi.rmic.RMIGenerator
generator.class.v1.2=sun.rmi.rmic.RMIGenerator
generator.class.iiop=sun.rmi.rmic.iiop.StubGenerator
generator.class.idl=sun.rmi.rmic.iiop.IDLGenerator
generator.class.xprint=sun.rmi.rmic.iiop.PrintGenerator

# If a generator needs a BatchEnvironment other than
# sun.rmi.rmic.BatchEnvironment, specify it as follows:
#
#     generator.env.{arg}=fullClassName

generator.env.iiop=sun.rmi.rmic.iiop.BatchEnvironment
generator.env.idl=sun.rmi.rmic.iiop.BatchEnvironment
generator.env.xprint=sun.rmi.rmic.iiop.BatchEnvironment

rmic.usage=Usage: {0} <options> <class names>\
\n\
\nwhere <options> includes:\
\n  -keep          Do not delete intermediate generated source files\
\n  -keepgenerated (same as "-keep")\
\n  -v1.1          Create stubs/skeletons for 1.1 stub protocol version\
\n  -vcompat       Create stubs/skeletons compatible with both\
\n                           1.1 and 1.2 stub protocol versions\
\n  -v1.2          (default) Create stubs for 1.2 stub protocol version only\
\n  -iiop          Create stubs for IIOP. When present, <options> also includes:\
\n\
\n                   -always           Create stubs even when they appear current\
\n                   -alwaysgenerate   (same as "-always")\
\n                   -nolocalstubs     Do not create stubs optimized for same process\
\n\
\n  -idl           Create IDL. When present, <options> also includes:\
\n\
\n                   -noValueMethods   Do not generate methods for valuetypes \
\n                   -always           Create IDL even when it appears current\
\n                   -alwaysgenerate   (same as "-always")\
\n\
\n  -g             Generate debugging info\
\n  -nowarn        Generate no warnings\
\n  -nowrite       Do not write compiled classes to the file system\
\n  -verbose       Output messages about what the compiler is doing\
\n  -classpath <path>      Specify where to find input class files\
\n  -bootclasspath <path>  Override location of bootstrap class files\
\n  -extdirs <path>        Override location of installed extensions\
\n  -d <directory>         Specify where to place generated class files\
\n  -J<runtime flag>       Pass argument to the java interpreter
\n\

#
# Generic Messages
#

rmic.cant.read=Can''t read: {0}
rmic.cant.write=Can''t write: {0}
rmic.option.unsupported=The {0} option is no longer supported.
rmic.option.unimplemented=The {0} option is not yet implemented.
rmic.option.already.seen=The {0} option may be specified no more than once.
rmic.option.requires.argument=The {0} option requires an argument.
rmic.no.such.directory=The {0} directory does not exist.
rmic.no.such.option={0} is an invalid option or argument.
rmic.wrote=[wrote {0}]
rmic.errors={0} errors
rmic.1error=1 error
rmic.warnings={0} warnings
rmic.1warning=1 warning
rmic.done_in=[done in {0} ms]
rmic.no.memory=\
	The compiler has run out of memory.  Consider using the "-J-Xmx<size>" command line option to increase the maximum heap size.
rmic.stack.overflow=\
	The compiler has run out of stack space.  Consider using the "-J-Xss<size>" command line option to increase the memory allocated for the Java stack.
rmic.class.not.found=\
	Class {0} not found.
rmic.missing.property=Missing property generator.class.{0}
rmic.cannot.instantiate=Cannot instantiate class {0}
rmic.cannot.use.both=Cannot use both {0} and {1}
rmic.resource.not.found={0} not found.
rmic.no.output.dir=\
	Cannot find suitable output directory for {0}. Use the -d option to specify a root directory.
rmic.cannot.create.dir=\
	Cannot create output directory {0}.

#
# JRMP Messages
#

rmic.cant.make.stubs.for.interface=\
	{0} is an interface; stubs are needed only for remote object classes.
rmic.must.implement.remote=\
	Class {0} does not implement an interface that extends java.rmi.Remote; only remote objects need stubs and skeletons.
rmic.must.implement.remote.directly=\
	Stubs are only needed for classes that directly implement an interface that extends java.rmi.Remote; class {0} does not directly implement a remote interface.
rmic.must.throw.remoteexception=\
	{0} is not a valid remote interface: method {1} must throw java.rmi.RemoteException.
rmic.must.only.throw.exception=\
	Method {0} is not a valid remote method implementation because it throws {1}; implementations of remote methods may only throw java.lang.Exception or its subclasses.
warn.rmic.tie.found=\
	An IIOP "tie" exists for class {0}:\
	\n  {1}\
	\nIf you use PortableRemoteObject.exportObject, you should remove this file; otherwise, your server object will be exported to IIOP rather than to JRMP.

#
# RMI-IIOP Messages
#

rmic.generated=[generated {0} in {1} ms]
rmic.previously.generated=[previously generated file {0} is current]
warn.rmic.member.not.mapped=\
    Data member {0} of class {1} was not mapped to IDL.

rmic.iiop.constraint.1=\
    {0} is not a valid interface: does not inherit from java.rmi.Remote.
rmic.iiop.constraint.2=\
    serialPersistentFields array of class {0} is invalid: references non-existent members.
rmic.iiop.constraint.3=\
    {0} is not a valid remote interface: {1} is not a valid primitive or String constant.
rmic.iiop.constraint.4=\
    {0} is not a valid value: serialPersistentFields must be private static final.
rmic.iiop.constraint.5=\
    {0} is not a valid remote interface: method {1} must throw RemoteException or a superclass of RemoteException.
rmic.iiop.constraint.6=\
    {0} is not a valid remote interface: inherited interfaces {1} both declare method {2}.
rmic.iiop.constraint.7=\
    {0} is not a valid type: {1} differ only in case.
rmic.iiop.constraint.8=\
    {0} is not a valid remote implementation: has no remote interfaces.
rmic.iiop.constraint.9=\
    serialPersistentFields array member {0} of class {1} is invalid: type does not match declared member.
rmic.iiop.constraint.10=\
    {0} is not a valid value: implements java.rmi.Remote.
rmic.iiop.constraint.11=\
    {0} is not a valid value: does not implement java.io.Serializable.
rmic.iiop.constraint.12=\
    {0} is not a valid value: invalid parent.
rmic.iiop.constraint.13=\
    {0} is not a valid interface: the idl name for method {1} conflicts with another method.
rmic.iiop.constraint.14=\
    {0} is not a valid abstract interface: not an interface.
rmic.iiop.constraint.15=\
    {0} is not a valid abstract interface: implements java.rmi.Remote.
rmic.iiop.constraint.16=\
    {0} is not a valid remote interface: not an interface.
rmic.iiop.constraint.17=\
    {0} is not a valid remote implementation: not a class.
rmic.iiop.constraint.18=\
    {0} is not a valid interface: method {1} may not pass an exception which implements org.omg.CORBA.portable.IDLEntity.
rmic.iiop.constraint.19=\
    {0} is not a valid interface: the idl name for constant {1} conflicts with another constant.
rmic.iiop.constraint.20=\
    {0} is not a valid class: the idl name for member {1} conflicts with another member.
rmic.iiop.constraint.21=\
    {0} is a remote implementation class and cannot be used as a method argument or return type in {1}.
rmic.iiop.constraint.22=\
    Internal failure: (Method) exception {0} not a class type.
rmic.iiop.constraint.23=\
    Internal failure: (Method) caught null pointer exception for {0}.
rmic.iiop.constraint.24=\
    Class {0} contains an invalid return type.
rmic.iiop.constraint.25=\
    Class {0} contains an invalid argument type in method {1}.
rmic.iiop.constraint.26=\
    Could not compile {0}.
rmic.iiop.constraint.27=\
    Could not load class {0}.
rmic.iiop.constraint.28=\
    {0} is a remote implementation class and cannot be used as a data member in {1}.
