Есть ли способ прописать первую букву значения переменной в шаблонах кода Eclipse (Helios) - PullRequest
16 голосов
/ 12 января 2011

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

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

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 Ответ

15 голосов
/ 17 января 2011

Я тоже хочу это и попытался создать пользовательский TemplateVariableResolver, чтобы сделать это. (У меня уже есть один пользовательский преобразователь, который генерирует новые UUID в стиле 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()). К сожалению, для нас этот механизм, похоже, не раскрывается, поэтому я / мы не можем использовать его для того же (без большого количества операций копирования и вставки или другой избыточной работы).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...