Java 类com.intellij.psi.util.PropertyUtil 实例源码
项目:intellij-spring-assistant
文件:PsiUtil.java
@Nullable
public static PsiType getWritablePropertyType(@Nullable PsiClass containingClass,
@Nullable PsiElement declaration) {
if (declaration instanceof PsiField) {
return getWrappedPropertyType((PsiField) declaration, JavaFxCommonNames.ourWritableMap);
}
if (declaration instanceof PsiMethod) {
final PsiMethod method = (PsiMethod) declaration;
if (method.getParameterList().getParametersCount() != 0) {
return getSetterArgumentType(method);
}
final String propertyName = PropertyUtil.getPropertyName(method);
final PsiClass psiClass =
containingClass != null ? containingClass : method.getContainingClass();
if (propertyName != null && containingClass != null) {
final PsiMethod setter = findInstancePropertySetter(psiClass, propertyName);
if (setter != null) {
final PsiType setterArgumentType = getSetterArgumentType(setter);
if (setterArgumentType != null)
return setterArgumentType;
}
}
return getGetterReturnType(method);
}
return null;
}
项目:intellij-ce-playground
文件:JavaReadWriteAccessDetector.java
@Override
public Access getExpressionAccess(final PsiElement expression) {
if (!(expression instanceof PsiExpression)) return Access.Read;
PsiExpression expr = (PsiExpression) expression;
boolean readAccess = PsiUtil.isAccessedForReading(expr);
boolean writeAccess = PsiUtil.isAccessedForWriting(expr);
if (!writeAccess && expr instanceof PsiReferenceExpression) {
//when searching usages of fields, should show all found setters as a "only write usage"
PsiElement actualReferee = ((PsiReferenceExpression) expr).resolve();
if (actualReferee instanceof PsiMethod && PropertyUtil.isSimplePropertySetter((PsiMethod)actualReferee)) {
writeAccess = true;
readAccess = false;
}
}
if (writeAccess && readAccess) return Access.ReadWrite;
return writeAccess ? Access.Write : Access.Read;
}
项目:intellij-ce-playground
文件:AbstractMemberResolveConverter.java
public PsiMember fromString(final String s, final ConvertContext context) {
if (s == null) return null;
final PsiClass psiClass = getTargetClass(context);
if (psiClass == null) return null;
for (PropertyMemberType type : getMemberTypes(context)) {
switch (type) {
case FIELD:
final PsiField field = psiClass.findFieldByName(s, isLookDeep());
if (field != null) return field;
break;
case GETTER:
final PsiMethod getter = PropertyUtil.findPropertyGetter(psiClass, getPropertyName(s, context), false, isLookDeep());
if (getter != null) return getter;
break;
case SETTER:
final PsiMethod setter = PropertyUtil.findPropertySetter(psiClass, getPropertyName(s, context), false, isLookDeep());
if (setter != null) return setter;
break;
}
}
return null;
}
项目:intellij-ce-playground
文件:DfaExpressionFactory.java
@Nullable
private static PsiModifierListOwner getAccessedVariableOrGetter(final PsiElement target) {
if (target instanceof PsiVariable) {
return (PsiVariable)target;
}
if (target instanceof PsiMethod) {
PsiMethod method = (PsiMethod)target;
if (PropertyUtil.isSimplePropertyGetter(method) && !(method.getReturnType() instanceof PsiPrimitiveType)) {
String qName = PsiUtil.getMemberQualifiedName(method);
if (qName == null || !FALSE_GETTERS.value(qName)) {
return method;
}
}
}
return null;
}
项目:intellij-ce-playground
文件:PurityInference.java
public static boolean inferPurity(@NotNull final PsiMethod method) {
if (!InferenceFromSourceUtil.shouldInferFromSource(method) ||
method.getReturnType() == PsiType.VOID ||
method.getBody() == null ||
method.isConstructor() ||
PropertyUtil.isSimpleGetter(method)) {
return false;
}
return CachedValuesManager.getCachedValue(method, new CachedValueProvider<Boolean>() {
@Nullable
@Override
public Result<Boolean> compute() {
boolean pure = RecursionManager.doPreventingRecursion(method, true, new Computable<Boolean>() {
@Override
public Boolean compute() {
return doInferPurity(method);
}
}) == Boolean.TRUE;
return Result.create(pure, method);
}
});
}
项目:intellij-ce-playground
文件:CreateGetterOrSetterFix.java
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
if (!myField.isValid()) return false;
final PsiClass aClass = myField.getContainingClass();
if (aClass == null) {
return false;
}
if (myCreateGetter){
if (isStaticFinal(myField) || PropertyUtil.findPropertyGetter(aClass, myPropertyName, isStatic(myField), false) != null){
return false;
}
}
if (myCreateSetter){
if(isFinal(myField) || PropertyUtil.findPropertySetter(aClass, myPropertyName, isStatic(myField), false) != null){
return false;
}
}
return true;
}
项目:intellij-ce-playground
文件:ExpectedTypesProvider.java
private void visitMethodReturnType(final PsiMethod scopeMethod, PsiType type, boolean tailTypeSemicolon) {
if (type != null) {
NullableComputable<String> expectedName;
if (PropertyUtil.isSimplePropertyAccessor(scopeMethod)) {
expectedName = new NullableComputable<String>() {
@Override
public String compute() {
return PropertyUtil.getPropertyName(scopeMethod);
}
};
}
else {
expectedName = ExpectedTypeInfoImpl.NULL;
}
myResult.add(createInfoImpl(type, ExpectedTypeInfo.TYPE_OR_SUBTYPE, type,
tailTypeSemicolon ? TailType.SEMICOLON : TailType.NONE, null, expectedName));
}
}
项目:intellij-ce-playground
文件:CreateBeanPropertyFix.java
protected PsiElement createGetter(final boolean createField) throws IncorrectOperationException {
final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(myPsiClass.getProject()).getElementFactory();
final String methodName = PropertyUtil.suggestGetterName(myPropertyName, myType);
final String typeName = myType.getCanonicalText();
@NonNls final String text;
boolean isInterface = myPsiClass.isInterface();
if (createField) {
final String fieldName = getFieldName();
text = "public " + typeName + " " + methodName + "() { return " + fieldName + "; }";
} else {
if (isInterface) {
text = typeName + " " + methodName + "();";
}
else {
text = "public " + typeName + " " + methodName + "() { return null; }";
}
}
final PsiMethod method = elementFactory.createMethodFromText(text, null);
final PsiMethod psiElement = (PsiMethod)myPsiClass.add(method);
if (!createField && !isInterface) {
CreateFromUsageUtils.setupMethodBody(psiElement);
}
return psiElement;
}
项目:intellij-ce-playground
文件:ReplaceConstructorWithBuilderDialog.java
private void applyNewSetterPrefix() {
final String setterPrefix = Messages.showInputDialog(myTable, "New setter prefix:", "Rename Setters Prefix", null,
mySetterPrefix, new MySetterPrefixInputValidator());
if (setterPrefix != null) {
mySetterPrefix = setterPrefix;
PropertiesComponent.getInstance(myProject).setValue(SETTER_PREFIX_KEY, setterPrefix);
final JavaCodeStyleManager javaCodeStyleManager = JavaCodeStyleManager.getInstance(myProject);
for (String paramName : myParametersMap.keySet()) {
final ParameterData data = myParametersMap.get(paramName);
paramName = data.getParamName();
final String propertyName = javaCodeStyleManager.variableNameToPropertyName(paramName, VariableKind.PARAMETER);
data.setSetterName(PropertyUtil.suggestSetterName(propertyName, setterPrefix));
}
myTable.revalidate();
myTable.repaint();
}
}
项目:intellij-ce-playground
文件:PyConstructorArgumentCompletionContributor.java
private static void addSettersAndListeners(CompletionResultSet result, PsiClass containingClass) {
// see PyJavaType.init() in Jython source code for matching logic
for (PsiMethod method : containingClass.getAllMethods()) {
final Project project = containingClass.getProject();
if (PropertyUtil.isSimplePropertySetter(method)) {
final String propName = PropertyUtil.getPropertyName(method);
result.addElement(PyUtil.createNamedParameterLookup(propName, project));
}
else if (method.getName().startsWith("add") && method.getName().endsWith("Listener") && PsiType.VOID.equals(method.getReturnType())) {
final PsiParameter[] parameters = method.getParameterList().getParameters();
if (parameters.length == 1) {
final PsiType type = parameters[0].getType();
if (type instanceof PsiClassType) {
final PsiClass parameterClass = ((PsiClassType)type).resolve();
if (parameterClass != null) {
result.addElement(PyUtil.createNamedParameterLookup(StringUtil.decapitalize(parameterClass.getName()), project));
for (PsiMethod parameterMethod : parameterClass.getMethods()) {
result.addElement(PyUtil.createNamedParameterLookup(parameterMethod.getName(), project));
}
}
}
}
}
}
}
项目:intellij-ce-playground
文件:Analyser.java
@SuppressWarnings("UnusedDeclaration")
public static List<String> findProperties(@Nullable PsiClass input) {
if (input == null) {
return Collections.emptyList();
}
final List<String> result = new ArrayList<String>();
input.accept(new JavaRecursiveElementVisitor() {
@Override
public void visitMethod(PsiMethod method) {
super.visitMethod(method);
if (method.getName().startsWith("get")) {
result.add(PropertyUtil.getPropertyName(method));
}
}
});
return result;
}
项目:intellij-ce-playground
文件:Java15FormInspection.java
protected void checkComponentProperties(Module module, final IComponent component, final FormErrorCollector collector) {
final GlobalSearchScope scope = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module);
final PsiManager psiManager = PsiManager.getInstance(module.getProject());
final PsiClass aClass = JavaPsiFacade.getInstance(psiManager.getProject()).findClass(component.getComponentClassName(), scope);
if (aClass == null) {
return;
}
for(final IProperty prop: component.getModifiedProperties()) {
final PsiMethod getter = PropertyUtil.findPropertyGetter(aClass, prop.getName(), false, true);
if (getter == null) continue;
final LanguageLevel languageLevel = LanguageLevelUtil.getEffectiveLanguageLevel(module);
if (Java15APIUsageInspection.isForbiddenApiUsage(getter, languageLevel)) {
registerError(component, collector, prop, "@since " + Java15APIUsageInspection.getShortName(languageLevel));
}
}
}
项目:intellij-ce-playground
文件:Properties.java
public boolean isPropertyDeprecated(final Module module, final Class aClass, final String propertyName) {
// TODO[yole]: correct module-dependent caching
Set<String> deprecated = myClass2DeprecatedProperties.get(aClass.getName());
if (deprecated == null) {
deprecated = new HashSet<String>();
PsiClass componentClass =
JavaPsiFacade.getInstance(module.getProject()).findClass(aClass.getName(), module.getModuleWithDependenciesAndLibrariesScope(true));
if (componentClass != null) {
PsiMethod[] methods = componentClass.getAllMethods();
for(PsiMethod method: methods) {
if (method.isDeprecated() && PropertyUtil.isSimplePropertySetter(method)) {
deprecated.add(PropertyUtil.getPropertyNameBySetter(method));
}
}
}
myClass2DeprecatedProperties.put(aClass.getName(), deprecated);
}
return deprecated.contains(propertyName);
}
项目:intellij-ce-playground
文件:I18nFormInspection.java
private static boolean isSetterNonNls(final Project project, final GlobalSearchScope searchScope,
final String componentClassName, final String propertyName) {
PsiClass componentClass = JavaPsiFacade.getInstance(project).findClass(componentClassName, searchScope);
if (componentClass == null) {
return false;
}
PsiMethod setter = PropertyUtil.findPropertySetter(componentClass, propertyName, false, true);
if (setter != null) {
PsiParameter[] parameters = setter.getParameterList().getParameters();
if (parameters.length == 1 &&
"java.lang.String".equals(parameters[0].getType().getCanonicalText()) &&
AnnotationUtil.isAnnotated(parameters [0], AnnotationUtil.NON_NLS, false, true)) {
return true;
}
}
return false;
}
项目:intellij-ce-playground
文件:PublicMethodWithoutLoggingInspectionBase.java
@Override
public void visitMethod(@NotNull PsiMethod method) {
//no drilldown
if (method.getNameIdentifier() == null) {
return;
}
if (!method.hasModifierProperty(PsiModifier.PUBLIC)) {
return;
}
final PsiCodeBlock body = method.getBody();
if (body == null) {
return;
}
if (method.isConstructor()) {
return;
}
if (PropertyUtil.isSimpleGetter(method) || PropertyUtil.isSimpleSetter(method)) {
return;
}
if (containsLoggingCall(body)) {
return;
}
registerMethodError(method);
}
项目:intellij-ce-playground
文件:MethodCountInspection.java
private int calculateTotalMethodCount(PsiClass aClass) {
final PsiMethod[] methods = aClass.getMethods();
int totalCount = 0;
for (final PsiMethod method : methods) {
if (method.isConstructor()) {
continue;
}
if (ignoreGettersAndSetters) {
if (PropertyUtil.isSimpleGetter(method) || PropertyUtil.isSimpleSetter(method)) {
continue;
}
}
if (ignoreOverridingMethods) {
if (MethodUtils.hasSuper(method)) {
continue;
}
}
totalCount++;
}
return totalCount;
}
项目:intellij-ce-playground
文件:NamedArgumentDescriptor.java
@Override
public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException {
final PsiElement resolved = resolve();
if (resolved instanceof PsiMethod) {
final PsiMethod method = (PsiMethod) resolved;
final String oldName = getElement().getName();
if (!method.getName().equals(oldName)) { //was property reference to accessor
if (PropertyUtil.isSimplePropertySetter(method)) {
final String newPropertyName = PropertyUtil.getPropertyName(newElementName);
if (newPropertyName != null) {
newElementName = newPropertyName;
}
}
}
}
return super.handleElementRename(newElementName);
}
项目:intellij-ce-playground
文件:GrDocMethodReferenceImpl.java
@Override
public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException {
final PsiElement resolved = resolve();
if (resolved instanceof PsiMethod) {
final PsiMethod method = (PsiMethod) resolved;
final String oldName = getReferenceName();
if (!method.getName().equals(oldName)) { //was property reference to accessor
if (PropertyUtil.isSimplePropertyAccessor(method)) {
final String newPropertyName = PropertyUtil.getPropertyName(newElementName);
if (newPropertyName != null) {
return super.handleElementRename(newPropertyName);
}
}
}
}
return super.handleElementRename(newElementName);
}
项目:intellij-ce-playground
文件:ElementFactory.java
/**
* Create a new {@link FieldElement} object.
*
* @param field the {@link com.intellij.psi.PsiField} to get the information from.
* @return a new {@link FieldElement} object.
*/
public static FieldElement newFieldElement(PsiField field, boolean useAccessor) {
FieldElement fe = new FieldElement();
fe.setName(field.getName());
final PsiMethod getterForField = useAccessor ? PropertyUtil.findGetterForField(field) : null;
fe.setAccessor(getterForField != null ? getterForField.getName() + "()" : field.getName());
if (PsiAdapter.isConstantField(field)) fe.setConstant(true);
if (PsiAdapter.isEnumField(field)) fe.setEnum(true);
PsiModifierList modifiers = field.getModifierList();
if (modifiers != null) {
if (modifiers.hasModifierProperty(PsiModifier.TRANSIENT)) fe.setModifierTransient(true);
if (modifiers.hasModifierProperty(PsiModifier.VOLATILE)) fe.setModifierVolatile(true);
}
PsiElementFactory factory = JavaPsiFacade.getInstance(field.getProject()).getElementFactory();
PsiType type = field.getType();
setElementInfo(fe, factory, type, modifiers);
return fe;
}
项目:intellij-ce-playground
文件:JavaFxGetterSetterPrototypeProvider.java
@Override
public PsiMethod[] generateGetters(PsiField field) {
final Project project = field.getProject();
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
final PsiMethod getter = GenerateMembersUtil.generateSimpleGetterPrototype(field);
final PsiType wrappedType = JavaFxPsiUtil.getWrappedPropertyType(field, project, JavaFxCommonClassNames.ourReadOnlyMap);
final PsiTypeElement returnTypeElement = getter.getReturnTypeElement();
LOG.assertTrue(returnTypeElement != null);
returnTypeElement.replace(factory.createTypeElement(wrappedType));
final PsiCodeBlock getterBody = getter.getBody();
LOG.assertTrue(getterBody != null);
getterBody.getStatements()[0].replace(factory.createStatementFromText("return " + field.getName() + ".get();", field));
final PsiMethod propertyGetter = PropertyUtil.generateGetterPrototype(field);
propertyGetter.setName(JavaCodeStyleManager.getInstance(project).variableNameToPropertyName(field.getName(), VariableKind.FIELD) + "Property");
return new PsiMethod[] {getter, GenerateMembersUtil.annotateOnOverrideImplement(field.getContainingClass(), propertyGetter)};
}
项目:smogen
文件:PropertyLocator.java
/**
* Identifies the list of properties on the supplied class and optionally its superclasses.
* Properties are located through their setters, ensuring that all properties are writable.
* Located properties may or may not also have getters.
*
* @param owner the class to be scanned for properties
* @param includeSuperclasses whether to include properties declared in superclasses
* @return the list of qualifying properties
*/
@NotNull
public static List<Property> locatePropertiesFromSetters(@NotNull PsiClass owner, boolean includeSuperclasses) {
Map<String, PsiMethod> propertyMap = PropertyUtil.getAllProperties(owner,
true, // Do accept setters
false, // Don't accept getters
includeSuperclasses);
@SuppressWarnings("ConstantConditions")
List<Property> matchedProperties = propertyMap
.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.map(e -> new Property(e.getKey(),
PropertyUtil.getPropertyType(e.getValue()), // known to be non-null
PropertyUtil.findPropertyGetter(owner, e.getKey(), false, includeSuperclasses),
e.getValue()))
.collect(toList());
return matchedProperties;
}
项目:smogen
文件:PropertyLocator.java
/**
* Identifies the list of properties on the supplied class and optionally its superclasses.
* Properties are located through their getters, ensuring that all properties are readable.
* Located properties may or may not also have setters.
*
* @param owner the class to be scanned for properties
* @param includeSuperclasses whether to include properties declared in superclasses
* @return the list of qualifying properties
*/
@NotNull
public static List<Property> locatePropertiesFromGetters(@NotNull PsiClass owner, boolean includeSuperclasses) {
Map<String, PsiMethod> propertyMap = PropertyUtil.getAllProperties(owner,
false, // Don't accept setters
true, // Do accept getters
includeSuperclasses);
@SuppressWarnings("ConstantConditions")
List<Property> matchedProperties = propertyMap
.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.map(e -> new Property(e.getKey(),
PropertyUtil.getPropertyType(e.getValue()), // known to be non-null
e.getValue(),
PropertyUtil.findPropertySetter(owner, e.getKey(), false, includeSuperclasses)))
.collect(toList());
return matchedProperties;
}
项目:tools-idea
文件:JavaReadWriteAccessDetector.java
@Override
public Access getExpressionAccess(final PsiElement expression) {
if (!(expression instanceof PsiExpression)) return Access.Read;
PsiExpression expr = (PsiExpression) expression;
boolean readAccess = PsiUtil.isAccessedForReading(expr);
boolean writeAccess = PsiUtil.isAccessedForWriting(expr);
if (!writeAccess && expr instanceof PsiReferenceExpression) {
//when searching usages of fields, should show all found setters as a "only write usage"
PsiElement actualReferee = ((PsiReferenceExpression) expr).resolve();
if (actualReferee instanceof PsiMethod && PropertyUtil.isSimplePropertySetter((PsiMethod)actualReferee)) {
writeAccess = true;
readAccess = false;
}
}
if (writeAccess && readAccess) return Access.ReadWrite;
return writeAccess ? Access.Write : Access.Read;
}
项目:tools-idea
文件:JavaFoldingBuilderBase.java
private static boolean isSimplePropertyAccessor(PsiMethod method) {
PsiCodeBlock body = method.getBody();
if (body == null) return false;
PsiStatement[] statements = body.getStatements();
if (statements.length == 0) return false;
PsiStatement statement = statements[0];
if (PropertyUtil.isSimplePropertyGetter(method)) {
if (statement instanceof PsiReturnStatement) {
return ((PsiReturnStatement)statement).getReturnValue() instanceof PsiReferenceExpression;
}
}
else if (PropertyUtil.isSimplePropertySetter(method)) {
if (statements.length > 1 && !(statements[1] instanceof PsiReturnStatement)) return false;
if (statement instanceof PsiExpressionStatement) {
PsiExpression expr = ((PsiExpressionStatement)statement).getExpression();
if (expr instanceof PsiAssignmentExpression) {
PsiExpression lhs = ((PsiAssignmentExpression)expr).getLExpression();
PsiExpression rhs = ((PsiAssignmentExpression)expr).getRExpression();
return lhs instanceof PsiReferenceExpression && rhs instanceof PsiReferenceExpression && !((PsiReferenceExpression)rhs).isQualified();
}
}
}
return false;
}
项目:tools-idea
文件:AbstractMemberResolveConverter.java
public PsiMember fromString(final String s, final ConvertContext context) {
if (s == null) return null;
final PsiClass psiClass = getTargetClass(context);
if (psiClass == null) return null;
for (PropertyMemberType type : getMemberTypes(context)) {
switch (type) {
case FIELD:
final PsiField field = psiClass.findFieldByName(s, isLookDeep());
if (field != null) return field;
break;
case GETTER:
final PsiMethod getter = PropertyUtil.findPropertyGetter(psiClass, getPropertyName(s, context), false, isLookDeep());
if (getter != null) return getter;
break;
case SETTER:
final PsiMethod setter = PropertyUtil.findPropertySetter(psiClass, getPropertyName(s, context), false, isLookDeep());
if (setter != null) return setter;
break;
}
}
return null;
}
项目:tools-idea
文件:CreateGetterOrSetterFix.java
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
if (!myField.isValid()) return false;
final PsiClass aClass = myField.getContainingClass();
if (aClass == null) {
return false;
}
if (myCreateGetter){
if (isStaticFinal(myField) || PropertyUtil.findPropertyGetter(aClass, myPropertyName, isStatic(myField), false) != null){
return false;
}
}
if (myCreateSetter){
if(isFinal(myField) || PropertyUtil.findPropertySetter(aClass, myPropertyName, isStatic(myField), false) != null){
return false;
}
}
return true;
}
项目:tools-idea
文件:ReplaceInaccessibleFieldWithGetterSetterFix.java
public static void registerQuickFix(PsiMember refElement,
PsiJavaCodeReferenceElement place,
PsiClass accessObjectClass,
HighlightInfo error) {
if (refElement instanceof PsiField && place instanceof PsiReferenceExpression) {
final PsiField psiField = (PsiField)refElement;
final PsiClass containingClass = psiField.getContainingClass();
if (containingClass != null) {
if (PsiUtil.isOnAssignmentLeftHand((PsiExpression)place)) {
final PsiMethod setterPrototype = PropertyUtil.generateSetterPrototype(psiField);
final PsiMethod setter = containingClass.findMethodBySignature(setterPrototype, true);
if (setter != null && PsiUtil.isAccessible(setter, place, accessObjectClass)) {
QuickFixAction.registerQuickFixAction(error, new ReplaceInaccessibleFieldWithGetterSetterFix(place, setter, true));
}
}
else if (PsiUtil.isAccessedForReading((PsiExpression)place)) {
final PsiMethod getterPrototype = GenerateMembersUtil.generateGetterPrototype(psiField);
final PsiMethod getter = containingClass.findMethodBySignature(getterPrototype, true);
if (getter != null && PsiUtil.isAccessible(getter, place, accessObjectClass)) {
QuickFixAction.registerQuickFixAction(error, new ReplaceInaccessibleFieldWithGetterSetterFix(place, getter, false));
}
}
}
}
}
项目:tools-idea
文件:ExpectedTypesProvider.java
private void visitMethodReturnType(final PsiMethod scopeMethod, PsiType type, boolean tailTypeSemicolon) {
if (type != null) {
ExpectedTypeInfoImpl info = createInfoImpl(type, ExpectedTypeInfo.TYPE_OR_SUBTYPE, type,
tailTypeSemicolon ? TailType.SEMICOLON : TailType.NONE);
if (PropertyUtil.isSimplePropertyAccessor(scopeMethod)) {
info.expectedName = new NullableComputable<String>() {
@Override
public String compute() {
return PropertyUtil.getPropertyName(scopeMethod);
}
};
}
myResult = new ExpectedTypeInfo[]{info};
}
else {
myResult = ExpectedTypeInfo.EMPTY_ARRAY;
}
}
项目:tools-idea
文件:CreateBeanPropertyFix.java
protected PsiElement createGetter(final boolean createField) throws IncorrectOperationException {
final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(myPsiClass.getProject()).getElementFactory();
final String methodName = PropertyUtil.suggestGetterName(myPropertyName, myType);
final String typeName = myType.getCanonicalText();
@NonNls final String text;
boolean isInterface = myPsiClass.isInterface();
if (createField) {
final String fieldName = getFieldName();
text = "public " + typeName + " " + methodName + "() { return " + fieldName + "; }";
} else {
if (isInterface) {
text = typeName + " " + methodName + "();";
}
else {
text = "public " + typeName + " " + methodName + "() { return null; }";
}
}
final PsiMethod method = elementFactory.createMethodFromText(text, null);
final PsiMethod psiElement = (PsiMethod)myPsiClass.add(method);
if (!createField && !isInterface) {
CreateFromUsageUtils.setupMethodBody(psiElement);
}
return psiElement;
}
项目:tools-idea
文件:Util.java
public static boolean anyFieldsWithGettersPresent(List<UsageInfo> classMemberRefs) {
for (UsageInfo usageInfo : classMemberRefs) {
if (usageInfo.getElement() instanceof PsiReferenceExpression) {
PsiElement e = ((PsiReferenceExpression)usageInfo.getElement()).resolve();
if (e instanceof PsiField) {
PsiField psiField = (PsiField)e;
PsiMethod getterPrototype = PropertyUtil.generateGetterPrototype(psiField);
PsiMethod getter = psiField.getContainingClass().findMethodBySignature(getterPrototype, true);
if (getter != null) return true;
}
}
}
return false;
}
项目:tools-idea
文件:Java15FormInspection.java
protected void checkComponentProperties(Module module, final IComponent component, final FormErrorCollector collector) {
final GlobalSearchScope scope = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module);
final PsiManager psiManager = PsiManager.getInstance(module.getProject());
final PsiClass aClass = JavaPsiFacade.getInstance(psiManager.getProject()).findClass(component.getComponentClassName(), scope);
if (aClass == null) {
return;
}
for(final IProperty prop: component.getModifiedProperties()) {
final PsiMethod getter = PropertyUtil.findPropertyGetter(aClass, prop.getName(), false, true);
if (getter == null) continue;
final LanguageLevel languageLevel = LanguageLevelUtil.getEffectiveLanguageLevel(module);
if (Java15APIUsageInspection.isForbiddenApiUsage(getter, languageLevel)) {
registerError(component, collector, prop, "@since " + Java15APIUsageInspection.getShortName(languageLevel));
}
}
}
项目:tools-idea
文件:Properties.java
public boolean isPropertyDeprecated(final Module module, final Class aClass, final String propertyName) {
// TODO[yole]: correct module-dependent caching
Set<String> deprecated = myClass2DeprecatedProperties.get(aClass.getName());
if (deprecated == null) {
deprecated = new HashSet<String>();
PsiClass componentClass =
JavaPsiFacade.getInstance(module.getProject()).findClass(aClass.getName(), module.getModuleWithDependenciesAndLibrariesScope(true));
if (componentClass != null) {
PsiMethod[] methods = componentClass.getAllMethods();
for(PsiMethod method: methods) {
if (method.isDeprecated() && PropertyUtil.isSimplePropertySetter(method)) {
deprecated.add(PropertyUtil.getPropertyNameBySetter(method));
}
}
}
myClass2DeprecatedProperties.put(aClass.getName(), deprecated);
}
return deprecated.contains(propertyName);
}
项目:tools-idea
文件:I18nFormInspection.java
private static boolean isSetterNonNls(final Project project, final GlobalSearchScope searchScope,
final String componentClassName, final String propertyName) {
PsiClass componentClass = JavaPsiFacade.getInstance(project).findClass(componentClassName, searchScope);
if (componentClass == null) {
return false;
}
PsiMethod setter = PropertyUtil.findPropertySetter(componentClass, propertyName, false, true);
if (setter != null) {
PsiParameter[] parameters = setter.getParameterList().getParameters();
if (parameters.length == 1 &&
"java.lang.String".equals(parameters[0].getType().getCanonicalText()) &&
AnnotationUtil.isAnnotated(parameters [0], AnnotationUtil.NON_NLS, false, true)) {
return true;
}
}
return false;
}
项目:tools-idea
文件:PublicMethodWithoutLoggingInspection.java
@Override
public void visitMethod(@NotNull PsiMethod method) {
//no drilldown
if (method.getNameIdentifier() == null) {
return;
}
if (!method.hasModifierProperty(PsiModifier.PUBLIC)) {
return;
}
final PsiCodeBlock body = method.getBody();
if (body == null) {
return;
}
if (method.isConstructor()) {
return;
}
if (PropertyUtil.isSimpleGetter(method) || PropertyUtil.isSimpleSetter(method)) {
return;
}
if (containsLoggingCall(body)) {
return;
}
registerMethodError(method);
}
项目:tools-idea
文件:FieldHasSetterButNoGetterInspection.java
@Override
public void visitField(@NotNull PsiField field) {
final Project project = field.getProject();
final String propertyName = PropertyUtil.suggestPropertyName(project, field);
final boolean isStatic = field.hasModifierProperty(PsiModifier.STATIC);
final PsiClass containingClass = field.getContainingClass();
final PsiMethod setter = PropertyUtil.findPropertySetter(containingClass, propertyName, isStatic, false);
if (setter == null) {
return;
}
final PsiMethod getter = PropertyUtil.findPropertyGetter(containingClass, propertyName, isStatic, false);
if (getter != null) {
return;
}
registerFieldError(field);
}
项目:tools-idea
文件:MethodCountInspection.java
private int calculateTotalMethodCount(PsiClass aClass) {
final PsiMethod[] methods = aClass.getMethods();
int totalCount = 0;
for (final PsiMethod method : methods) {
if (method.isConstructor()) {
continue;
}
if (ignoreGettersAndSetters) {
if (PropertyUtil.isSimpleGetter(method) ||
PropertyUtil.isSimpleSetter(method)) {
continue;
}
}
totalCount++;
}
return totalCount;
}
项目:tools-idea
文件:NamedArgumentDescriptor.java
@Override
public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException {
final PsiElement resolved = resolve();
if (resolved instanceof PsiMethod) {
final PsiMethod method = (PsiMethod) resolved;
final String oldName = getElement().getName();
if (!method.getName().equals(oldName)) { //was property reference to accessor
if (PropertyUtil.isSimplePropertySetter(method)) {
final String newPropertyName = PropertyUtil.getPropertyName(newElementName);
if (newPropertyName != null) {
newElementName = newPropertyName;
}
}
}
}
return super.handleElementRename(newElementName);
}
项目:tools-idea
文件:GrDocMethodReferenceImpl.java
public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException {
final PsiElement resolved = resolve();
if (resolved instanceof PsiMethod) {
final PsiMethod method = (PsiMethod) resolved;
final String oldName = getReferenceName();
if (!method.getName().equals(oldName)) { //was property reference to accessor
if (PropertyUtil.isSimplePropertyAccessor(method)) {
final String newPropertyName = PropertyUtil.getPropertyName(newElementName);
if (newPropertyName != null) {
return super.handleElementRename(newPropertyName);
}
}
}
}
return super.handleElementRename(newElementName);
}
项目:tools-idea
文件:JavaFxGetterSetterPrototypeProvider.java
@Override
public PsiMethod[] generateGetters(PsiField field) {
final Project project = field.getProject();
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
final PsiMethod getter = PropertyUtil.generateGetterPrototype(field);
final PsiType wrappedType = JavaFxPsiUtil.getWrappedPropertyType(field, project, JavaFxCommonClassNames.ourReadOnlyMap);
final PsiTypeElement returnTypeElement = getter.getReturnTypeElement();
LOG.assertTrue(returnTypeElement != null);
returnTypeElement.replace(factory.createTypeElement(wrappedType));
final PsiCodeBlock getterBody = getter.getBody();
LOG.assertTrue(getterBody != null);
getterBody.getStatements()[0].replace(factory.createStatementFromText("return " + field.getName() + ".get();", field));
final PsiMethod propertyGetter = PropertyUtil.generateGetterPrototype(field);
propertyGetter.setName(JavaCodeStyleManager.getInstance(project).variableNameToPropertyName(field.getName(), VariableKind.FIELD) + "Property");
return new PsiMethod[] {getter, propertyGetter};
}
项目:tools-idea
文件:JavaFxGetterSetterPrototypeProvider.java
@Override
public PsiMethod[] generateSetters(PsiField field) {
final PsiMethod setter = PropertyUtil.generateSetterPrototype(field);
final Project project = field.getProject();
final PsiType wrappedType = JavaFxPsiUtil.getWrappedPropertyType(field, project, JavaFxCommonClassNames.ourWritableMap);
final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(project);
final PsiTypeElement newTypeElement = elementFactory.createTypeElement(wrappedType);
final PsiParameter[] parameters = setter.getParameterList().getParameters();
LOG.assertTrue(parameters.length == 1);
final PsiParameter parameter = parameters[0];
final PsiTypeElement typeElement = parameter.getTypeElement();
LOG.assertTrue(typeElement != null);
typeElement.replace(newTypeElement);
final PsiCodeBlock body = setter.getBody();
LOG.assertTrue(body != null);
body.getStatements()[0].replace(elementFactory.createStatementFromText("this." + field.getName() + ".set(" + parameter.getName() + ");", field));
return new PsiMethod[] {setter};
}