O Eclipse em termos de mercado ainda é a IDE Java mais usada
Esse foi um dos argumentos para o JBoss Studio ser baseado nele. Não cabe a mim maiores argumentações, até porque ainda uso NetBeans, e para quem pretende extender uma IDE, (in)felizmente o NetBeans ainda é extremamente mais simples.
Perdendo algum tempo tentando fazer as coisas de forma "correta", usando as Interfaces: ICompilationUnit, IType, IJavaModel, IJavaElement e todos os "I's" que você puder imaginar, resolvi usar a famosa POW (Programação Orientada a Workarouds). Workaround é uma forma bonita que foi cirada para camuflar o que conhecemos como : Gambiarra!
No JBoss Studio, para quem desenvolve com o JBoss Seam, quando você gera um Entity, o SeamGen gera uma página JSP com tags JSF para Listagem e Edição, a itenção desta extensão que estou trabalhando nas horas vagas (pouquissimas recentemente), visa atualizar via o DiffEditor do eclipse os campos do formulário e da listagem com base em novos atributos da sua Entity Class. Sendo assim, você irá clicar com o botão direita no Package Explorer e ai você terá a opção "Update JSPs based on this Entity...".
Basicamente este plugin é um PopupAction que trata as invocação do popup sobre um .java da seguinte forma:
Método run:
-
public void run(IAction action) {
-
-
ISelection sel = targetPart.getSite().getSelectionProvider()
-
.getSelection();
-
-
if (sel instanceof IStructuredSelection) {
-
-
IProject project = getProject((IStructuredSelection) sel);
-
if (project != null) {
-
IJavaProject java = JavaCore.create(project);
-
-
try {
-
+ project.getLocationURI().toURL().toString());
-
-
msgBox(this.getClassFileName(project.getLocationURI()
-
.toURL().toString(), project.getName(),
-
fullJavaSourcePath, java.getOutputLocation()
-
.toOSString()));
-
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
} catch (JavaModelException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
-
}
-
}
Método getProject():
-
private IProject getProject(final IStructuredSelection selection) {
-
IProject project = null;
-
-
if ((object != null) && (object instanceof IAdaptable)) {
-
IResource resource = (IResource) ((IAdaptable) object)
-
.getAdapter(IResource.class);
-
-
if (resource != null) {
-
-
fullJavaSourcePath = resource.getFullPath().toOSString();
-
project = resource.getProject();
-
javaSourceSelected = resource.getName();
-
-
}
-
}
-
-
return project;
-
}
E eu confesso que tentei usar vários recursos, entre eles: IType para capturar o IClassFile , para saber qual o .class respectivo daquele respectivo .java...E desisti de tanto NPEs (NullPointerExceptions) que levei na cara, e ai veio o seguinte "gambiarratico", todavia funcional método tabajara:
-
-
.lastIndexOf('/'))
-
+ output;
-
-
javaSource.length());
-
-
return fullOutputFolder
-
+ newSource.substring(newSource.indexOf('/'),
-
newSource.length()).replaceAll(".java", ".class");
-
}
Eu tenho certeza que isso é quase um assassinato ao modelo RCP, JDT do Eclipse, porém, para o que eu precisava, que é a droga do .class, isso funcionou bem mais simples e melhor que as tão belas e "fundamentadas" classes do Eclipse. É por essas e outras, que ainda tenho falta do NetBeans.
Abraços e aproveitando: Feliz 2008
, Saúde! O resto é todo lucro.
Edgar

Entries (RSS)