; Options for the Java front end.
; Copyright (C) 2003-2013 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 3, or (at your option) any later
; version.
; 
; GCC 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
; for more details.
; 
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING3.  If not see
; <http://www.gnu.org/licenses/>.

; See the GCC internals manual for a description of this file's format.

; Please try to keep this file in ASCII collating order.

Language
Java

-CLASSPATH
Java Separate Alias(fclasspath=)

-all-warnings
Java Alias(Wall)

-bootclasspath
Java Separate Alias(fbootclasspath=)

-classpath
Java Separate Alias(fclasspath=)

-dependencies
Java Alias(M)

-encoding
Java Separate Alias(fencoding=)

-extdirs
Java Separate Alias(fextdirs=)

-include-directory
Java Separate Alias(I)

-include-directory=
Java Joined Alias(I)

-output-class-directory
Java Separate Alias(foutput-class-dir=)

-output-class-directory=
Java Joined Alias(foutput-class-dir=)

-resource
Java Separate Alias(fcompile-resource=)

-resource=
Java Joined Alias(fcompile-resource=)

-user-dependencies
Java Alias(MM)

C
Driver
; Java driver option in fact distinct from C-family option with the same name.

CLASSPATH
Java Separate Alias(fclasspath=)

D
Driver Joined Separate
; Java driver option similar to C-family option.

I
Java Joined Separate
; Documented for C

M
Java
; Documented for C

MD_
Java Undocumented RejectDriver
; Documented for C

MF
Java Separate
; Documented for C

MM
Java
; Documented for C

MMD_
Java Undocumented RejectDriver
; Documented for C

MP
Java
; Documented for C

MT
Java Separate
; Documented for C

Wall
Java
; Documented for C

Wdeprecated
Java Var(warn_deprecated)
; Documented for C

Wextraneous-semicolon
Java Var(flag_extraneous_semicolon)
Warn if deprecated empty statements are found

Wout-of-date
Java Var(flag_newer) Init(1)
Warn if .class files are out of date

Wredundant-modifiers
Java Var(flag_redundant)
Warn if modifiers are specified when not necessary

bootclasspath
Java Separate Alias(fbootclasspath=)

classpath
Java Separate Alias(fclasspath=)

d
Java Separate SeparateAlias Alias(foutput-class-dir=)
; Different from language-independent -d with joined argument.

encoding
Java Separate Alias(fencoding=)

extdirs
Driver Separate

fCLASSPATH=
Java JoinedOrMissing RejectNegative Alias(fclasspath=)
--CLASSPATH	Deprecated; use --classpath instead

faux-classpath
Java Separate RejectNegative Undocumented

fassert
Java Var(flag_assert) Init(1)
Permit the use of the assert keyword

fassume-compiled
Java

fassume-compiled=
Java JoinedOrMissing

fenable-assertions
Java

fenable-assertions=
Java JoinedOrMissing

fdisable-assertions
Java

fdisable-assertions=
Java JoinedOrMissing

fbootclasspath=
Java JoinedOrMissing RejectNegative
--bootclasspath=<path>	Replace system path

fcheck-references
Java Var(flag_check_references)
Generate checks for references to NULL

fclasspath=
Java JoinedOrMissing RejectNegative
--classpath=<path>	Set class path

fcompile-resource=
Java Joined RejectNegative

femit-class-file
Java Var(flag_emit_class_files)
Output a class file

femit-class-files
Java Var(flag_emit_class_files)
Alias for -femit-class-file

fencoding=
Java Joined RejectNegative
--encoding=<encoding>	Choose input encoding (defaults from your locale)

fextdirs=
Java Joined RejectNegative
--extdirs=<path>	Set the extension directory path

fmain=
Driver JoinedOrMissing RejectNegative

fsource-filename=
Java Joined Undocumented 

ffilelist-file
Java Var(flag_filelist_file)
Input file is a file with a list of filenames to compile

fsaw-java-file
Java Undocumented RejectNegative

fforce-classes-archive-check
Java Var(flag_force_classes_archive_check)
Always check for non gcj generated classes archives

fhash-synchronization
Java Var(flag_hash_synchronization)
Assume the runtime uses a hash table to map an object to its synchronization structure

findirect-classes
Java Var(flag_indirect_classes) Init(1)
Generate instances of Class at runtime

findirect-dispatch
Java Var(flag_indirect_dispatch)
Use offset tables for virtual method calls

finline-functions
Java

fjni
Java Var(flag_jni)
Assume native functions are implemented using JNI

foptimize-static-class-initialization
Java Var(flag_optimize_sci)
Enable optimization of static class initialization code

foutput-class-dir=
Java Joined RejectNegative

freduced-reflection
Java Var(flag_reduced_reflection)
Reduce the amount of reflection meta-data generated

fstore-check
Java Var(flag_store_check) Init(1)
Enable assignability checks for stores into object arrays

fuse-boehm-gc
Java Var(flag_use_boehm_gc)
Generate code for the Boehm GC

fuse-divide-subroutine
Java Var(flag_use_divide_subroutine) Init(1)
Call a library routine to do integer divisions

fuse-atomic-builtins
Java Var(flag_use_atomic_builtins) Init(0)
Generate code for built-in atomic operations

fbootstrap-classes
Java Var(flag_bootstrap_classes)
Generated should be loaded by bootstrap loader

fsource=
Java Joined
Set the source language version

ftarget=
Java Joined
Set the target VM version

s-bc-abi
Driver

static-libgcj
Driver

version
Java RejectDriver

;
; Warnings handled by ecj.
; FIXME: document them
;

Wconstructor-name
Java

Wpkg-default-method
Java

Wmasked-catch-block
Java

Wall-deprecation
Java

Wunused-local
Java

Wunused-argument
Java

Wunused-import
Java

Wunused-private
Java

Wunused-label
Java

Wlocal-hiding
Java

Wfield-hiding
Java

Wspecial-param-hiding
Java

Wcondition-assign
Java

Wsynthetic-access
Java

Wnls
Java

Wstatic-receiver
Java

Windirect-static
Java

Wno-effect-assign
Java

Wintf-non-inherited
Java

Wchar-concat
Java

Wserial
Java

Wempty-block
Java

Wuseless-type-check
Java

Wuncheck
Java

Wraw
Java

Wfinal-bound
Java

Wsuppress
Java

Wwarning-token
Java

Wunnecessary-else
Java

Wjavadoc
Java

Wall-javadoc
Java

Wtasks
Java

Wassert-identifier
Java

Wenum-identifier
Java

Wfinally
Java

Wunused-thrown
Java

Wunqualified-field
Java

Wtype-hiding
Java

Wvarargs-cast
Java

Wnull
Java

Wboxing
Java

Wover-ann
Java

Wdep-ann
Java

Wintf-annotation
Java

Wenum-switch
Java

Whiding
Java

Wstatic-access
Java

Wunused
Java

Wparam-assign
Java

Wdiscouraged
Java

Wforbidden
Java

Wfallthrough
Java

