2011-01-12 9 views
15

zu schreiben Ich habe eine Code-Vorlage mit einer Variablen und ich möchte (nur den ersten Buchstaben) den Wert dieser Variablen groß schreiben nur in einigen Fällen. Gibt es eine Möglichkeit, dies zu tun?Gibt es eine Möglichkeit, den ersten Buchstaben eines Wertes einer Variablen in Eclipse (Helios) Code-Vorlagen

Der Template-Code ist wie folgt - Ich mag Namen in meiner Funktion Namen nutzen ...

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

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

Bitte beachten Sie: Dies ist eine Vorlage für die Verwendung mit Code-Vorlagen in der IDE (nicht in PHP). Für Details siehe: http://www.ibm.com/developerworks/opensource/tutorials/os-eclipse-code-templates/index.html

Antwort

14

Ich möchte auch dies und versuchte, eine benutzerdefinierte TemplateVariableResolver zu erstellen, um es zu tun. (Ich habe bereits ein benutzerdefiniertes Resolver in Ort, die neuen UUIDs a la http://dev.eclipse.org/blogs/jdtui/2007/12/04/text-templates-2/ erzeugt.)

I einen benutzerdefinierten Resolver gemacht gebunden 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> 

, die ich so verwenden würde: (I in Java arbeite, ich sehe, dass Sie nicht zu sein scheinen)

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

Ab Eclipse 3.5 ist das Problem, dass mein benutzerdefinierter Resolver keine Chance hat, erneut aufzulösen, sobald ich einen Wert für die Variable property angegeben habe. Es scheint, dass die Java-Entwicklungstools (Eclipse JDT) diese abhängige Template-Variablen-Neuauflösung über einen Mechanismus namens MultiVariableGuess innerhalb der JavaContext (siehe addDependency()) durchführen. Leider scheint dieser Mechanismus nicht offen gelegt zu werden, so dass ich/wir ihn nicht benutzen können (ohne viel Kopieren und Einfügen oder andere überflüssige Arbeit).

An diesem Punkt gebe ich wieder für eine Weile auf und tippe die Groß- und Kleinbuchstaben weiterhin getrennt in zwei unabhängige Template-Variablen ein.

+0

Dies ist eine großartige Antwort. Vielen Dank. – Michal

Verwandte Themen