/******************************************************************************* * Copyright (c) 2010 Eric Bodden. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eric Bodden - initial API and implementation ******************************************************************************/ package de.bodden.tamiflex.views; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.IField; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.ui.ISharedImages; import org.eclipse.jdt.ui.JavaUI; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.PartInitException; import de.bodden.tamiflex.Activator; public class FieldNode extends TreeObject { protected final String fieldName; protected final String className; public FieldNode(String className, String fieldName, String fieldType) { super(fieldType+" "+className.replace('$','.')+"."+fieldName, Kind.FIELD); this.className = className; this.fieldName = fieldName; } @Override public Image getImage() { return JavaUI.getSharedImages().getImage(ISharedImages.IMG_FIELD_PUBLIC); } @Override public void handleDoubleClick() { TreeObject parent = this.parent; while(parent.getParent()!=INVISIBLE_ROOT_NODE) { parent = parent.getParent(); } IProject project = ((TreeParent)parent).getProject(); IJavaProject javaProject = JavaCore.create(project); try { IType type = javaProject.findType(className, (IProgressMonitor) null); if(type==null) { MessageDialog.openError(Activator.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell(), "Class not found", "Unable to find class "+name+" on classpath of project "+project.getName()+"."); } else { IField field = type.getField(fieldName); JavaUI.openInEditor(field); } } catch (JavaModelException e) { e.printStackTrace(); } catch (PartInitException e) { e.printStackTrace(); } } }