Skip to content

Instantly share code, notes, and snippets.

@elikohen
Created February 3, 2014 15:48
Show Gist options
  • Save elikohen/8786354 to your computer and use it in GitHub Desktop.
Save elikohen/8786354 to your computer and use it in GitHub Desktop.
Java+Android Guia de estilos

Guía de estilo para desarrollos Android

Eli Kohen

Código Java

Nomenclaturas

Estas normas se aplicarán siempre y cuando sea posible, con la única excepción de tener que usar otra distinta porque lo exija algún framework o sea código auto-generado (véase Spring for Android, o el generador de código de WebServices).

  • Utilizaremos siempre nombres en inglés para variables, clases, funciones y demás. Si no sabes cómo se escribe algo, búscalo en WordReference o en Google Translator. Se utilizará el formato camel case. Y en caso de las variables de clase se añadirá siempre una m delante.

     // OK
     protected String mAntName;
     // FAIL
     protected String nombre_de_hormiga;
  • Los recursos de la aplicación deben utilizar una nomenclatura con minúsculas y barras bajas. Las variables que los contengan tendrán que usar la nomenclatura camel case como se ha dicho en el apartado anterior.

     // OK
     TextView loginTitle = (TextView)findViewById(R.id.login_title);
     // FAIL
     TextView passwordTitle = (TextView)findViewById(R.id.passwordTitle);
  • Las constantes se escribirán en mayúsculas y se separarán con barras bajas. Deberán ser static final.

     // OK
     public static final int TIMEOUT = 30;
     // FAIL
     public String serverUrl = "http://api.something.com/login";
  • Sólo se permiten nombres de variables no descriptivos (por ejemplo, letras como "i", "k", "j") en variables locales de un método, como pueden ser los índices de un bucle for.

     // OK
     private void myFunction() {
     	System.out.println("Write it down 10 times…");
     	for (int i=0; i<10; i++) {
     		System.out.println("I am awesome");
     	}
     }
     // FAIL
     protected int i;
     private void myFunction() {
     	System.out.println("i value is "+i);
     }
  • Se deberá incluir la visibilidad en las declaraciones siempre.

     // OK
     private String mThisIsMyFavouriteStringInTheCitadel;
    
     // FAIL
     String derpDerpDerp;
  • Los nombres de variables deberán ser suficientemente descriptivos como para intentar evitar, en la medida de lo posible, tener que comentar qué van a contener.

     // OK
     private String mUserName;
     // FAIL
     private String stuff;
  • Las variables deberán ser final si sólo se van a asignar una vez, especialmente en el caso de que sean public o protected. Un ejemplo muy claro serían todos los elementos

     // OK
     private final TextView mLoginText;
     // FAIL 
     private TextView passwordText;
     ...
     private void initializeViews() {
     	mLoginText = (TextView)findViewById(R.id.login_text);
     	passwordText = (TextView)findViewById(R.id.password_text);
     }

Imports

  • Los imports deben listar todo el nombre de la clase que se esté usando.

     // OK
     import android.widget.EditText;
     // FAIL
     import android.widget.*;
  • Ordena los imports: primero los de android.* - luego los de librerías externas - luego los de java.*. No hay mucho problema con esto puesto con el súper atajo de ⌘⇧O lo hace sólo el Eclipse, y con ⌘⌥O lo hace el IntelliJ.

  • Los imports tienen que estar separados por una línea si cambia su paquete base.

Anotaciones

  • Cuando sobrescribas un método de una clase padre utiliza la anotación @Override, puesto que te avisará en tiempo de compilación si te has equivocado con la cabecera del método.

     // Esto fallaría en compilación.
     @Override
     public void oncreate(Bundle myBundle) { […] }
  • Cuando vayas a deprecar un método que se siga usando en algún módulo que por algún casual no debas perder el tiempo en tocar, utiliza la anotación @Deprecated en el método para que el próximo que toque el método sepa que eso está deprecado.

