###############################################################################
# Copyright (c) 2000, 2019 IBM Corporation and others.
#
# This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
#     IBM Corporation - initial API and implementation
#		Benjamin Muskalla - Contribution for bug 239066
#		Stephan Herrmann - Contributions for
#								bug 236385 - [compiler] Warn for potential programming problem if an object is created but not used
#								bug 295551 - Add option to automatically promote all warnings to errors
#								bug 359721 - [options] add command line option for new warning token "resource"
#								bug 365208 - [compiler][batch] command line options for annotation based null analysis
#								bug 374605 - Unreasonable warning for enum-based switch statements
#								bug 388281 - [compiler][null] inheritance of null annotations as an option
#								bug 440687 - [compiler][batch][null] improve command line option for external annotations
#								Bug 408815 - [batch][null] Add CLI option for COMPILER_PB_SYNTACTIC_NULL_ANALYSIS_FOR_FIELDS
#		Alan Moraes <alan@kelon.org> - Contribution for bug 383644
#		Jesper S Moller - Contribution for bug 407297 - [1.8][compiler] Control generation of parameter names by option
###############################################################################
### JavaBatchCompiler messages.

### compiler
#Format: compiler.name = word1 word2 word3
compiler.name = Eclipse Compiler for Java(TM)
#Format: compiler.version = (The place holders will be automatically filled. Do not remove or alter it)
compiler.version = bundle_qualifier, bundle_version
compiler.copyright = Copyright IBM Corp 2000, 2015. All rights reserved.

###{ObjectTeams:
otdtc.name = Extension for Object Teams
otdtc.version = 2.7.4
otdtc.copyright = Copyright by TU Berlin, Fraunhofer FIRST and others, 2004, 2019.
### SH}
### progress
progress.compiling = Compiling

### compile
compile.repetition = [repetition {0}/{1}]
compile.instantTime = [compiled {0} lines in {1} ms: {2} lines/s]
compile.detailedTime = [parse: {0} ms ({1}%), resolve: {2} ms ({3}%), analyze: {4} ms ({5}%), generate: {6} ms ({7}%) ]
compile.ioTime = [i/o: read: {0} ms ({1}%), write: {2} ms ({3}%)]
compile.averageTime = [average, excluding min-max {0} lines in {1} ms: {2} lines/s]
compile.totalTime = [total compilation time: {0}]
compile.oneProblem = 1 problem ({0})
compile.severalProblemsErrorsOrWarnings = {0} problems ({1})
compile.severalProblemsErrorsAndWarnings = {0} problems ({1}, {2})
compile.severalProblems = {0} problems ({1}, {2}, {3})
compile.oneError = 1 error
compile.severalErrors = {0} errors
compile.oneWarning = 1 warning
compile.severalWarnings = {0} warnings
compile.oneInfo = 1 info
compile.severalInfos = {0} info
compile.oneClassFileGenerated = [1 .class file generated]
compile.severalClassFilesGenerated = [{0} .class files generated]
compile.failOnWarning = error: warnings found and -failOnWarning specified

