Extract constant

Hi guys,

I'm a newbie with IntelliJ Platform Plugin and I have a noob question.

I want to write a plugin for Java that has the same action as Extract Constant (Refactor > Extract > Constant...), but I don't know how to write it.

Could someone please give me that code block or show me how to implement it.

Thanks and Best Regards,

PS: this way is how I'm trying.

 

private final PsiClass mClass;
private final List<PsiField> mFields;

public CodeGenerator(PsiClass psiClass, List<PsiField> fields) {
    mClass = psiClass;
    mFields = fields;
}

public void generate() {
    PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(mClass.getProject());

    List<PsiField> fields = new ArrayList<>();

    for (PsiField field : mFields) {
        PsiField schemaField = elementFactory.createField(generateSchema(field), PsiType.CHAR);
        fields.add(schemaField);
    }

    JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(mClass.getProject());

    for (PsiField field : fields) {
        styleManager.shortenClassReferences(mClass.add(field));
    }
}

private static String generateSchema(PsiField field) {
    StringBuilder sb = new StringBuilder("public static final ");
    sb.append(field.getType().getPresentableText());
    sb.append(" ");
    String fieldName = field.getName();
    StringBuilder nameBuilder = new StringBuilder();
    for (int i = 0; i < fieldName.length(); i++) {
        char currentChar = fieldName.charAt(i);
        if (Character.isUpperCase(currentChar)) {
            nameBuilder.append("_");
        }
        nameBuilder.append(Character.toUpperCase(currentChar));
    }
    sb.append(nameBuilder.toString());
    sb.append(" = \"");
    sb.append(fieldName);
    sb.append(" \"");

    return sb.toString();
}
0

请先登录再写评论。