2011-01-12 17 views
15

Bir değişkene sahip bir kod şablonum var ve bu değişkenin değerini büyük harfle yazmak istiyorum (sadece ilk harf) sadece bazı oluşumlarda. Bunu yapmanın bir yolu var mı? aşağıdaki gibiEclipse (Helios) kod şablonlarındaki bir değişkenin ilk harfini büyük harfle yazmanın bir yolu var

şablon kodudur - Benim işlevi adlarında Mülkiyet Adı yararlanmak istiyorum ...

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

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

Lütfen Dikkat: Bu IDE kod şablonları ile kullanım için bir şablon (değil de PHP). Ayrıntılar için bakınız: http://www.ibm.com/developerworks/opensource/tutorials/os-eclipse-code-templates/index.html

cevap

14

Ayrıca bunu istiyorum ve bunu yapmak için özel bir TemplateVariableResolver oluşturmaya çalıştım. (Zaten yeni UUIDs a la http://dev.eclipse.org/blogs/jdtui/2007/12/04/text-templates-2/ üretir yerinde bir özel çözümleyicim var.)

Ben capitalize bağlı özel çözümleyicinizi yaptı:

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> 

Bu şekilde kullanacağım: (Java'da çalışıyorum; göründüğünüzü görmüyorum)

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'ten itibaren sahip olduğum sorun, özel çözümleyicimin property değişken için bir değer belirttikten sonra yeniden çözme şansı elde etmemesidir. Görünüşe göre, Java Geliştirme Araçları (Eclipse JDT), JavaContext içinde MultiVariableGuess (addDependency()) 'a bakın. Ne yazık ki bizim için, bu mekanizma açığa çıkmıyor gibi görünüyor, bu yüzden onu aynı şeyi yapmak için kullanamayız (kopyalayıp yapıştırmadan veya diğer gereksiz işlerden faydalanmadan).

Bu noktada, bir süre daha vazgeçiyorum ve önde gelen küçük harf ve büyük harfli adları iki bağımsız şablon değişkenine ayrı ayrı yazmayı sürdüreceğim.

+0

Bu harika bir cevaptır. Teşekkürler. – Michal

İlgili konular