diff --git a/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java b/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java index c685f965973b..750321a2a4d2 100644 --- a/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java @@ -15,10 +15,14 @@ */ package com.intellij.psi.impl; +import com.intellij.ide.fileTemplates.FileTemplate; +import com.intellij.ide.fileTemplates.FileTemplateManager; +import com.intellij.ide.fileTemplates.JavaTemplateUtil; import com.intellij.lang.ASTNode; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.module.Module; +import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.*; import com.intellij.openapi.roots.impl.DirectoryIndex; @@ -31,10 +35,12 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsManager; import com.intellij.psi.impl.compiled.ClsClassImpl; import com.intellij.psi.impl.source.codeStyle.ImportHelper; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.Properties; /** * @author yole @@ -223,4 +229,31 @@ public class JavaPsiImplementationHelperImpl extends JavaPsiImplementationHelper return -1; } } + + @Override + public void setupCatchBlock(String exceptionName, PsiElement context, PsiCatchSection catchSection) { + final FileTemplate catchBodyTemplate = FileTemplateManager.getInstance().getCodeTemplate(JavaTemplateUtil.TEMPLATE_CATCH_BODY); + LOG.assertTrue(catchBodyTemplate != null); + + final Properties props = new Properties(); + props.setProperty(FileTemplate.ATTRIBUTE_EXCEPTION, exceptionName); + if (context != null && context.isPhysical()) { + final PsiDirectory directory = context.getContainingFile().getContainingDirectory(); + if (directory != null) { + JavaTemplateUtil.setPackageNameAttribute(props, directory); + } + } + + final PsiCodeBlock codeBlockFromText; + try { + codeBlockFromText = PsiElementFactory.SERVICE.getInstance(myProject).createCodeBlockFromText("{\n" + catchBodyTemplate.getText(props) + "\n}", null); + } + catch (ProcessCanceledException ce) { + throw ce; + } + catch (Exception e) { + throw new IncorrectOperationException("Incorrect file template", e); + } + catchSection.getCatchBlock().replace(codeBlockFromText); + } } diff --git a/java/java-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java b/java/java-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java index eb7183405b56..275c9b21351a 100644 --- a/java/java-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java @@ -15,15 +15,11 @@ */ package com.intellij.psi.impl; -import com.intellij.ide.fileTemplates.FileTemplate; -import com.intellij.ide.fileTemplates.FileTemplateManager; -import com.intellij.ide.fileTemplates.JavaTemplateUtil; import com.intellij.lang.*; import com.intellij.lang.java.parser.JavaParserUtil; import com.intellij.lang.java.parser.StatementParser; import com.intellij.lexer.Lexer; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.java.LanguageLevel; @@ -49,7 +45,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Map; -import java.util.Properties; import static com.intellij.openapi.util.text.StringUtil.join; @@ -748,37 +743,9 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps if (!(element instanceof PsiCatchSection)) { throw new IncorrectOperationException("Incorrect catch section '" + text + "'. Parsed element: " + element); } - setupCatchBlock(exceptionName, context, (PsiCatchSection)element); + JavaPsiImplementationHelper.getInstance(myManager.getProject()).setupCatchBlock(exceptionName, context, (PsiCatchSection)element); final PsiCatchSection catchSection = (PsiCatchSection)CodeStyleManager.getInstance(myManager.getProject()).reformat(element); GeneratedMarkerVisitor.markGenerated(catchSection); return catchSection; } - - private void setupCatchBlock(final String exceptionName, @Nullable final PsiElement context, final PsiCatchSection psiCatchSection) - throws IncorrectOperationException { - final FileTemplate catchBodyTemplate = FileTemplateManager.getInstance().getCodeTemplate(JavaTemplateUtil.TEMPLATE_CATCH_BODY); - LOG.assertTrue(catchBodyTemplate != null); - - final Properties props = new Properties(); - props.setProperty(FileTemplate.ATTRIBUTE_EXCEPTION, exceptionName); - if (context != null && context.isPhysical()) { - final PsiDirectory directory = context.getContainingFile().getContainingDirectory(); - if (directory != null) { - JavaTemplateUtil.setPackageNameAttribute(props, directory); - } - } - - final PsiCodeBlock codeBlockFromText; - try { - codeBlockFromText = createCodeBlockFromText("{\n" + catchBodyTemplate.getText(props) + "\n}", null); - } - catch (ProcessCanceledException ce) { - throw ce; - } - catch (Exception e) { - throw new IncorrectOperationException("Incorrect file template", e); - } - psiCatchSection.getCatchBlock().replace(codeBlockFromText); - } - } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelper.java b/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelper.java index 81c2629453ae..89030a88f5fb 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelper.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelper.java @@ -47,4 +47,6 @@ public abstract class JavaPsiImplementationHelper { public abstract ASTNode getDefaultImportAnchor(PsiImportList list, PsiImportStatementBase statement); public abstract PsiElement getDefaultMemberAnchor(PsiClass psiClass, PsiMember firstPsi); + + public abstract void setupCatchBlock(String exceptionName, PsiElement context, PsiCatchSection element); }