mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
setupCatchBlock() method moved from PsiElementFactoryImpl to JavaPsiImplementationFactory
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user