### configure
configure.requiresJDK1.2orAbove = Need to use a JVM >= 1.2
configure.duplicateLog = duplicate log specification: {0}
configure.duplicateRepeat = duplicate repeat specification: {0}
configure.duplicateMaxProblems = duplicate max problems specification: {0}
configure.duplicateCompliance = duplicate compliance setting specification: {0}
configure.duplicateSource = duplicate source compliance setting specification: {0}
configure.duplicateTarget = duplicate target compliance setting specification: {0}
configure.unsupportedReleaseOption = option --release is supported only when run with JDK 9 or above
configure.unsupportedWithRelease = option {0} is not supported when --release is used
configure.unsupportedReleaseVersion = release version {0} is not supported
configure.source = source level should be in ''1.1''...''1.8'',''9''...''11'' (or ''5.0''..''11.0''): {0}
configure.invalidSystem = invalid location for system libraries: {0}
configure.unsupportedOption = option {0} not supported at compliance level 9 and above
configure.duplicateOutputPath = duplicate output path specification: {0}
configure.duplicateModulePath = duplicate module path specification: {0}
configure.duplicateModuleSourcepath = duplicate source module path specification: {0}
configure.invalidModuleDescriptor = cannot open the module descriptor from {0}
configure.invalidModuleOption = incorrectly formatted option: {0}
configure.duplicateExport = can specify a package in a module only once with --add-export
configure.OneOfModuleOrSourcePath = cannot specify both -source-path and --module-source-path
configure.duplicateBootClasspath = duplicate bootclasspath specification: {0}
configure.duplicateExtDirs = duplicate extdirs specification: {0}
configure.duplicateSourcepath = duplicate sourcepath specification: {0}
configure.invalidDebugOption = invalid debug option: {0}
configure.invalidWarningConfiguration = invalid warning configuration: ''{0}''
configure.invalidWarning = invalid warning token: ''{0}''. Ignoring warning and compiling
configure.invalidWarningOption = invalid warning option: ''{0}''. Must specify a warning token
configure.targetJDK = target level should be in ''1.1''...''1.8'',''9''...''11'' (or ''5.0''..''11.0'') or cldc1.1: {0}
configure.incompatibleTargetForSource = Target level ''{0}'' is incompatible with source level ''{1}''. A target level ''{1}'' or better is required
configure.incompatibleTargetForGenericSource = Target level ''{0}'' is incompatible with source level ''{1}''. A source level ''1.5'' or better is required
configure.incompatibleComplianceForSource = Compliance level ''{0}'' is incompatible with source level ''{1}''. A compliance level ''{1}'' or better is required
configure.incompatibleComplianceForTarget = Compliance level ''{0}'' is incompatible with target level ''{1}''. A compliance level ''{1}'' or better is required
configure.repetition = repetition must be a positive integer: {0}
configure.maxProblems = max problems must be a positive integer: {0}
configure.invalidNowarnOption = invalid syntax for nowarn option: {0}
configure.unsupportedPreview = Preview of features is supported only at the latest source level

configure.invalidErrorConfiguration = invalid error configuration: ''{0}''
configure.invalidError = invalid error token: ''{0}''. Ignoring this error token and compiling
configure.invalidErrorOption = invalid error option: ''{0}''. Must specify an error token

configure.invalidInfoConfiguration = invalid info configuration: ''{0}''
configure.invalidInfo = invalid info token: ''{0}''. Ignoring this info token and compiling
configure.invalidInfoOption = invalid info option: ''{0}''. Must specify an info token

configure.notOnModuleSourcePath = ''{0}'' does not belong to a module on the module source path
configure.no.ModuleDescriptorVersionparse = Could not invoke method java.lang.module.ModuleDescriptor.Version.parse(), cannot validate module version.

## configure.directoryNotExist = directory does not exist: {0}
configure.unrecognizedOption = Unrecognized option : {0}
configure.noClasspath = no classpath defined, using default directory instead
configure.incorrectClasspath = incorrect classpath: {0}
configure.invalidexpansionargumentname = expansion argument file {0} does not exist or cannot be read
configure.cannotOpenLog = cannot open .log file: {0}
configure.cannotOpenLogInvalidEncoding = cannot open .log file: {0}; because UTF-8 is not supported
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
configure.incorrectExtDirsEntry = incorrect ext dir entry; {0} must be a directory
configure.incorrectEndorsedDirsEntry = incorrect endorsed dir entry; {0} must be a directory
configure.duplicateEndorsedDirs = duplicate endorseddirs specification: {0}
configure.missingDestinationPath = destination path must be provided with module source path
configure.incorrectDestinationPathEntry = incorrect destination path entry: {0}
configure.unexpectedBracket = unexpected bracket: {0}
configure.unexpectedDestinationPathEntry = unexpected destination path entry in {0} option
configure.unexpectedDestinationPathEntryFile = unexpected destination path entry for file: {0}
configure.accessRuleAfterDestinationPath = access rules cannot follow destination path entries: {0}
configure.duplicateDestinationPathEntry = duplicate destination path entry in {0} option
configure.invalidClassName = invalid class name: {0}
configure.invalidModuleName = invalid module name: {0}
configure.packageConflict = The package {0} is accessible from more than one module: {1}, {2}
configure.unavailableAPT = Unable to load annotation processing manager {0} from classpath.
configure.incorrectVMVersionforAPT = Annotation processing got disabled, since it requires a 1.6 compliant JVM
configure.incompatibleSourceForCldcTarget=Target level ''{0}'' is incompatible with source level ''{1}''. A source level ''1.3'' or lower is required
configure.incompatibleComplianceForCldcTarget=Target level ''{0}'' is incompatible with compliance level ''{1}''. A compliance level ''1.4''or lower is required
configure.invalidClasspathSection = invalid Class-Path header in manifest of jar file: {0}
configure.multipleClasspathSections = multiple Class-Path headers in manifest of jar file: {0}
configure.missingwarningspropertiesfile=properties file {0} does not exist
configure.ioexceptionwarningspropertiesfile=An IOException occurred while reading the properties file {0}
configure.multipleencodings=Multiple encoding specified: {1}. The default encoding has been set to {0}
configure.differentencodings=Found encoding {0}. Different encodings were specified: {1}
configure.differentencoding=Found encoding {0}. A different encoding was specified: {1}

