From 60a4c454a66466f120003305b239dd14f932d41b Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Sat, 18 Feb 2012 19:45:37 +0400 Subject: [PATCH] IDEA-77079: Idea tries to create setter instead of getter (see attach) --- .../beanProperties/CreateBeanPropertyFix.java | 69 ++++++++++--------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/java/java-impl/src/com/intellij/psi/impl/beanProperties/CreateBeanPropertyFix.java b/java/java-impl/src/com/intellij/psi/impl/beanProperties/CreateBeanPropertyFix.java index c1bbeeaaad53..47618f5594ae 100644 --- a/java/java-impl/src/com/intellij/psi/impl/beanProperties/CreateBeanPropertyFix.java +++ b/java/java-impl/src/com/intellij/psi/impl/beanProperties/CreateBeanPropertyFix.java @@ -66,20 +66,7 @@ public abstract class CreateBeanPropertyFix implements LocalQuickFix, IntentionA type = facade.getElementFactory().createType(aClass); } if (psiClass.isInterface()) { - return new CreateBeanPropertyFix[] { - new CreateBeanPropertyFix(propertyName, psiClass, type) { - @Override - protected void doFix() throws IncorrectOperationException { - createSetter(false); - } - - @Override - @NotNull - public String getName() { - return QuickFixBundle.message("create.writable.property", myPropertyName); - } - } - }; + return new CreateBeanPropertyFix[] { new CreateAccessorFix(propertyName, psiClass, type, createSetter) }; } return new CreateBeanPropertyFix[] { new CreateBeanPropertyFix(propertyName, psiClass, type) { @@ -97,23 +84,7 @@ public abstract class CreateBeanPropertyFix implements LocalQuickFix, IntentionA createGetter(true); } }, - new CreateBeanPropertyFix(propertyName, psiClass, type) { - @Override - protected void doFix() throws IncorrectOperationException { - if (createSetter) { - createSetter(false); - } - else { - createGetter(false); - } - } - - @Override - @NotNull - public String getName() { - return QuickFixBundle.message(createSetter ? "create.writable.property" : "create.readable.property", myPropertyName); - } - }, + new CreateAccessorFix(propertyName, psiClass, type, createSetter), new CreateBeanPropertyFix(propertyName, psiClass, type) { @Override protected void doFix() throws IncorrectOperationException { @@ -132,7 +103,6 @@ public abstract class CreateBeanPropertyFix implements LocalQuickFix, IntentionA return QuickFixBundle.message(createSetter ? "create.writable.property.with.field" : "create.readable.property.with.field", myPropertyName); } } - }; } @@ -228,15 +198,21 @@ public abstract class CreateBeanPropertyFix implements LocalQuickFix, IntentionA 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 { - text = "public " + typeName + " " + methodName + "() { return null; }"; + 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) { + if (!createField && !isInterface) { CreateFromUsageUtils.setupMethodBody(psiElement); } return psiElement; @@ -248,4 +224,29 @@ public abstract class CreateBeanPropertyFix implements LocalQuickFix, IntentionA final PsiField psiField = elementFactory.createField(fieldName, myType); return myPsiClass.add(psiField); } + + private static class CreateAccessorFix extends CreateBeanPropertyFix { + private final boolean myCreateSetter; + + public CreateAccessorFix(String propertyName, PsiClass psiClass, PsiType type, boolean createSetter) { + super(propertyName, psiClass, type); + myCreateSetter = createSetter; + } + + @Override + protected void doFix() throws IncorrectOperationException { + if (myCreateSetter) { + createSetter(false); + } + else { + createGetter(false); + } + } + + @Override + @NotNull + public String getName() { + return QuickFixBundle.message(myCreateSetter ? "create.writable.property" : "create.readable.property", myPropertyName); + } + } }