Dúvida em Javac

5 respostas
L

Olá pessoal!!!

Procurei no forum e não achei…

Gostaria de saber qual opção que se deve colocar no javac para que
ele me indique quais 'import’s não estão sendo utilizados no meu fonte.

Pergunto isso por que sei que o eclipse mostra isso, porém
não estou utilizando ele aqui…

Abraço a todos…

5 Respostas

pcalcado

-classpath

Shoes

L

Acho que não me expressei bem…

Vamos supor o seguinte código:

import java.util.Vector;

public class Principal{
      public static void main(String args[]){
          System.out.println(" Olá GUJ!!!!!!!");
      }
}

O código acima não está utilizando a classe Vector…
gostaria de saber como colocar tal opção no javac
para que ele indique este fato… (o eclipse sublinha de amarelo
mas não estou utilizando ele aqui).

cv1

O Javac nao tem essa opcao. Tente o Jikes :wink:

Mauricio_Linhares

leonardodaniel:
Acho que não me expressei bem…

Vamos supor o seguinte código:

import java.util.Vector;

public class Principal{
      public static void main(String args[]){
          System.out.println(" Olá GUJ!!!!!!!");
      }
}

O código acima não está utilizando a classe Vector…
gostaria de saber como colocar tal opção no javac
para que ele indique este fato… (o eclipse sublinha de amarelo
mas não estou utilizando ele aqui).

Se você não está utilizando, o Javac provavelmente não vai colocar isso no bytecode. Vai fazer alguma diferença pra você?

T

Se você não quer usar o Eclipse e a famosa combinação de teclas Ctrl+Shift+O (que ordena os seus imports e limpa os imports desnecessários) você pode ir pelo método “braçal”.

Esse método consiste no seguinte:

  • Descompile sua classe com javap.
  • Use um script Perl, ou AWK, ou a sua linguagem de processamento de scripts preferida (sed? ) e separe os nomes das classes.
  • Remova os nomes repetidos. (O programa “uniq” do Unix faz isso)
  • A seguir, remova todas as classes java.lang.* (mas não java.lang.ref.* e outras classes que necessitam importação).
    Isso parece complicado, mas não é nada que um cara que conheça Perl, awk, ou sed + uniq, não consiga fazer.

Por exemplo, se você conseguir extrair os seguintes nomes de classes da listagem obtida com javap -c GetProperty…

EDIT - Agora estou vendo que certas coisas foram “importadas implicitamente” pelo compilador, como tudo que é java.io.*. Portanto o problema é mais complicado que parece. Deixe as coisas para o Eclipse…

A classe original é:

import java.util.*;

class GetProperty {
    public static void main(String[] args) {
        System.out.println ("<html><body><table border='1'>");

        for (Map.Entry<String,String> en : new TreeMap<String,String>(System.getenv()).entrySet()) {
            String key = en.getKey();
            String value = en.getValue();
            System.out.println ("<tr><td>" 
            + key + "</td><td>"
            + value + "</td></tr>");
        }

        System.out.println ("</table></body></html>");
    }
}
Compiled from "GetProperty.java"
class GetProperty extends java.lang.Object{
GetProperty();
  Code:
   0:	aload_0
   1:	invokespecial	#1; //Method java/lang/Object."<init>":()V
   4:	return

public static void main(java.lang.String[]);
  Code:
   0:	getstatic	#2; //Field java/lang/System.out:Ljava/io/PrintStream;
   3:	ldc	#3; //String <html><body><table border='1'>
   5:	invokevirtual	#4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   8:	new	#5; //class TreeMap
   11:	dup
   12:	invokestatic	#6; //Method java/lang/System.getenv:()Ljava/util/Map;
   15:	invokespecial	#7; //Method java/util/TreeMap."<init>":(Ljava/util/Map;)V
   18:	invokevirtual	#8; //Method java/util/TreeMap.entrySet:()Ljava/util/Set;
   21:	invokeinterface	#9,  1; //InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
   26:	astore_1
   27:	aload_1
   28:	invokeinterface	#10,  1; //InterfaceMethod java/util/Iterator.hasNext:()Z
   33:	ifeq	110
   36:	aload_1
   37:	invokeinterface	#11,  1; //InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
   42:	checkcast	#12; //class Map$Entry
   45:	astore_2
   46:	aload_2
   47:	invokeinterface	#13,  1; //InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
   52:	checkcast	#14; //class String
   55:	astore_3
   56:	aload_2
   57:	invokeinterface	#15,  1; //InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
   62:	checkcast	#14; //class String
   65:	astore	4
   67:	getstatic	#2; //Field java/lang/System.out:Ljava/io/PrintStream;
   70:	new	#16; //class StringBuilder
   73:	dup
   74:	invokespecial	#17; //Method java/lang/StringBuilder."<init>":()V
   77:	ldc	#18; //String <tr><td>
   79:	invokevirtual	#19; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   82:	aload_3
   83:	invokevirtual	#19; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   86:	ldc	#20; //String </td><td>
   88:	invokevirtual	#19; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   91:	aload	4
   93:	invokevirtual	#19; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   96:	ldc	#21; //String </td></tr>
   98:	invokevirtual	#19; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   101:	invokevirtual	#22; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
   104:	invokevirtual	#4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   107:	goto	27
   110:	getstatic	#2; //Field java/lang/System.out:Ljava/io/PrintStream;
   113:	ldc	#23; //String </table></body></html>
   115:	invokevirtual	#4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   118:	return

}
Criado 23 de junho de 2005
Ultima resposta 23 de jun. de 2005
Respostas 5
Participantes 5