类com.intellij.psi.util.PropertyUtil源码实例Demo

下面列出了怎么用com.intellij.psi.util.PropertyUtil的API类实例代码及写法,或者点击链接到github查看源代码。

protected void generateGettersForAccessedFields() {
    Set<PsiField> accessedFields = new LinkedHashSet<>();
    accessedFields.addAll(typeCheckElimination.getAccessedFields());
    accessedFields.addAll(typeCheckElimination.getSuperAccessedFields());
    for (PsiField fragment : accessedFields) {
        if (!fragment.getModifierList().hasModifierProperty(PsiModifier.STATIC)) {
            PsiMethod getterMethodBinding = null;
            if (typeCheckElimination.getSuperAccessedFields().contains(fragment)) {
                for (PsiField fieldBinding : typeCheckElimination.getSuperAccessedFieldBindings()) {
                    if (fieldBinding.equals(fragment)) {
                        getterMethodBinding = typeCheckElimination.getGetterMethodBindingOfSuperAccessedField(fieldBinding);
                        break;
                    }
                }
            } else {
                getterMethodBinding = findGetterMethodInContext(fragment);
            }
            if (getterMethodBinding == null) {
                PsiMethod getter = PropertyUtil.generateGetterPrototype(fragment);
                fragment.getContainingClass().add(getter);
            }
        }
    }
}
 
protected void generateSettersForAssignedFields() {
    Set<PsiField> assignedFields = new LinkedHashSet<>();
    assignedFields.addAll(typeCheckElimination.getAssignedFields());
    assignedFields.addAll(typeCheckElimination.getSuperAssignedFields());
    for (PsiField fragment : assignedFields) {
        PsiMethod setterMethodBinding = null;
        if (typeCheckElimination.getSuperAssignedFields().contains(fragment)) {
            for (PsiField fieldBinding : typeCheckElimination.getSuperAssignedFieldBindings()) {
                if (fieldBinding.equals(fragment)) {
                    setterMethodBinding = typeCheckElimination.getSetterMethodBindingOfSuperAssignedField(fieldBinding);
                    break;
                }
            }
        } else {
            setterMethodBinding = findSetterMethodInContext(fragment);
        }
        if (setterMethodBinding == null) {
            PsiMethod setter = PropertyUtil.generateSetterPrototype(fragment);
            fragment.getContainingClass().add(setter);
        }
    }
}
 
@Override
protected void process(List<ClassMember> classMembers) {
  for (ClassMember classMember : classMembers) {
    final PsiElementClassMember elementClassMember = (PsiElementClassMember) classMember;

    PsiField psiField = (PsiField) elementClassMember.getPsiElement();
    PsiMethod psiMethod = PropertyUtil.findPropertySetter(psiField.getContainingClass(), psiField.getName(), false, false);
    if (null != psiMethod) {
      PsiModifierList modifierList = psiField.getModifierList();
      if (null != modifierList) {
        PsiAnnotation psiAnnotation = modifierList.addAnnotation(Setter.class.getName());

        psiMethod.delete();
      }
    }
  }
}
 
@Override
  protected void process(List<ClassMember> classMembers) {
    for (ClassMember classMember : classMembers) {
      final PsiElementClassMember elementClassMember = (PsiElementClassMember) classMember;

      PsiField psiField = (PsiField) elementClassMember.getPsiElement();
      PsiMethod psiMethod = PropertyUtil.findPropertyGetter(psiField.getContainingClass(), psiField.getName(), false, false);

      if (null != psiMethod) {
        PsiModifierList modifierList = psiField.getModifierList();
        if (null != modifierList) {
          PsiAnnotation psiAnnotation = modifierList.addAnnotation(Getter.class.getName());
//          psiAnnotation.setDeclaredAttributeValue("value", )

          psiMethod.delete();
        }
      }
    }
  }
 
