/*******************************************************************************
* Copyright (c) 2006, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.jsdt.internal.corext.template.java;
import java.util.List;
import org.eclipse.jface.text.templates.TemplateContext;
import org.eclipse.jface.text.templates.TemplateVariable;
import org.eclipse.jface.text.templates.TemplateVariableResolver;
import org.eclipse.wst.jsdt.internal.corext.template.java.CompilationUnitCompletion.Variable;
/**
* Resolves a template variable to a field that is assignment-compatible
* with the variable instance' class parameter.
*
*
*/
public class FieldResolver extends TemplateVariableResolver {
private final String fDefaultType;
private String fType;
/**
* Default constructor for instantiation by the extension point.
*/
public FieldResolver() {
this("java.lang.Object"); //$NON-NLS-1$
}
FieldResolver(String defaultType) {
fDefaultType= defaultType;
}
/*
* @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
*/
public void resolve(TemplateVariable variable, TemplateContext context) {
List params= variable.getVariableType().getParams();
if (params.size() == 0)
fType= fDefaultType;
else
fType= (String) params.get(0);
if (variable instanceof JavaVariable) {
JavaContext jc= (JavaContext) context;
JavaVariable jv= (JavaVariable) variable;
jv.setParamType(fType);
Variable[] fields= jc.getFields(fType);
if (fields.length > 0) {
jv.setChoices(fields);
jc.markAsUsed(jv.getDefaultValue());
} else {
super.resolve(variable, context);
return;
}
if (fields.length > 1)
variable.setUnambiguous(false);
else
variable.setUnambiguous(isUnambiguous(context));
} else
super.resolve(variable, context);
}
/*
* @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolveAll(org.eclipse.jface.text.templates.TemplateContext)
*/
protected String[] resolveAll(TemplateContext context) {
JavaContext jc= (JavaContext) context;
Variable[] iterables= jc.getFields(fType);
String[] names= new String[iterables.length];
for (int i= 0; i < iterables.length; i++)
names[i]= iterables[i].getName();
if (names.length > 0)
jc.markAsUsed(names[0]);
return names;
}
}