Variables

  • Las variables de clase tienen que estar definidas al principio de la clase, justo después de las constantes de esa clase (si las hubiera).

  • Inicializa las variables locales al declararlas.

     // OK
     String userName = "JoseMari";
     // FAIL
     String userName;
     […]
     userName = "Pepito";

Excepción: No hace falta inicializarlas si hay un try/catch de por medio.

  • Intenta siempre utilizar el mínimo scope posible para tus variables. Por ejemplo, si utilizas una variable dentro de un bucle únicamente, declárala dentro del mismo.

     // OK
     while (true) {
     	String result = performActionAndGetResult();
     	[…]
     }

Excepciones serían aquellas variables de clases cuya inicialización es muy costosa o consumen mucha memoria, como StringBuilder, Bitmap, SimpleDateFormat, Pattern… esas se pueden reutilizar y definirse en un scope más amplio.

  • Intenta en la medida de lo posible poner un nombre descriptivo a tus variables. En el momento que te toca comentar una TextView que has declarado, es que (posiblemente) estás nombrándola mal.

Formateo de código

  • El tamaño máximo de línea será de 140 caracteres. Como un tweet, o como hacemos en la programación para iOS. Obviamente, en los imports o en comentarios que contengan una URL larga, pueden sobrepasarse estas medidas.

  • El código deberá estar correctamente indentado. La indentación deberá ser de 1 tabulación (o múltiplos de 4 espacios). Normalmente se espacia con 4 espacios o 1 tabulación todo, y con 8 espacios o 2 tabulaciones se espacian las líneas partidas.

  • En las declaraciones de funciones, condicionales y en do-whiles deberemos poner SIEMPRE las llaves. La primera llave tendrá que ponerse en la línea del condicional.

     // OK
     private void validateLogin() {
     	if ("".equals(loginText.getText())) {
     		Log.w("MyApp","Login FAILED!");
     	} else {
     		Log.i("MyApp","Login OK!");
     	}
     	// […]
     } 
     // FAIL
     private void initSession(String userLogin, String userPassword) 
     {
     	if ("".equals(userLogin) || "".equals(userPassword))
     	{
     		showError();
     	}
     }

Como única excepción a esta regla, se pueden no poner las llaves en los casos que sólo haya una cosa a hacer y quepa en una línea. Aun así, nos debería chirriar verlo y deberíamos evitarlo a toda costa.

// OK
private void initSession(String userId) {
	if ("".equals(userId)) return;
}

Tratamiento de errores y excepciones

  • No tengas miedo de crear tus propias excepciones. De hecho, es recomendable que crees excepciones que se adecuen a tu nivel de abstracción. Que una de tus clases lógicas tenga un throws IOException es mala idea. Quizá deberías tener una clase que fuera LoginException, o NotEnoughPermissions, o lo que proceda, y capturarla ya en tus actividades.
  • Intenta no capturar excepciones demasiado genéricas en la medida de lo posible (Exception). Si intentas saber si una cadena es un número, al convertir comprueba sólo NumberFormatException. Si quieres abrir un archivo, IOException es tu amigo (y si puedes profundizar más en sus clases hijas, mejor).
  • Intenta siempre no tener bloques catch vacíos. Es una buena práctica extraer a otro método todo lo que metas en el bloque catch, para no sufrir de anidamientos múltiples.

Específico de Android

Threading

  • Todo el procesado que se requiera en la aplicación que tenga un mínimo de cantidad de ciclos de CPU o un retardo por acceso a datos externos debería hacerse en un hilo diferente al de UI: acceso a base de datos, acceso a red, escritura en disco, etc.
  • Hay que evitar en lo posible el uso de la clase Thread si la operación involucra refresco de UI. Usar un AsyncTask es una muy buena práctica y ya contempla todas las operaciones normales que debería realizar un Thread. También un IntentService nos puede valer para este tipo de acciones.

