getter/setter: show error notification if template was wrong

This commit is contained in:
Anna Kozlova
2015-01-28 17:07:22 +03:00
parent b784b6165b
commit 0ec0ec97e3
3 changed files with 26 additions and 9 deletions
@@ -36,6 +36,7 @@ import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.java.generate.exception.GenerateCodeException;
import org.jetbrains.java.generate.template.TemplateResource;
import org.jetbrains.java.generate.template.TemplatesManager;
import org.jetbrains.java.generate.view.TemplatesPanel;
@@ -160,6 +161,9 @@ public abstract class GenerateGetterSetterHandlerBase extends GenerateMembersHan
try {
return generateMemberPrototypes(aClass, member).length > 0;
}
catch (GenerateCodeException e) {
return true;
}
catch (IncorrectOperationException e) {
LOG.error(e);
return false;
@@ -52,7 +52,7 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.java.generate.GenerationUtil;
import org.jetbrains.java.generate.element.GenerationHelper;
import org.jetbrains.java.generate.exception.GenerateCodeException;
import org.jetbrains.java.generate.template.TemplatesManager;
import java.util.*;
@@ -621,20 +621,28 @@ public class GenerateMembersUtil {
}
public static PsiMethod generateGetterPrototype(@NotNull PsiField field) {
return generatePrototype(field, field.getContainingClass(), GetterTemplatesManager.getInstance());
return generateGetterPrototype(field, true);
}
public static PsiMethod generateSetterPrototype(@NotNull PsiField field) {
return generateSetterPrototype(field, field.getContainingClass());
return generateSetterPrototype(field, true);
}
public static PsiMethod generateSetterPrototype(@NotNull PsiField field, PsiClass aClass) {
return generatePrototype(field, aClass, SetterTemplatesManager.getInstance());
return generatePrototype(field, aClass, true, SetterTemplatesManager.getInstance());
}
static PsiMethod generateGetterPrototype(@NotNull PsiField field, boolean ignoreInvalidTemplate) {
return generatePrototype(field, field.getContainingClass(), ignoreInvalidTemplate, GetterTemplatesManager.getInstance());
}
static PsiMethod generateSetterPrototype(@NotNull PsiField field, boolean ignoreInvalidTemplate) {
return generatePrototype(field, field.getContainingClass(), ignoreInvalidTemplate, SetterTemplatesManager.getInstance());
}
private static PsiMethod generatePrototype(@NotNull PsiField field,
PsiClass psiClass,
TemplatesManager templatesManager) {
boolean ignoreInvalidTemplate, TemplatesManager templatesManager) {
Project project = field.getProject();
PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory();
final String methodText = GenerationUtil.velocityGenerateCode(psiClass, Collections.singletonList(field),
@@ -646,9 +654,14 @@ public class GenerateMembersUtil {
result = factory.createMethodFromText(methodText, psiClass);
}
catch (IncorrectOperationException e) {
LOG.info(e);
result = templatesManager instanceof GetterTemplatesManager ? PropertyUtil.generateGetterPrototype(field)
: PropertyUtil.generateSetterPrototype(field);
if (ignoreInvalidTemplate) {
LOG.info(e);
result = templatesManager instanceof GetterTemplatesManager ? PropertyUtil.generateGetterPrototype(field)
: PropertyUtil.generateSetterPrototype(field);
}
else {
throw new GenerateCodeException(e);
}
}
result = (PsiMethod)CodeStyleManager.getInstance(project).reformat(result);
PropertyUtil.annotateWithNullableStuff(field, result);
@@ -52,7 +52,7 @@ public abstract class GetterSetterPrototypeProvider {
return generateGetter ? provider.generateGetters(field) : provider.generateSetters(field);
}
}
return new PsiMethod[]{generateGetter ? GenerateMembersUtil.generateGetterPrototype(field) : GenerateMembersUtil.generateSetterPrototype(field)};
return new PsiMethod[]{generateGetter ? GenerateMembersUtil.generateGetterPrototype(field, false) : GenerateMembersUtil.generateSetterPrototype(field, false)};
}
public static boolean isReadOnlyProperty(PsiField field) {