<html><body><p><font size="+1"><strong>Package org.eclipse.wst.xsl.ui.internal.contentassist</strong></font></p><hr><h2><font size="-1"><strong>org.eclipse.wst.xsl.ui.internal.contentassist</strong></font><br>
               Class CallTemplateContentAssistRequest</h2><br><hr><pre>public class <strong>CallTemplateContentAssistRequest</strong>
extends org.eclipse.wst.xsl.ui.provisional.contentassist.AbstractXSLContentAssistRequest</pre>CallTemplateContentAssistance provides content assist proposals for
 <xsl:call-with> templates.   It will provide a list of all available
 named templates.<p></p><hr><table width="100%" border="1"><tr bgcolor="#CCCCFF"><td width="100%"><h2>Constructor Summary</h2></td></tr><tr><td><code><strong><a href="#con_CallTemplateContentAssistRequest">CallTemplateContentAssistRequest</a></strong>(org.w3c.dom.Node node
         ,
      IStructuredDocumentRegion documentRegion
         ,
      ITextRegion completionRegion
         ,
      int begin
         ,
      int length
         ,
      java.lang.String filter
         ,
      ITextViewer textViewer)</code></td></tr></table><br><table width="100%" border="1"><tr cols="2" bgcolor="#CCCCFF"><td colspan="2" width="100%"><h2>Method Summary</h2></td></tr><tr valign="top"><td width="20%" align="right"><code>protected java.lang.String</code></td><td width="" align="left"><code><a href="#method_getAdditionalInfo">getAdditionalInfo</a>(org.eclipse.wst.xsl.core.model.Template template)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               </td></tr><tr valign="top"><td width="20%" align="right"><code>public java.util.ArrayList</code></td><td width="" align="left"><code><a href="#method_getCompletionProposals">getCompletionProposals</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               (non-Javadoc)</td></tr></table><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Constructor Detail
               </h2></td></tr></table><h2><a name="con_CallTemplateContentAssistRequest">CallTemplateContentAssistRequest</a></h2><p><code>public <strong>CallTemplateContentAssistRequest</strong>(org.w3c.dom.Node node
         ,
      IStructuredDocumentRegion documentRegion
         ,
      ITextRegion completionRegion
         ,
      int begin
         ,
      int length
         ,
      java.lang.String filter
         ,
      ITextViewer textViewer)</code></p><p></p><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Methods Detail
               </h2></td></tr></table><h2><a name="method_getAdditionalInfo">getAdditionalInfo</a></h2><p><code>protected java.lang.String <strong>getAdditionalInfo</strong>(org.eclipse.wst.xsl.core.model.Template template)</code></p><p></p><h3>Parameters</h3><p><code>template</code></p><h3>Returns</h3><p><code>java.lang.String</code></p><hr><h2><a name="method_getCompletionProposals">getCompletionProposals</a></h2><p><code>public java.util.ArrayList <strong>getCompletionProposals</strong>()</code></p><p>(non-Javadoc)</p><h3>Returns</h3><p><code>java.util.ArrayList</code></p><hr></body></html>