// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Suporte aos Processadores de Anotação no NetBeans IDE, Parte I: Utilizando o Projeto Lombok
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Suporte aos Processadores de Anotação no NetBeans IDE, Parte I: Utilizando o Projeto Lombok - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Suporte aos Processadores de Anotação no NetBeans IDE, Parte I: Utilizando o Projeto Lombok

image::images/netbeans-stamp-80-74-73.png[title="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0"]


* *Utilizando Projeto Lombok para Anotações Personalizadas*

Para demonstrar como as anotações personalizadas funcionam dentro do NetBeans IDE, vamos usar o Projeto Lombok, que fornece uma forma conveniente de gerar automaticamente diversos elementos de código Java, tais como getters, setters, construtores e outros. Para maiores informações sobre suas funcionalidades, visite o link:http://projectlombok.org/[+site do projeto Lombok+]. Entretanto, tenha em mente que o Projeto Lombok inclui algumas funcionalidades que podem não funcionar em todos os ambientes de desenvolvimento.

*Para concluir este tutorial, você precisa dos seguintes recursos e softwares.*

|===
|Software ou Recurso |Versão Necessária 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.2, 7.3, 7.4, 8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+JDK (Java Development Kit)+] |versão 7 ou 8 

|link:http://code.google.com/p/projectlombok/downloads/list[+lombok.jar+] |v1.12.4 ou mais recente 
|===


== Criando um Novo projeto Java

Neste exercício, você cria um projeto Java simples e uma classe chamada  ``MyBooks.java``  que demonstrará as anotações em ação.

1. Escolha *Arquivo > Novo Projeto* no menu principal para abrir o assistente de Novo Projeto.
2. Selecione o tipo de projeto Aplicação Java na categoria Java. Clique em Próximo.
3. Na página Nome e Localização do assistente, digite * ``TestAnn`` * como nome do projeto.
4. Digite * ``testann.TestBooks`` * no campo Criar Classe Principal para substituir o nome default da classe. Clique em Finalizar.
image::images/newproj.png[title="Criando um novo projeto Java no NetBeans IDE"]

Quando você clica em Finalizar, o IDE cria a aplicação Java e abre a classe  ``TestBooks.java``  no editor. Você pode ver que o novo projeto está agora visível na janela Projetos e que a classe  ``TestBooks.java``  está no pacote  ``testann``  sob o nó Pacotes de Código-fonte.


[start=5]
. Clique com o botão direito do mouse no nó do pacote  ``testann``  na janela Projetos e escolha Novo > Classe Java.

[start=6]
. Digite * ``MyBooks`` * para o Nome da Classe e confirme que a classe será criada no pacote  ``testann`` . Clique em Finalizar.

Quando você clicar em Finalizar, o IDE abre a nova classe no editor.


[start=7]
. No editor de código-fonte, adicione os seguintes três campos em  ``MyBooks.java`` .

[source,java]
----

package testann;

public class MyBooks {   
    *private int year; //fields
    private String title;
    private String author;*

}
----

[start=8]
. Coloque o ponteiro do mouse na declaração da classe e pressione Ctrl-Espaço para chamar o suporte de autocompletar código do editor.

[start=9]
. Selecione  ``MyBooks (int year, String title, String author) - generate``  na lista autocompletar código para gerar um construtor para  ``MyBooks.java`` .
image::images/generate-constructor.png[title="Recurso autocompletar código para gerar o construtor"]

[start=10]
. Salve as alterações.


== Ativando Anotações Personalizadas (lombok.jar) para o Projeto

Neste exercício, você irá modificar a janela de propriedades do projeto para adicionar uma biblioteca à classpath do projeto e ativar o processamento de anotações no editor.

1. Faça download do arquivo link:http://code.google.com/p/projectlombok/downloads/list[+lombok.jar+] e salve no sistema.
2. Clique com o botão direito no nó do projeto  ``TestAnn``  e escolha Propriedades.
3. Selecione a categoria Bibliotecas na caixa de diálogo Propriedades do Projeto.
4. Clique em Adicionar JAR/Pasta na guia Compilar e localize o arquivo  ``lombok.jar``  submetido a download.
image::images/properties1.png[title="Categoria das bibliotecas na janela Propriedades"]

Os recursos adicionados à guia Compilar correspondem à opção  ``-classpath``  do link:http://download.oracle.com/javase/6/docs/technotes/tools/windows/javac.html#options[+compilador Java+]. Como  ``lombok.jar``  é um arquivo JAR único que contém definições de anotação e processadores de anotações, é recomendado adicioná-lo ao classpath do projeto, que é a guia Compilação.


[start=5]
. Escolha a categoria Compilação na janela Propriedades do Projeto.

[start=6]
. Confirme se a caixa de seleção Ativar o Processamento de Anotações está selecionada (ela é ativada por default) e selecione a caixa de seleção Ativar o Processamento de Anotações no Editor.
image::images/properties2.png[title="Categoria de compilação na janela Propriedades"]

