; Options for the Java front end.
; Copyright (C) 2003, 2005, 2007, 2009, 2010 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

