2011-01-12 14 views
15

Mam szablon kodu ze zmienną i chciałbym, aby wartość tej zmiennej była wielką (tylko pierwsza litera) tylko w niektórych wystąpieniach. Czy jest jakiś sposób na zrobienie tego?Czy istnieje sposób na wielką literę pierwszej wartości zmiennej w szablonach kodu Eclipse (Helios)?

kod szablonu jest następujący - Chciałbym wykorzystać Nazwa obiektu w moich nazw funkcji ...

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

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

Uwaga: To jest szablon do użytku z szablonów kodu w IDE (nie w PHP). Aby uzyskać szczegółowe informacje, zobacz: http://www.ibm.com/developerworks/opensource/tutorials/os-eclipse-code-templates/index.html

Odpowiedz

14

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.

+0

To jest świetna odpowiedź. Dzięki. – Michal

Powiązane problemy