AndroidManifest

  • Debe estar estructurado con tabulaciones según la profundidad de los tags.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.myapp"
    android:versionCode="30"
    android:versionName="1.4.10" 
    android:installLocation="auto">

	<permission
         android:name="com.myapp.permission.MAPS_RECEIVE"
         android:protectionLevel="signature"/>
[…]
</manifest>
  • En el campo deberá SIEMPRE ponerse el API Version del último SDK en targetSdkVersion.
  • Debe de tener saltos de línea separando cada uno de los diferentes tipos de tag. Por ejemplo, dentro de deberíamos ver algo así:
	<permission
         android:name="com.myapp.permission.MAPS_RECEIVE"
         android:protectionLevel="signature"/>
    
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
    
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="com.myapp.permission.MAPS_RECEIVE"/>
	<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    
    <uses-feature android:glEsVersion="0x00020000" android:required="true"/>
	
    <application […] />
  • Dentro de application deberían aparecer en este orden los tags:

1º meta-data 2º uses-library 3º activity (la principal) 4º activity (el resto) 5º service 6º receiver

strings.xml

  • Los localizables deben estar estructurados en bloques y separado cada bloque por los comentarios a lo que pertenecen.
<resources>

	<!-- Configuración widget -->
	<string name="choose_station_name_for_widget">Name</string>
	<string name="choose_station_name_for_widget_hint">Enter a short name for this station</string>
	<string name="error_not_name_specified">You have to enter a short name for the stations that will be shown in the widget</string>
	<string name="error_not_selected_network">You have to run the application first and select a bike sharing network</string>

	<!-- Configuración -->
	<string name="app_features">Features</string>
	<string name="configuration">Settings</string>
	<string name="version_number">Version %s</string>

</resources>
  • Cuando una string contiene varios valores, aunque el compilador te avise de que pongas formatted="false" NO LO HAGAS. Este tipo de cadenas deben tratarse con un ordinal en lo que se va a sustituir (%s pasaría a ser %1s / %2s / etc, según corresponda), porque hay idiomas en los que las strings pueden cambiar de orden.

El compilador te salta un error cuando hay más de una variable en una string, y te pide que hagas esto:

	<string name="user_full_name" formatted="false">%s %s</string>

Lo cual es INCORRECTO porque siempre aparecerían las cadenas en el orden que se marca en el código. Pero para esa misma string, en el caso del francés o japonés por ejemplo, los nombres se forman con el apellido primero y el nombre de pila después. Entonces no podríamos mostrarlo si no es con un if horrible de spaghetti code en nuestro fuente.

La forma correcta para todos los casos:

SomeFile.java

String fullName = getString(R.string.user_full_name, name, surname)); 

values-es/strings.xml

		<string name="user_full_name" formatted="false">%1s %2s</string>

values-ja/strings.xml

		<string name="user_full_name" formatted="false">%2s %1s</string>

XML

  • Los XML tienen que tener, como ya dijimos antes, los nombres de las variables en minúscula y separados por barras bajas.

