Есть ли способ заглавной буквы первой буквы значения переменной в шаблонах кода Eclipse (Helios)

У меня есть шаблон кода с переменной, и я хотел бы использовать (только первую букву) значение этой переменной только в некоторых случаях. Есть ли способ сделать это?

Код шаблона выглядит следующим образом: я хотел бы использовать имя свойства в именах моих функций...

private $$${PropertyName};
${cursor}    
public function get${PropertyName}() 
{
  return $$this->${PropertyName};
}

public function set${PropertyName}($$value) 
{
  $$this->${PropertyName} = $$value;
}

Обратите внимание: это шаблон для использования с шаблонами кода в среде IDE (не в PHP). Подробнее см.: http://www.ibm.com/developerworks/opensource/tutorials/os-eclipse-code-templates/index.html

Ответы

Ответ 1

Я также хочу это и попытался создать пользовательский TemplateVariableResolver, чтобы сделать это. (У меня уже есть один настраиваемый резольвер, который генерирует новые UUID a la http://dev.eclipse.org/blogs/jdtui/2007/12/04/text-templates-2/.)

Я создал собственный преобразователь, связанный с 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>

который я бы использовал следующим образом: (Я работаю на Java, я вижу, что вы не являетесь)

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});
}

Как и в Eclipse 3.5, проблема, с которой я столкнулась, заключается в том, что мой пользовательский резольвер не получил возможности повторно решить, как только я указал значение для переменной property. Похоже, что Java Development Tools (Eclipse JDT) выполняет это зависимое изменение переменной шаблона с помощью механизма под названием MultiVariableGuess внутри JavaContext (см. addDependency()). К сожалению, для нас этот механизм, похоже, не подвергается воздействию, поэтому мы/не можем использовать его для этого (без большого количества копий и вставки или другой избыточной работы).

В этот момент я отказываюсь на некоторое время и буду набирать имена ведущих и нижних и верхних букв отдельно на две независимые переменные шаблона.