diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateGetterSetterHandlerBase.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateGetterSetterHandlerBase.java index 700d397d07c9..0de29d19b50b 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateGetterSetterHandlerBase.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateGetterSetterHandlerBase.java @@ -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; diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java index f1fb3a07ee93..9817ce5e631d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java @@ -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); diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GetterSetterPrototypeProvider.java b/java/java-impl/src/com/intellij/codeInsight/generation/GetterSetterPrototypeProvider.java index 782843cc8be3..486b2d6faf37 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GetterSetterPrototypeProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GetterSetterPrototypeProvider.java @@ -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) {