###############################################################################
# Copyright (c) 2000, 2003 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials 
# are made available under the terms of the Common Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/cpl-v10.html
# 
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################
### JavaBatchCompiler messages.

### compiler 
compiler.name = Eclipse Java Compiler
compiler.version = 0.359
compiler.copyright = Copyright IBM Corp 2000, 2003. All rights reserved.

### scanning
scanning.start = Collecting source files inside {0}

### progress
progress.compiling = Compiling

### compile
compile.repetition = Repetition {0}/{1}
compile.instantTime = Compiled {0} lines in {1} ms ({2} lines/s)
compile.totalTime = Total compilation time: {0}
compile.oneProblem = 1 problem
compile.severalProblems = {0} problems
compile.oneError = 1 error
compile.severalErrors = {0} errors
compile.oneWarning = 1 warning
compile.severalWarnings = {0} warnings
compile.oneClassFileGenerated = 1 .class file generated
compile.severalClassFilesGenerated = {0} .class files generated

### configure
configure.requiresJDK1.2orAbove = Need to use a JVM >= 1.2
configure.duplicateLog = duplicate log specification: {0}
configure.duplicateRepeat = duplicate repeat specification: {0}
configure.duplicateCompliance = duplicate compliance setting specification: {0}
configure.source = invalid source option, source is either ''1.3'' or ''1.4'': {0}
configure.duplicateOutputPath = duplicate output path specification: {0}
configure.duplicateBootClasspath = duplicate bootclasspath specification: {0}
configure.invalidDebugOption = invalid debug option: {0}
configure.invalidWarningConfiguration = invalid warning configuration: {0}
configure.invalidWarning = invalid warning: {0}
configure.invalidWarningOption = invalid warning option: {0}
configure.targetJDK = target JDK should be comprised in between ''1.1'' and ''1.4'': {0}
configure.incompatibleTargetForSource14 = ''1.4'' source mode requires ''-target 1.4'' : {0}
configure.incompatibleComplianceForSource14 = ''1.4'' source mode requires ''-1.4'' compliance mode: {0}
configure.incompatibleComplianceForTarget14 = ''1.4'' target mode requires ''-1.4'' compliance mode: {0}
configure.incompatibleComplianceForTarget11 = ''1.1'' target mode requires ''-1.3'' compliance mode: {0}
configure.repetition = repetition must be a positive integer: {0}
configure.directoryNotExist = directory does not exist: {0}
configure.IOError = i/o error : unable to retrieve .JAVA files in directory: {0}
configure.noClasspath = no classpath defined, using default directory instead
configure.incorrectClasspath = incorrect classpath: {0}
configure.invalidexpansionargumentname = expansion argument file {0} doesn't exist or cannot be read
configure.cannotOpenLog = cannot open .log file
configure.unexpectedCustomEncoding = unexpected custom encoding specification: {0}[{1}]
configure.unsupportedEncoding = unsupported encoding format: {0}
configure.duplicateDefaultEncoding = duplicate default encoding format specification: {0}
configure.invalidTaskTag ={0} is an invalid task tag

### requestor
requestor.error = ERROR
requestor.warning = WARNING
requestor.in = in {0}
requestor.notRetrieveErrorMessage = Cannot retrieve the error message for {0}

### unit
unit.more = File {0} is specified more than once
unit.missing = File {0} is missing

### output
output.noClassFileCreated = No .class file created for file named {0} because of an IOException.

### miscellaneous
misc.version = {compiler.name} {compiler.version}, {compiler.copyright}
misc.usage = {compiler.name} {compiler.version}, {compiler.copyright}\n\
\ \n\
\Usage: <options> <source files | directories>\n\
\ If directories are specified, then their source contents are compiled.\n\
\ Possible options are listed below. Those enabled by default are prefixed with ''+''\n\
\ \n\
\ Classpath options:\n\
\    -cp -classpath <directories and zip/jar files separated by ;>\n\
\                       specify location for application classes and sources\n\
\    -bootclasspath <directories and zip/jar files separated by ;>\n\
\                       specify location for system classes\n\
\    -d <dir>           destination directory (if omitted, no directory is created)\n\
\    -d none            generate no .class files\n\
\    -encoding <enc>    specify custom encoding for all sources. Each file/directory can override it\n\
\                       when suffixed with ''[''<enc>'']'' (e.g. X.java[utf8])\n\
\ \n\
\ Compliance options:\n\
\    -1.3             + use 1.3 compliance level\n\
\    -1.4               use 1.4 compliance level\n\
\    -source <version>  set source level (1.3 or 1.4, default matches compliance level)\n\
\    -target <version>  set classfile target (1.1 to 1.4, default matches compliance level)\n\
\ \n\
\ Error/Warning options:\n\
\    -deprecation     + deprecation outside deprecated code\n\
\    -noImportError     no errors for unresolved imports\n\
\    -nowarn            disable all warnings\n\
\    -warn: <warnings separated by ,> where warnings include:\n\
\      none                 disable all warnings\n\
\      allDeprecation       deprecation including inside deprecated code\n\
\      assertIdentifier     ''assert'' used as identifier\n\
\      conditionAssign      possible accidental boolean assignment\n\
\      constructorName    + method with constructor name\n\
\      deprecation        + deprecation outside deprecated code\n\
\      fieldHiding          field hiding another variable\n\
\      intfNonInherited   + interface non-inherited method compatibility\n\
\      localHiding          local variable hiding another variable\n\
\      maskedCatchBlock   + hidden catch block\n\
\      nls                  string literal lacking non-nls tag //$NON-NLS-<n>$\n\
\      noEffectAssign     + assignment without effect\n\
\      charConcat         + char[] in String concat\n\
\      pkgDefaultMethod   + attempt to override package-default method\n\
\      unusedArgument       unread method argument\n\
\      unusedImport       + unused import declaration\n\
\      unusedLocal          unread local variable\n\
\      unusedPrivate        unused private member declaration\n\
\      specialParamHiding   constructor or setter parameter hiding another field\n\
\      staticReceiver     + non-static reference to static member\n\
\      syntheticAccess      synthetic access for innerclass\n\
\      tasks(<tags separated by |>) tasks identified by tags inside comments\n\
\ \n\
\ Debug options:\n\
\    -g[:lines,vars,source] custom debug info\n\
\    -g:lines,source  + both lines table and source debug info\n\
\    -g                 all debug info\n\
\    -g:none            no debug info\n\
\    -preserveAllLocals preserve unused local vars for debug purpose\n\
\ \n\
\ Advanced options:\n\
\    -log <file>        log to a file\n\
\    -proceedOnError    do not stop at first error, dumping class files with problem methods\n\
\    -verbose           enable verbose output\n\
\    -referenceInfo     compute reference info\n\
\    -progress          show progress (only in -log mode)\n\
\    -time              display speed information \n\
\    -noExit            do not call System.exit(n) at end of compilation (n==0 if no error)\n\
\    -repeat <n>        repeat compilation process <n> times for perf analysis\n\
\ \n\
\    -? -help           print this help message\n\
\    -v -version        print compiler version\n\
\    -showversion       print compiler version and continue\n
