package org.objectstyle.wolips.templateeditor; import java.util.HashSet; import java.util.Set; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaModelException; import org.objectstyle.wolips.bindings.api.ApiCache; import org.objectstyle.wolips.bindings.utils.BindingReflectionUtils; import org.objectstyle.wolips.bindings.wod.TagShortcut; import org.objectstyle.wolips.bindings.wod.TypeCache; import org.objectstyle.wolips.wodclipse.core.completion.WodCompletionProposal; import org.objectstyle.wolips.wodclipse.core.completion.WodCompletionUtils; import tk.eclipse.plugin.htmleditor.assist.AttributeInfo; import tk.eclipse.plugin.htmleditor.assist.TagInfo; public class InlineWodTagInfo extends TagInfo { private String _elementTypeName; private TagShortcut _tagShortcut; private IJavaProject _javaProject; private boolean _attributeInfoCached; private TypeCache _cache; public InlineWodTagInfo(String elementPrefix, String elementTypeName, TypeCache cache) { super(elementPrefix + elementTypeName, true, true); // "wo:" or "tb:" setRequiresAttributes(true); _cache = cache; _elementTypeName = elementTypeName; _tagShortcut = ApiCache.getTagShortcutNamed(elementTypeName); } public void setJavaProject(IJavaProject javaProject) { _javaProject = javaProject; } public IJavaProject getJavaProject() { return _javaProject; } public IType getElementType() { IType elementType = null; try { elementType = BindingReflectionUtils.findElementType(_javaProject, getExpandedElementTypeName(), false, _cache); } catch (JavaModelException e) { // ignore; } return elementType; } public String getElementTypeName() { return _elementTypeName; } public String getExpandedElementTypeName() { String elementTypeName = _elementTypeName; if (_tagShortcut != null) { elementTypeName = _tagShortcut.getActual(); } return elementTypeName; } protected void loadAttributeInfo() { if (!_attributeInfoCached) { IType elementType; try { elementType = BindingReflectionUtils.findElementType(_javaProject, getExpandedElementTypeName(), false, _cache); if (elementType != null) { Set<WodCompletionProposal> proposals = new HashSet<WodCompletionProposal>(); WodCompletionUtils.fillInBindingNameCompletionProposals(_javaProject, elementType, "", 0, 0, proposals, false, _cache); for (WodCompletionProposal proposal : proposals) { AttributeInfo attrInfo = new AttributeInfo(proposal.getProposal(), true); addAttributeInfo(attrInfo); } } _attributeInfoCached = true; } catch (JavaModelException e) { e.printStackTrace(); } } } @Override public AttributeInfo[] getAttributeInfo() { loadAttributeInfo(); return super.getAttributeInfo(); } @Override public AttributeInfo getAttributeInfo(String name) { loadAttributeInfo(); return super.getAttributeInfo(name); } }