Comentarios

  • Hay que documentar las clases con JavaDoc.

  • Los IDEs te ayudan mucho con el JavaDoc, con escribir /** y darle a ⏎ nos basta. No hay excusa para no documentar.

  • Los métodos públicos y las constantes deben tener su descripción en JavaDoc SIEMPRE. Los setters y getters, que son tan obvios y es aburrido comentarlos, no son problema: si configuras adecuadamente tu IDE, se añadirán solos.

  • Los métodos privados pueden obviar tener JavaDoc siempre y cuando el nombre del método sea suficientemente descriptivo para su función.

  • Utiliza únicamente caracteres ANSI (nada de ñ ni de acentos, por mucho que sean faltas garrafales) en tus comentarios. Se cargan el JavaDoc.

  • Las descripciones deberán comenzar por un verbo en 3ª persona del singular.

     // OK
     /**
      * Inicializa todas las subvistas de nuestra actividad.
      */
     public void initAllVariables() { […] }
  • Nunca, NUNCA pongamos comentarios que no aportan nada.

     // MEGAFAIL
     private void someFunction() {
     	int i = 0;	// Inicializamos i a 0
     	[…]
     	i++;				// Suma 1 a i
     }
  • Para recordatorios en el código deberemos usar TODO, para cosas que no funcionan correctamente FIXME y para cualquier otro comentario importante XXX. Siempre deberemos poner después de la palabra especial nuestro identificador de usuario para que otros que vean ese código en el futuro sepan la autoría del mismo y puedan preguntar el motivo del TODO si no está claro.

     // TODO: nlopez: comprobar si funciona correctamente con el servidor de producción
     new MyRequestTask(this).execute(ourRequest);
  • No dejes porciones de código comentado. Los demás que abran el archivo no sabrán si es importante o no, y esto dará lugar a clases con el síndrome de diógenes, llenas de basura que hacen que sea ilegible y liosa. Si se trata de código que tienes que usar para casos como servidores de producción o staging, hazte un flag en un archivo de constantes y que el código lo procese.

  • En caso de que realmente quieras mantener el código comentado, pon una linea previa comentando porqué esta comentado y para que sirve ese código.

Editor

  • A continuación está el archivo eclipse.xml que puedes importar en el eclipse para definir el formatter (luego cuando quieras formatear el código utiliza cmd+shift+f para autoformatearlo). Para importarlo: Preferencias/Java/CodeStyle/Formatter
  • Para las tabulaciones, utilizar siempre tabs y no espacios, esto se puede definir en: Preferencias/General/editors/texteditors, ahi hay un checkbox de "Insert spaces for tabs", deseleccionalo. De esta forma todo el mundo podrá tener el tamaño de las tabulaciones como quiera, sin modificar el código.

Consejos

  • Refactoriza siempre todo lo que puedas. Tenemos muy buenos IDEs para esa función, como Eclipse o IntelliJ, así que usémoslos.
  • Intenta evitar los métodos con muchas líneas de código. Como regla habitual, si no cabe el método en tu pantalla es que necesita un refactor.
  • Intenta evitar las clases demasiado grandes. Tienden a acumular desidia y mal código. Si una clase crece demasiado, es que se puede refactorizar en clases más pequeñas.
  • Intenta evitar más de un nivel de anidamiento. Si lo tienes, puedes extraer lo de dentro del if a un método y tendrás un código más legible.
  • Apréndete los atajos de tu IDE favorito. Aquí un listado para Eclipse y para IntelliJ, cambiad los Ctrl por Command y suelen corresponderse.
  • Cambia siempre el encoding de tus proyectos a UTF-8. El Eclipse tiene la mala costumbre de usar MacRoman en OSX, y como se os ocurra abrir los archivos con un Linux o un Windows (para lo que sea, nunca se sabe) tendréis un problema. Esto es especialmente sangrante en los archivos de localizables (strings.xml).

Consideraciones finales

Hay varias guías de estilo muy recomendadas para Android y Java en general, pero el documento que has leído tiene un poco de lo mejor de cada casa. Esto lo digo para que si leéis alguno de los documentos de la bibliografía veréis que son mucho más restrictivos y realmente no hay razón para serlo. Se ha intentado maximizar la legibilidad del código que hagamos y unas guías para mantener un estilo cohesionado entre todos. Obviamente, si alguna convención de código de aquí te impide hacer tu trabajo o supone un impedimento titánico, puedes ignorarla, pero bajo tu cuenta y riesgo.

Bibliografía

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="12">
<profile kind="CodeFormatterProfile" name="EKGDev Conventions" version="12">
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="32"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
<setting id="org.eclipse.jdt.core.compiler.source" value="1.7"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="140"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="8"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="16"/>
<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.7"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="140"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.7"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="48"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
</profile>
</profiles>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment