Też chcę tego i próbowałem zbudować niestandardowy TemplateVariableResolver
, aby to zrobić. (Mam już jeden niestandardowy rozpoznawania nazw w miejscu, które generuje nowe UUID a la http://dev.eclipse.org/blogs/jdtui/2007/12/04/text-templates-2/.)
zrobiłem niestandardową resolverowi związany capitalize
:
public class CapitalizingVariableResolver extends TemplateVariableResolver {
@Override
public void resolve(TemplateVariable variable, TemplateContext context) {
@SuppressWarnings("unchecked")
final List<String> params = variable.getVariableType().getParams();
if (params.isEmpty())
return;
final String currentValue = context.getVariable(params.get(0));
if (currentValue == null || currentValue.length() == 0)
return;
variable.setValue(currentValue.substring(0, 1).toUpperCase() + currentValue.substring(1));
}
}
(plugin.xml :)
<extension point="org.eclipse.ui.editors.templates">
<resolver
class="com.foo.CapitalizingVariableResolver"
contextTypeId="java"
description="Resolves to the value of the variable named by the first argument, but with its first letter capitalized."
name="capitalized"
type="capitalize">
</resolver>
</extension>
, którego użyłbym tak: (Pracuję w Javie, widzę, że nie wydaje się być)
public PropertyAccessor<${propertyType}> ${property:field}() {
return ${property};
}
public ${propertyType} get${capitalizedProperty:capitalize(property)}() {
return ${property}.get();
}
public void set${capitalizedProperty}(${propertyType} ${property}) {
this.${property}.set(${property});
}
Od wersji Eclipse 3.5 problem polega na tym, że mój niestandardowy przelicznik nie ma szansy na ponowne rozstrzygnięcie, gdy określę wartość dla zmiennej property
. Wygląda na to, że Java Development Tools (Eclipse JDT) wykonują tę zależną zmienną zmienną szablonu za pomocą mechanizmu o nazwie MultiVariableGuess
w ramach(patrz addDependency()
). Na nieszczęście dla nas ten mechanizm nie wydaje się być odsłonięty, więc ja/my nie możemy go użyć do zrobienia tego samego (bez dużej ilości kopiowania i wklejania lub innej pracy nadmiarowej).
W tym momencie poddaję się na chwilę i będę nadal wpisywać nazwy wielkich i małych liter i wielkich liter oddzielnie w dwóch niezależnych zmiennych szablonu.
To jest świetna odpowiedź. Dzięki. – Michal