package org.eclipse.jdt.postfixcompletion.resolver; import java.util.List; import org.eclipse.jdt.internal.corext.template.java.JavaContext; import org.eclipse.jdt.internal.corext.template.java.JavaVariable; import org.eclipse.jdt.internal.corext.template.java.TypeResolver; import org.eclipse.jdt.internal.ui.text.template.contentassist.MultiVariable; import org.eclipse.jdt.postfixcompletion.core.JavaStatementPostfixContext; import org.eclipse.jface.text.templates.TemplateContext; import org.eclipse.jface.text.templates.TemplateVariable; /** * This class is an extension to the existing {@link TypeResolver} and allows the given parameter * to be another variable, i.e. <code>${n:newType(another_variable)}</code>. */ @SuppressWarnings("restriction") public class VariableTypeResolver extends TypeResolver { @Override public void resolve(TemplateVariable variable, TemplateContext context) { List<String> params= variable.getVariableType().getParams(); if (params.size() != 0 && context instanceof JavaContext) { String param = params.get(0); JavaStatementPostfixContext jc = (JavaStatementPostfixContext) context; TemplateVariable ref = jc.getTemplateVariable(param); MultiVariable mv= (MultiVariable) variable; if (ref instanceof JavaVariable) { // Reference is another variable JavaVariable refVar= (JavaVariable) ref; jc.addDependency(refVar, mv); param = refVar.getParamType(); if (param != null && "".equals(param) == false) { String reference= jc.addImportGenericClass(param); mv.setValue(reference); mv.setUnambiguous(true); mv.setResolved(true); return; } } } super.resolve(variable, context); } }