A caixa de seleção Ativar Processamento de Anotações ativa o processamento de anotação ao construir e compilar o projeto. Se a caixa de seleção não estiver selecionada, a opção  ``-proc:none``  é passada para o compilador Java e a compilação ocorre sem qualquer processamento de anotações. Então, se deseja processar anotações no código, a caixa de seleção Ativar Processamento de Anotações deve estar selecionada.

Ao selecionar a caixa de seleção, Ativar Processamento de Anotações no Editor, você faz com que o processamento de anotações fique visível no editor. Quaisquer artefatos adicionais que forem gerados por processadores de anotações (classes, métodos, campos, etc.) ficam visíveis no editor IDE e disponíveis para a conclusão de código, no Navegador, Ir para Tipo, Localizar usos e outros.


[start=7]
. Clique em OK na janela Propriedades do Projeto e retorne para o arquivo  ``MyBooks.java`` .

Caso você expanda o nó Bibliotecas na janela Projetos, verá que a  ``lombok.jar``  está agora listada como uma biblioteca do projeto.

image::images/projects-window.png[title="Nó das bibliotecas na janela Projetos"]


== Escrevendo uma Aplicação com a Utilização de Anotações Personalizadas Lombok

1. No arquivo  ``MyBooks.java`` , digite  ``@Data``  antes da declaração de classe  ``MyBooks`` .  ``@Data``  é uma anotação que gera o código padronizado para classes Java: getters para todos os campos, setters para todos os campos não-finais e o  ``toString``  apropriado,  ``equals``  e implementações  ``hashCode``  que envolvem os campos da classe.

Para aprender mais sobre quais anotações são suportadas pelo Projeto Lombok, consulte a link:http://projectlombok.org/features/index.html[+Visão Geral das Funcionalidades+] do Lombok.


[start=2]
. Clique na dica na margem direita do editor e adicione importar para  ``lombok.Data`` .
image::images/import-lombok.png[title="Dica no editor para importar lombok"]

O código resultante no Editor deve ser parecido com o exemplo abaixo.


[source,java]
----

package testann;

import lombok.Data;


@Data
public class MyBooks {

    private int year; //fields
    private String title;
    private String author;

    public MyBooks(int year, String title, String author) {
        this.year = year;
        this.title = title;
        this.author = author;
    }
}
----

Observe que artefatos de código necessários, como getters, setters, toString, etc., têm sido gerados e é possível visualizá-los na janela do Navegador. A anotação  ``@Data``  gera todos os códigos padronizados que são necessários para uma classe típica.

image::images/nav.png[title="Janela do Navegador mostrando os membros do projeto"]

É possível também chamar a janela autocompletar código (Ctrl-Espaço) e ver que os artefatos gerados estão disponíveis para pegá-los. Agora, veremos que o projeto compila e os artefatos gerados podem ser chamados de outras partes do programa.


[start=3]
. Abra o arquivo  ``TestBooks.java``  com o método _main_ e adicione o código a seguir (em negrito) para criar um novo objeto da classe  ``MyBooks`` .

[source,java]
----

package testann;

public class TestBooks {

    public static void main(String[] args) {
        *MyBooks books = new MyBooks(2009, "My Beautiful Dream", "John Smith");*
    }
}
----

[start=4]
. Adicione o seguinte código para imprimir os valores da variável  ``books`` .

Para voltar os valores, chamamos os métodos getter que são autogerados por  ``lombok.jar`` . Enquanto estiver digitando, observe que os artefatos autogerados estão disponíveis da janela autocompletar código.


[source,java]
----

package testann;

public class TestBooks {

    public static void main(String[] args) {
        MyBooks books = new MyBooks(2009, "My Beautiful Dream", "John Smith");
        *System.out.println("Year: " + books.getYear() + ", Title: " + books.getTitle() +  ", Author: " + books.getAuthor());*
    }
}
----

[start=5]
. Salve as alterações.

[start=6]
. Clique com o botão direito do mouse no nó na janela Projetos e selecione Executar (F6).

Ao executar a aplicação, você deverá ver a seguinte saída que mostra que a aplicação foi compilada com êxito.

image::images/output.png[title="Janela de saída após a execução da aplicação"]

Você pode ver que os artefatos gerados pelo processador de anotação Lombok estão acessíveis de outras partes do programa.


== Próxima Etapa

* Documentação Java SE - link:http://download.oracle.com/javase/6/docs/technotes/guides/language/annotations.html[+Anotações+]
* Tutorial Java SE - link:http://download.oracle.com/javase/tutorial/java/javaOO/annotations.html[+Anotações+]
link:/about/contact_form.html?to=3&subject=Feedback:%20Using%20the%20Annotation%20Processors%20Support%20in%20NetBeans%20IDE[+Enviar Feedback neste Tutorial+]
