package at.bestsolution.efxclipse.tooling.fxml.editors; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; 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.wst.xml.core.internal.provisional.document.IDOMNode; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.ProcessingInstruction; @SuppressWarnings("restriction") public class Util { public static IJavaProject findProject(Document xmlDoc) { String baseLocation = ((IDOMNode) xmlDoc).getModel().getBaseLocation(); IFile f = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(baseLocation)); return JavaCore.create(f.getProject()); } public static List<String> getImportedTypes(Document xmlDoc) { NodeList list = xmlDoc.getChildNodes(); List<String> imports = new ArrayList<String>(); for (int i = 0; i < list.getLength(); i++) { Node n = list.item(i); if (n.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE) { String data = ((ProcessingInstruction) n).getData(); if (data.endsWith("?")) { data = data.substring(0, data.length() - 1); } imports.add(data); } } return imports; } public static IType findType(String name, Document xmlDoc) { IJavaProject jpProject = findProject(xmlDoc); List<String> imports = getImportedTypes(xmlDoc); if( name.contains(".") ) { try { IType t = jpProject.findType(name); if (t != null) { return t; } } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } } for (String i : imports) { if (i.endsWith("." + name)) { try { IType t = jpProject.findType(i); if (t != null) { return t; } } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } for (String i : imports) { if (i.endsWith("*")) { try { IType t = jpProject.findType(i.substring(0, i.length() - 1) + name); if (t != null) { return t; } } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return null; } }