源代码5 项目: intellij-spring-assistant   文件: PsiCustomUtil.java
@Nullable
private static PsiMethod findInstancePropertySetter(@NotNull PsiClass psiClass,
    @Nullable String propertyName) {
  if (StringUtil.isEmpty(propertyName))
    return null;
  final String suggestedSetterName = PropertyUtil.suggestSetterName(propertyName);
  final PsiMethod[] setters = psiClass.findMethodsByName(suggestedSetterName, true);
  for (PsiMethod setter : setters) {
    if (setter.hasModifierProperty(PUBLIC) && !setter.hasModifierProperty(STATIC)
        && isSimplePropertySetter(setter)) {
      return setter;
    }
  }
  return null;
}
 
@Override
protected List<EncapsulatableClassMember> getEncapsulatableClassMembers(PsiClass psiClass) {
  final List<EncapsulatableClassMember> result = new ArrayList<>();
  for (PsiField field : psiClass.getFields()) {
    if (null != PropertyUtil.findPropertySetter(psiClass, field.getName(), false, false)) {
      result.add(new PsiFieldMember(field));
    }
  }
  return result;
}
 
protected void processClass(@NotNull PsiClass psiClass) {
  final Map<PsiField, PsiMethod> fieldMethodMap = new HashMap<>();
  for (PsiField psiField : psiClass.getFields()) {
    PsiMethod propertyGetter = PropertyUtil.findPropertyGetter(psiClass, psiField.getName(), psiField.hasModifierProperty(PsiModifier.STATIC), false);

    if (null != propertyGetter) {
      fieldMethodMap.put(psiField, propertyGetter);
    }
  }

  processIntern(fieldMethodMap, psiClass, Getter.class);
}
 
@Override
protected void processClass(@NotNull PsiClass psiClass) {
  final Map<PsiField, PsiMethod> fieldMethodMap = new HashMap<>();
  for (PsiField psiField : psiClass.getFields()) {
    PsiMethod propertySetter = PropertyUtil.findPropertySetter(psiClass, psiField.getName(), psiField.hasModifierProperty(PsiModifier.STATIC), false);

    if (null != propertySetter) {
      fieldMethodMap.put(psiField, propertySetter);
    }
  }

  processIntern(fieldMethodMap, psiClass, Setter.class);
}
 
@Override
protected List<EncapsulatableClassMember> getEncapsulatableClassMembers(PsiClass psiClass) {
  final List<EncapsulatableClassMember> result = new ArrayList<>();
  for (PsiField field : psiClass.getFields()) {
    if (null != PropertyUtil.findPropertyGetter(psiClass, field.getName(), false, false)) {
      result.add(new PsiFieldMember(field));
    }
  }
  return result;
}
 
源代码10 项目: innerbuilder   文件: InnerBuilderGenerator.java
private PsiMethod generateConstructor(final PsiClass targetClass, final PsiType builderType) {
    final PsiMethod constructor = psiElementFactory.createConstructor(targetClass.getName());
    constructor.getModifierList().setModifierProperty(PsiModifier.PRIVATE, true);

    final PsiParameter builderParameter = psiElementFactory.createParameter("builder", builderType);
    constructor.getParameterList().add(builderParameter);

    final PsiCodeBlock constructorBody = constructor.getBody();
    if (constructorBody != null) {
        for (final PsiFieldMember member : selectedFields) {
            final PsiField field = member.getElement();

            final PsiMethod setterPrototype = PropertyUtil.generateSetterPrototype(field);
            final PsiMethod setter = targetClass.findMethodBySignature(setterPrototype, true);

            final String fieldName = field.getName();
            boolean isFinal = false;
            final PsiModifierList modifierList = field.getModifierList();
            if (modifierList != null) {
                isFinal = modifierList.hasModifierProperty(PsiModifier.FINAL);
            }

            final String assignText;
            if (setter == null || isFinal) {
                assignText = String.format("%1$s = builder.%1$s;", fieldName);
            } else {
                assignText = String.format("%s(builder.%s);", setter.getName(), fieldName);
            }

            final PsiStatement assignStatement = psiElementFactory.createStatementFromText(assignText, null);
            constructorBody.add(assignStatement);
        }
    }

    return constructor;
}
 
 类所在包
 同包方法