1 4 package org.hibernate.eclipse.mapper.extractor; 5 6 import org.eclipse.jdt.core.IJavaElement; 7 import org.eclipse.jdt.core.IJavaProject; 8 import org.eclipse.jdt.core.IType; 9 import org.eclipse.jdt.core.JavaModelException; 10 import org.eclipse.jdt.core.eval.IEvaluationContext; 11 import org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposal; 12 import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal; 13 import org.eclipse.jface.text.contentassist.ICompletionProposal; 14 import org.hibernate.eclipse.mapper.extractor.HBMXMLResultCollector.Settings; 15 import org.w3c.dom.Attr ; 16 import org.w3c.dom.Node ; 17 18 class JavaTypeHandler implements HBMInfoHandler { 19 20 23 protected final HBMInfoExtractor extractor; 24 25 28 JavaTypeHandler(HBMInfoExtractor extractor) { 29 this.extractor = extractor; 30 } 31 32 public ICompletionProposal[] attributeCompletionProposals(IJavaProject project, Node node, String attributeName, String start, int offset) { 33 Settings settings = new Settings(); 34 settings.setAcceptClasses(true); 35 settings.setAcceptInterfaces(true); 36 settings.setAcceptPackages(true); 37 settings.setAcceptTypes(true); 38 return handleTypes(project, settings,this.extractor.getPackageName(node), start, offset); 39 } 40 41 protected ICompletionProposal[] handleTypes(IJavaProject javaProject, Settings settings, String packageName, String start, int offset) { 42 43 if (javaProject != null) { 44 IEvaluationContext context = javaProject.newEvaluationContext(); 45 if(packageName!=null) { 46 context.setPackageName(packageName); 47 } 48 49 50 HBMXMLResultCollector rc = new HBMXMLResultCollector(javaProject); 51 rc.setAccepts(settings); 53 try { 54 context.codeComplete(start, start.length(), rc); 58 } catch (JavaModelException jme) { 59 jme.printStackTrace(); 61 } 62 IJavaCompletionProposal[] results = rc.getJavaCompletionProposals(); 63 this.extractor.transpose(start, offset, results); 64 return results; 65 } 66 return new JavaCompletionProposal[0]; 67 } 68 69 public IJavaElement getJavaElement(IJavaProject project, Node currentNode, Attr currentAttrNode) { 70 return getNearestTypeJavaElement(project, currentNode); 71 } 72 73 public IJavaElement getNearestTypeJavaElement(IJavaProject project, Node currentNode) { 74 String nearestType = extractor.getNearestType(currentNode); 75 if(nearestType!=null) { 76 try { 77 IType type = project.findType(nearestType); 78 return type; 79 } catch (JavaModelException e) { 80 } 82 } 83 return null; 84 } 85 86 } | Popular Tags |