### null annotations
configure.invalidNullAnnot = Token {0} is not in the expected format "nullAnnot(<nullable annotation name> | <non null annotation name> | <non-null by default annotation name>)"
configure.missingAnnotationPath = Missing argument to -annotationpath at ''{0}''

### requestor
requestor.error = {0}. ERROR in {1}
requestor.warning = {0}. WARNING in {1}
requestor.info = {0}. INFO in {1}
requestor.extraerror = {0}. ERROR:
requestor.extrawarning = {0}. WARNING:
requestor.extrainfo = {0}. INFO:
requestor.notRetrieveErrorMessage = Cannot retrieve the error message for {0}
requestor.noFileNameSpecified = (original file name is not available)

### EMACS STYLE
output.emacs.error=error
output.emacs.warning=warning
output.emacs.info=info

### 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 {1} in {0} because of an IOException: {2}

### miscellaneous
### {ObjectTeams: one for testing the other for -version command 
misc.version.orig = {0} {1}, {2}
misc.version = {0} {1}, {2}\n{3}, {4}, {5}
### SH}
misc.usage = {1} {2}\n\
{3}\n\
\ \n\
\ Usage: <options> <source files | directories>\n\
\ If directories are specified, then their source contents are compiled.\n\
\ Possible options are listed below. Options enabled by default are prefixed\n\
\ with ''+''.\n\
\ \n\
\ Classpath options:\n\
\    -cp -classpath <directories and ZIP archives separated by {0}>\n\
\                       specify location for application classes and sources.\n\
\                       Each directory or file can specify access rules for\n\
\                       types between ''['' and '']'' (e.g. [-X] to forbid\n\
\                       access to type X, [~X] to discourage access to type X,\n\
\                       [+p/X{0}-p/*] to forbid access to all types in package p\n\
\                       but allow access to p/X)\n\
\    -bootclasspath <directories and ZIP archives separated by {0}>\n\
\                       specify location for system classes. Each directory or\n\
\                       file can specify access rules for types between ''[''\n\
\                       and '']''\n\
\    -sourcepath <directories and ZIP archives separated by {0}>\n\
\                       specify location for application sources. Each directory\n\
\                       or file can specify access rules for types between ''[''\n\
\                       and '']''. Each directory can further specify a specific\n\
\                       destination directory using a ''-d'' option between ''[''\n\
\                       and '']''; this overrides the general ''-d'' option.\n\
\                       .class files created from source files contained in a\n\
\                       jar file are put in the user.dir folder in case no\n\
\                       general ''-d'' option is specified. ZIP archives cannot\n\
\                       override the general ''-d'' option\n\
\    -extdirs <directories separated by {0}>\n\
\                       specify location for extension ZIP archives\n\
\    -endorseddirs <directories separated by {0}>\n\
\                       specify location for endorsed ZIP archives\n\
\    -d <dir>           destination directory (if omitted, no directory is\n\
\                       created); this option can be overridden per source\n\
\                       directory\n\
\    -d none            generate no .class files\n\
\    -encoding <enc>    specify default encoding for all source files. Each\n\
\                       file/directory can override it when suffixed with\n\
\                       ''[''<enc>'']'' (e.g. X.java[utf8]).\n\
\                       If multiple default encodings are specified, the last\n\
\                       one will be used.\n\
\ \n\
\ Module compilation options:\n\
\   These options are meaningful only in Java 9 environment or later.\n\
\    --module-source-path <directories separated by {0}>\n\
\                       specify where to find source files for multiple modules\n\
\    -p --module-path <directories separated by {0}>\n\
\                       specify where to find application modules\n\
\    --processor-module-path <directories separated by {0}>\n\
\                       specify module path where annotation processors\n\
\                       can be found\n\
\    --system <jdk>      Override location of system modules\n\
\    --add-exports <module>/<package>=<other-module>(,<other-module>)*\n\
\                       specify additional package exports clauses to the\n\
\                       given modules\n\
\    --add-reads <module>=<other-module>(,<other-module>)*\n\
\                       specify additional modules to be considered as required\n\
\                       by given modules\n\
\    --add-modules  <module>(,<module>)*\n\
\                       specify the additional module names that should be\n\
\                       resolved to be root modules\n\
\    --limit-modules <module>(,<module>)*\n\
\                       specify the observable module names\n\
\    --release <release>\n\
\                       compile for a specific VM version\n\
\ \n\
\ Compliance options:\n\
\    -1.3               use 1.3 compliance (-source 1.3 -target 1.1)\n\
\    -1.4             + use 1.4 compliance (-source 1.3 -target 1.2)\n\
\    -1.5 -5 -5.0       use 1.5 compliance (-source 1.5 -target 1.5)\n\
\    -1.6 -6 -6.0       use 1.6 compliance (-source 1.6 -target 1.6)\n\
\    -1.7 -7 -7.0       use 1.7 compliance (-source 1.7 -target 1.7)\n\
\    -1.8 -8 -8.0       use 1.8 compliance (-source 1.8 -target 1.8)\n\
\    -1.9 -9 -9.0       use 1.9 compliance (-source 1.9 -target 1.9)\n\
\    -source <version>  set source level: 1.3 to 1.9 (or 6, 6.0, etc)\n\
\    -target <version>  set classfile target: 1.1 to 1.9 (or 6, 6.0, etc)\n\
\                       cldc1.1 can also be used to generate the StackMap\n\
\                       attribute\n\
\    -ot.weaving:otre   compile for the traditional Object Teams weaver\n\
\    -ot.weaving:otdre  compile for the dynamic Object Teams weaver\n\
\ \n\
\ Warning options:\n\
\    -deprecation     + deprecation outside deprecated code (equivalent to\n\
\                       -warn:+deprecation)\n\
\    -nowarn -warn:none disable all warnings\n\
\    -nowarn:[<directories separated by {0}>]\n\
\                       specify directories from which optional problems should\n\
\                       be ignored\n\
\    -?:warn -help:warn display advanced warning options\n\
\ \n\
\ Error options:\n\
\    -err:<warnings separated by ,>    convert exactly the listed warnings\n\
\                                      to be reported as errors\n\
\    -err:+<warnings separated by ,>   enable additional warnings to be\n\
\                                      reported as errors\n\
\    -err:-<warnings separated by ,>   disable specific warnings to be\n\
\                                      reported as errors\n\
\ \n\
\ Info options:\n\
\    -info:<warnings separated by ,>    convert exactly the listed warnings\n\
\                                      to be reported as infos\n\
\    -info:+<warnings separated by ,>   enable additional warnings to be\n\
\                                      reported as infos\n\
\    -info:-<warnings separated by ,>   disable specific warnings to be\n\
\                                      reported as infos\n\
\ \n\
\ Setting warning, error or info options using properties file:\n\
\    -properties <file>   set warnings/errors/info option based on the properties\n\
\                          file contents. This option can be used with -nowarn,\n\
\                          -err:.., -info: or -warn:.. options, but the last one\n\
\                          on the command line sets the options to be used.\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\
\ Annotation processing options:\n\
\   These options are meaningful only in a 1.6 environment.\n\
\    -Akey[=value]        options that are passed to annotation processors\n\
\    -processorpath <directories and ZIP archives separated by {0}>\n\
\                         specify locations where to find annotation processors.\n\
\                         If this option is not used, the classpath will be\n\
\                         searched for processors\n\
\    -processor <class1[,class2,...]>\n\
\                         qualified names of the annotation processors to run.\n\
\                         This bypasses the default annotation discovery process\n\
\    -proc:only           run annotation processors, but do not compile\n\
\    -proc:none           perform compilation but do not run annotation\n\
\                         processors\n\
\    -s <dir>             destination directory for generated source files\n\
\    -XprintProcessorInfo print information about which annotations and elements\n\
\                         a processor is asked to process\n\
\    -XprintRounds        print information about annotation processing rounds\n\
\    -classNames <className1[,className2,...]>\n\
\                         qualified names of binary classes to process\n\
\ \n\
\ Advanced options:\n\
\    @<file>            read command line arguments from file\n\
\    -maxProblems <n>   max number of problems per compilation unit (100 by\n\
\                       default)\n\
\    -log <file>        log to a file. If the file extension is ''.xml'', then\n\
\                       the log will be a xml file.\n\
\    -proceedOnError[:Fatal]\n\
\                       do not stop at first error, dumping class files with\n\
\                       problem methods\n\
\                       With ":Fatal", all optional errors are treated as fatal\n\
\    -failOnWarning     fail compilation if there are warnings\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\n\
\                       if no error)\n\
\    -repeat <n>        repeat compilation process <n> times for perf analysis\n\
\    -inlineJSR         inline JSR bytecode (implicit if target >= 1.5)\n\
\    -enableJavadoc     consider references in javadoc\n\
\    -parameters        generate method parameters attribute (for target >= 1.8)\n\
\    -genericsignature  generate generic signature for lambda expressions\n\
\    -Xemacs            used to enable emacs-style output in the console.\n\
\                       It does not affect the xml log output\n\
\    -missingNullDefault  report missing default nullness annotation\n\
\    -annotationpath <directories and ZIP archives separated by {0}>\n\
\                       specify locations where to find external annotations\n\
\                       to support annotation-based null analysis.\n\
\                       The special name CLASSPATH will cause lookup of\n\
\                       external annotations from the classpath and sourcepath.\n\
\ \n\
\    -? -help           print this help message\n\
\    -v -version        print compiler version\n\
\    -showversion       print compiler version and continue\n\
\ \n\
\ Ignored options:\n\
\    -J<option>         pass option to virtual machine (ignored)\n\
\    -X<option>         specify non-standard option (ignored\n\
\                       except for listed -X options)\n\
\    -X                 print non-standard options and exit (ignored)\n\
\    -O                 optimize for execution time (ignored)\n
##{ObjectTeams: OT-warning tokens added
misc.usage.warn = {1} {2}\n\
{3}\n\
\ \n\
\ Warning options:\n\
\    -deprecation         + deprecation outside deprecated code\n\
\    -nowarn -warn:none disable all warnings and infos\n\
\    -nowarn:[<directories separated by {0}>]\n\
\                       specify directories from which optional problems should\n\
\                       be ignored\n\
\    -warn:<warnings separated by ,>    enable exactly the listed warnings\n\
\    -warn:+<warnings separated by ,>   enable additional warnings\n\
\    -warn:-<warnings separated by ,>   disable specific warnings\n\
\      abstractrelevantrole + abstract relevant role (OTJLD 2.5(b))\n\
\      adaptDeprecated    + adapting a deprecated type/method\n\
\      all                  enable all warnings\n\
\      allDeadCode          dead code including trivial if(DEBUG) check\n\
\      allDeprecation       deprecation including inside deprecated code\n\
\      allJavadoc           invalid or missing javadoc\n\
\      allOver-ann          all missing @Override annotations\n\
\      all-static-method    all method can be declared as static warnings\n\
\      ambiguousbinding   + ambiguous role-base bindings (OTJLD 2.3.4(a))\n\
\      ambiguouslowering  + ambiguous lowering or upcast (OTJLD 2.2(f))\n\
\      assertIdentifier   + ''assert'' used as identifier\n\
\      basecall           + base call not issued exactly once on each path\n\
\                           (OTJLD 4.3(b,c))\n\
\      baseclasscycle     + role involved in a baseclass-member cycle\n\
\                           (OTJLD 2.1.2(b)\n\
\      bindingconventions + discouraged use of import / import base\n\
\                           (OTJLD 2.1.2(d))\n\
\      bindingtosystemclass 	+ trying to bind a role to a system class\n\
\      boxing               autoboxing conversion\n\
\      charConcat         + char[] in String concat\n\
\      compareIdentical   + comparing identical expressions\n\
\      conditionAssign      possible accidental boolean assignment\n\
\      constructorName    + method with constructor name\n\
\      dangerouscallin    + dangerous callin binding (hashCode or equals)\n\
\      deadCode           + dead code excluding trivial if (DEBUG) check\n\
\      decapsulation      + overriding access restrictions of a base class\n\
\                           (OTJLD 3.4)\n\
\      dep-ann              missing @Deprecated annotation\n\
\      deprecation        + deprecation outside deprecated code\n\
\      discouraged        + use of types matching a discouraged access rule\n\
\      emptyBlock           undocumented empty block\n\
\      enumIdentifier       ''enum'' used as identifier\n\
\      enumSwitch           incomplete enum switch\n\
\      enumSwitchPedantic + report missing enum switch cases even\n\
\                           in the presence of a default case\n\
\      exceptioninguard   + guard predicate throwing checked exception\n\
\      fallthrough          possible fall-through case\n\
\      fieldHiding          field hiding another variable\n\
\      finalBound           type parameter with final bound\n\
\      finally            + finally block not completing normally\n\
\      forbidden          + use of types matching a forbidden access rule\n\
\      fragilecallin      + replace callin not providing expected result\n\
\                           (OTJLD 4.3(e))\n\
\      hashCode              missing hashCode() method when overriding equals()\n\
\      hiddenLiftingProblem + a lifting that is not directly visible in source\n\
\                             code could fail at runtime (OTJLD 2.3.5)\n\
\      hiding               macro for fieldHiding, localHiding, typeHiding and\n\
\                           maskedCatchBlock\n\
\      includeAssertNull    raise null warnings for variables\n\
\                           that got tainted in an assert expression\n\
\      indirectStatic       indirect reference to static member\n\
\      inferredcallout    + a callout binding has to be inferred (OTJLD 3.1(j))\n\
\      inheritNullAnnot     inherit null annotations\n\
\      intfAnnotation     + annotation type used as super interface\n\
\      intfNonInherited   + interface non-inherited method compatibility\n\
\      intfRedundant        find redundant superinterfaces\n\
\      invalidJavadoc       all warnings for malformed javadoc tags\n\
\      invalidJavadocTag    validate javadoc tag arguments\n\
\      invalidJavadocTagDep validate deprecated references in javadoc tag args\n\
\      invalidJavadocTagNotVisible  validate non-visible references in javadoc\n\
\							tag args\n\
\      invalidJavadocVisibility(<visibility>)  specify visibility modifier\n\
\							for malformed javadoc tag warnings\n\
\      javadoc              invalid javadoc\n\
\      localHiding          local variable hiding another variable\n\
\      maskedCatchBlock   + hidden catch block\n\
\      missingJavadocTags   missing Javadoc tags\n\
\      missingJavadocTagsOverriding missing Javadoc tags in overriding methods\n\
\      missingJavadocTagsMethod missing Javadoc tags for method type parameter\n\
\      missingJavadocTagsVisibility(<visibility>)  specify visibility modifier\n\
\							for missing javadoc tags warnings\n\
\      missingJavadocComments   missing Javadoc comments\n\
\      missingJavadocCommentsOverriding   missing Javadoc tags in overriding\n\
\							methods\n\
\      missingJavadocCommentsVisibility(<visibility>)  specify visibility\n\
\							modifier for missing javadoc comments warnings\n\
\      module             + module related problems.\n\
\      nls                  string literal lacking non-nls tag //$NON-NLS-<n>$\n\
\      noEffectAssign     + assignment without effect\n\
\      null                 potential missing or redundant null check\n\
\      nullAnnot(<annot. names separated by |>)   annotation based null analysis,\n\
\                           nullable|nonnull|nonnullbydefault annotation types\n\
\                           optionally specified using fully qualified names.\n\
\							Enabling this option enables all null-annotation\n\
\							related sub-options. These can be individually\n\
\							controlled using options listed below.\n\
\      nullAnnotConflict    conflict between null annotation specified\n\
\							and nullness inferred. Is effective only with\n\
\							nullAnnot option enabled.\n\
\      nullAnnotRedundant   redundant specification of null annotation. Is\n\
\							effective only with nullAnnot option enabled.\n\
\      nullDereference    + missing null check\n\
\	   nullUncheckedConversion unchecked conversion from non-annotated type\n\
\							to @NonNull type. Is effective only with\n\
\							nullAnnot option enabled.\n\
\      over-ann             missing @Override annotation (superclass)\n\
\      paramAssign          assignment to a parameter\n\
\      pkgDefaultMethod   + attempt to override package-default method\n\
\      raw                + usage of raw type\n\
\      removal            + deprecation marked for removal\n\
\      resource           + (pot.) unsafe usage of resource of type Closeable\n\
\      roleinstantiation  + unsafe instantiation of a role\n\
\                           (OTJLD 2.4.1(c), 2.4.3)\n\
\      roletypesyntax     + old style syntax for role types (dependent types)\n\
\                           (OTJLD 1.2.2(b))\n\
\      semicolon            unnecessary semicolon, empty statement\n\
\      serial             + missing serialVersionUID\n\
\      specialParamHiding   constructor or setter parameter hiding a field\n\
\      static-method        method can be declared as static\n\
\      static-access        macro for indirectStatic and staticReceiver\n\
\      staticReceiver     + non-static reference to static member\n\
\      super                overriding a method without making a super invocation\n\
\      suppress           + enable @SuppressWarnings\n\
\                           When used with -err:, it can also silence optional\n\
\                           errors and warnings\n\
\      switchDefault        switch statement lacking a default case\n\
\      syncOverride         missing synchronized in synchr. method override\n\
\      syntacticAnalysis    perform syntax-based null analysis for fields\n\
\      syntheticAccess      synthetic access for innerclass\n\
\      tasks(<tags separated by |>) tasks identified by tags inside comments\n\
\      typeHiding         + type parameter hiding another type\n\
\      unavoidableGenericProblems + ignore unavoidable type safety problems\n\
\                                   due to raw APIs\n\
\      unchecked          + unchecked type operation\n\
\      unlikelyCollectionMethodArgumentType\n\
\                         + unlikely argument type for collection method\n\
\                           declaring an Object parameter\n\
\      unlikelyEqualsArgumentType unlikely argument type for method equals()\n\
\      unnecessaryElse      unnecessary else clause\n\
\      unqualifiedField     unqualified reference to field\n\
\      unused               macro for unusedAllocation, unusedArgument,\n\
\                               unusedImport, unusedLabel, unusedLocal,\n\
\                               unusedPrivate, unusedThrown, and unusedTypeArgs,\n\
\								unusedExceptionParam\n\
\      unusedAllocation     allocating an object that is not used\n\
\      unusedArgument       unread method parameter\n\
\      unusedExceptionParam unread exception parameter\n\
\      unusedImport       + unused import declaration\n\
\      unusedLabel        + unused label\n\
\      unusedLocal        + unread local variable\n\
\      unusedParam		    unused parameter\n\
\      unusedParamOverriding unused parameter for overriding method\n\
\      unusedParamImplementing unused parameter for implementing method\n\
\      unusedParamIncludeDoc unused parameter documented in comment tag\n\
\      unusedPrivate      + unused private member declaration\n\
\      unusedThrown         unused declared thrown exception\n\
\      unusedThrownWhenOverriding unused declared thrown exception in \n\
\							overriding method\n\
\      unusedThrownIncludeDocComment     unused declared thrown exception,\n\
\							documented in a comment tag\n\
\      unusedThrownExemptExceptionThrowable  unused declared thrown exception,\n\
\							exempt Exception and Throwable\n\
\      unusedTypeArgs     + unused type arguments for method and constructor\n\
\      uselessTypeCheck     unnecessary cast/instanceof operation\n\
\      varargsCast        + varargs argument need explicit cast\n\
\      warningToken       + unsupported or unnecessary @SuppressWarnings\n
## SH}
