Copyright (c) 2006, 2019 IBM Corporation and others.
This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
Contributors:
IBM Corporation - initial API and implementation
Sebastian Davids: sdavids@gmx.de - see bug 25376
Microsoft Corporation - moved template related code to jdt.core.manipulation - https://bugs.eclipse.org/549989
/*******************************************************************************
* Copyright (c) 2006, 2019 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Sebastian Davids: sdavids@gmx.de - see bug 25376
* Microsoft Corporation - moved template related code to jdt.core.manipulation - https://bugs.eclipse.org/549989
*******************************************************************************/
package org.eclipse.jdt.internal.corext.template.java;
import java.util.ArrayList;
import java.util.Arrays;
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.jdt.internal.ui.text.template.contentassist.MultiVariable;
Resolves template variables to non-conflicting names that adhere to the naming conventions and
match the parameter (fully qualified name).
Since: 3.3
/**
* Resolves template variables to non-conflicting names that adhere to the naming conventions and
* match the parameter (fully qualified name).
*
* @since 3.3
*/
public class NameResolver extends TemplateVariableResolver {
private final String fDefaultType;
Default ctor for instantiation by the extension point.
/**
* Default ctor for instantiation by the extension point.
*/
public NameResolver() {
this("java.lang.Object"); //$NON-NLS-1$
}
NameResolver(String defaultType) {
fDefaultType= defaultType;
}
/*
* @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
*/
@Override
public void resolve(TemplateVariable variable, TemplateContext context) {
List<String> params= variable.getVariableType().getParams();
String param;
if (params.size() == 0)
param= fDefaultType;
else
param= params.get(0);
IJavaContext jc= (IJavaContext) context;
TemplateVariable ref= jc.getTemplateVariable(param);
MultiVariable mv= (MultiVariable) variable;
if (ref instanceof MultiVariable) {
// reference is another variable
MultiVariable refVar= (MultiVariable) ref;
jc.addDependency(refVar, mv);
refVar.getAllChoices();
Object[] types= flatten(refVar.getAllChoices());
for (int i= 0; i < types.length; i++) {
String[] names= jc.suggestVariableNames(mv.toString(types[i]));
mv.setChoices(types[i], names);
}
mv.setKey(refVar.getCurrentChoice());
jc.markAsUsed(mv.getDefaultValue());
} else {
// reference is a Java type name
jc.addImport(param);
String[] names= jc.suggestVariableNames(param);
mv.setChoices(names);
jc.markAsUsed(names[0]);
}
}
private Object[] flatten(Object[][] allValues) {
List<Object> flattened= new ArrayList<>(allValues.length);
for (int i= 0; i < allValues.length; i++) {
flattened.addAll(Arrays.asList(allValues[i]));
}
return flattened.toArray(new Object[flattened.size()]);
}
}