@Override public TemplateLanguageBlock createTemplateLanguageBlock( @NotNull ASTNode node, @Nullable Wrap wrap, @Nullable Alignment alignment, @Nullable List<DataLanguageBlockWrapper> foreignChildren, @NotNull CodeStyleSettings codeStyleSettings) { final FormattingDocumentModelImpl documentModel = FormattingDocumentModelImpl.createOn(node.getPsi().getContainingFile()); if (node.getPsi() instanceof TagElement) { return new SoyTagBlock( this, codeStyleSettings, node, foreignChildren, new HtmlPolicy(codeStyleSettings, documentModel)); } else if(node.getPsi() instanceof TagBlockElement) { return new SoyTagBlockBlock( this, codeStyleSettings, node, foreignChildren, new HtmlPolicy(codeStyleSettings, documentModel)); } else if (node.getPsi() instanceof SoyStatementList) { return new SoyStatementListBlock( this, codeStyleSettings, node, foreignChildren, new HtmlPolicy(codeStyleSettings, documentModel)); } else { return new SoyBlock( this, codeStyleSettings, node, foreignChildren, new HtmlPolicy(codeStyleSettings, documentModel)); } }
@Override @NotNull public FormattingModel createModel(final PsiElement element, final CodeStyleSettings settings) { final FileElement fileElement = TreeUtil.getFileElement((TreeElement)SourceTreeToPsiMap.psiElementToTree(element)); LOG.assertTrue(fileElement != null, "File element should not be null for " + element); CommonCodeStyleSettings commonSettings = settings.getCommonSettings(JavaLanguage.INSTANCE); JavaCodeStyleSettings customJavaSettings = settings.getCustomSettings(JavaCodeStyleSettings.class); Block block = AbstractJavaBlock.newJavaBlock(fileElement, commonSettings, customJavaSettings); FormattingDocumentModelImpl model = FormattingDocumentModelImpl.createOn(element.getContainingFile()); return new PsiBasedFormatterModelWithShiftIndentInside (element.getContainingFile(), block, model); }
@Override @NotNull public FormattingModel createModel(final PsiElement element, final CodeStyleSettings settings) { final PsiFile psiFile = element.getContainingFile(); final FormattingDocumentModelImpl documentModel = FormattingDocumentModelImpl.createOn(psiFile); return new XmlFormattingModel(psiFile, new XmlBlock(SourceTreeToPsiMap.psiElementToTree(psiFile), null, null, new HtmlPolicy(settings, documentModel), null, null, false), documentModel); }
@Override @NotNull public FormattingModel createModel(final PsiElement element, final CodeStyleSettings settings) { final ASTNode root = TreeUtil.getFileElement((TreeElement)SourceTreeToPsiMap.psiElementToTree(element)); final FormattingDocumentModelImpl documentModel = FormattingDocumentModelImpl.createOn(element.getContainingFile()); return new XmlFormattingModel(element.getContainingFile(), createBlock(settings, root, documentModel), documentModel); }
@Override @NotNull public FormattingModel createModel(final PsiElement element, final CodeStyleSettings settings) { final FileElement fileElement = TreeUtil.getFileElement((TreeElement)SourceTreeToPsiMap.psiElementToTree(element)); LOG.assertTrue(fileElement != null, "File element should not be null for " + element); CommonCodeStyleSettings javaSettings = settings.getCommonSettings(JavaLanguage.INSTANCE); Block block = AbstractJavaBlock.createJavaBlock(fileElement, javaSettings); FormattingDocumentModelImpl model = FormattingDocumentModelImpl.createOn(element.getContainingFile()); return new PsiBasedFormatterModelWithShiftIndentInside (element.getContainingFile(), block, model); }
public static void assertInvalidRanges(final int startOffset, final int newEndOffset, FormattingDocumentModel model, String message) { @NonNls final StringBuilder buffer = new StringBuilder(); buffer.append("Invalid formatting blocks:").append(message).append("\n"); buffer.append("Start offset:"); buffer.append(startOffset); buffer.append(" end offset:"); buffer.append(newEndOffset); buffer.append("\n"); int minOffset = Math.max(Math.min(startOffset, newEndOffset) - 20, 0); int maxOffset = Math.min(Math.max(startOffset, newEndOffset) + 20, model.getTextLength()); buffer.append("Affected text fragment:[").append(minOffset).append(",").append(maxOffset).append("] - '") .append(model.getText(new TextRange(minOffset, maxOffset))).append("'\n"); final StringBuilder messageBuffer = new StringBuilder(); messageBuffer.append("Invalid ranges during formatting"); if (model instanceof FormattingDocumentModelImpl) { messageBuffer.append(" in ").append(((FormattingDocumentModelImpl)model).getFile().getLanguage()); } buffer.append("File text:(").append(model.getTextLength()).append(")\n'"); buffer.append(model.getText(new TextRange(0, model.getTextLength())).toString()); buffer.append("'\n"); buffer.append("model (").append(model.getClass()).append("): ").append(model); if (model instanceof FormattingDocumentModelImpl) { final FormattingDocumentModelImpl modelImpl = (FormattingDocumentModelImpl)model; buffer.append("Psi Tree:\n"); final PsiFile file = modelImpl.getFile(); final List<PsiFile> roots = file.getViewProvider().getAllFiles(); for (PsiFile root : roots) { buffer.append("Root "); DebugUtil.treeToBuffer(buffer, root.getNode(), 0, false, true, true, true); } buffer.append('\n'); } LogMessageEx.error(LOG, messageBuffer.toString(), buffer.toString()); }
@NotNull public FormattingModel createModel(final PsiElement element, final CodeStyleSettings settings) { final PsiFile psiFile = element.getContainingFile(); final FormattingDocumentModelImpl documentModel = FormattingDocumentModelImpl.createOn(psiFile); return new XmlFormattingModel(psiFile, new XmlBlock(SourceTreeToPsiMap.psiElementToTree(psiFile), null, null, new HtmlPolicy(settings, documentModel), null, null, false), documentModel); }
@NotNull public FormattingModel createModel(final PsiElement element, final CodeStyleSettings settings) { final ASTNode root = TreeUtil.getFileElement((TreeElement)SourceTreeToPsiMap.psiElementToTree(element)); final FormattingDocumentModelImpl documentModel = FormattingDocumentModelImpl.createOn(element.getContainingFile()); return new XmlFormattingModel(element.getContainingFile(), new XmlBlock(root, null, null, new XmlPolicy(settings, documentModel), null, null, false), documentModel); }
@NotNull @Override public FormattingModel createModel(PsiElement element, CodeStyleSettings settings) { final PsiFile file = element.getContainingFile(); FormattingDocumentModelImpl model = FormattingDocumentModelImpl.createOn(element.getContainingFile()); Block rootBlock = new CSharpFormattingBlock(file.getNode(), null, null, settings); return new PsiBasedFormattingModel(file, rootBlock, model); }
@NotNull @Override public FormattingModel createModel(PsiElement element, CodeStyleSettings codeStyleSettings) { final PsiFile file = element.getContainingFile(); FormattingDocumentModelImpl model = FormattingDocumentModelImpl.createOn(element.getContainingFile()); Block rootBlock = new CssFormattingBlock(element.getNode(), null, null); return new PsiBasedFormattingModel(file, rootBlock, model); }
@Override @NotNull @RequiredReadAction public FormattingModel createModel(final PsiElement element, final CodeStyleSettings settings) { final FileElement fileElement = TreeUtil.getFileElement((TreeElement) SourceTreeToPsiMap.psiElementToTree(element)); LOG.assertTrue(fileElement != null, "File element should not be null for " + element); CommonCodeStyleSettings commonSettings = settings.getCommonSettings(JavaLanguage.INSTANCE); JavaCodeStyleSettings customJavaSettings = settings.getCustomSettings(JavaCodeStyleSettings.class); Block block = AbstractJavaBlock.newJavaBlock(fileElement, commonSettings, customJavaSettings); FormattingDocumentModelImpl model = FormattingDocumentModelImpl.createOn(element.getContainingFile()); return new PsiBasedFormatterModelWithShiftIndentInside(element.getContainingFile(), block, model); }
public PsiBasedFormatterModelWithShiftIndentInside(final PsiFile file, @NotNull final Block rootBlock, final FormattingDocumentModelImpl documentModel) { super(file, rootBlock, documentModel); myProject = file.getProject(); }
AppleScriptFormattingModel(PsiFile file, @NotNull Block rootBlock, FormattingDocumentModelImpl documentModel) { super(file, rootBlock, documentModel); }
public ImportsFormatter(@NotNull CodeStyleSettings settings, @NotNull PsiFile file) { myPostProcessor = new PostFormatProcessorHelper(settings); myDocumentModel = FormattingDocumentModelImpl.createOn(file); myIndentOptions = settings.getIndentOptionsByFile(file); }
@Override public FormattingModel createFormattingModelForPsiFile(final PsiFile file, @NotNull final Block rootBlock, final CodeStyleSettings settings) { return new PsiBasedFormattingModel(file, rootBlock, FormattingDocumentModelImpl.createOn(file)); }
public static void assertInvalidRanges(final int startOffset, final int newEndOffset, FormattingDocumentModel model, String message) { @NonNls final StringBuilder buffer = new StringBuilder(); buffer.append("Invalid formatting blocks:").append(message).append("\n"); buffer.append("Start offset:"); buffer.append(startOffset); buffer.append(" end offset:"); buffer.append(newEndOffset); buffer.append("\n"); int minOffset = Math.max(Math.min(startOffset, newEndOffset) - 20, 0); int maxOffset = Math.min(Math.max(startOffset, newEndOffset) + 20, model.getTextLength()); buffer.append("Affected text fragment:[").append(minOffset).append(",").append(maxOffset).append("] - '") .append(model.getText(new TextRange(minOffset, maxOffset))).append("'\n"); final StringBuilder messageBuffer = new StringBuilder(); messageBuffer.append("Invalid ranges during formatting"); if (model instanceof FormattingDocumentModelImpl) { messageBuffer.append(" in ").append(((FormattingDocumentModelImpl)model).getFile().getLanguage()); } buffer.append("File text:(").append(model.getTextLength()).append(")\n'"); buffer.append(model.getText(new TextRange(0, model.getTextLength())).toString()); buffer.append("'\n"); buffer.append("model (").append(model.getClass()).append("): ").append(model); Throwable currentThrowable = new Throwable(); if (model instanceof FormattingDocumentModelImpl) { final FormattingDocumentModelImpl modelImpl = (FormattingDocumentModelImpl)model; buffer.append("Psi Tree:\n"); final PsiFile file = modelImpl.getFile(); final List<PsiFile> roots = file.getViewProvider().getAllFiles(); for (PsiFile root : roots) { buffer.append("Root "); DebugUtil.treeToBuffer(buffer, root.getNode(), 0, false, true, true, true); } buffer.append('\n'); currentThrowable = makeLanguageStackTrace(currentThrowable, file); } LogMessageEx.error(LOG, messageBuffer.toString(), currentThrowable, buffer.toString()); }
protected XmlBlock createBlock(CodeStyleSettings settings, ASTNode root, FormattingDocumentModelImpl documentModel) { return new XmlBlock(root, null, null, new XmlPolicy(settings, documentModel), null, null, false); }
public XmlFormattingModel(final PsiFile file, final Block rootBlock, final FormattingDocumentModelImpl documentModel) { super(file, rootBlock, documentModel); myProject = file.getProject(); }
GroovyFormattingModel(PsiFile file, @NotNull Block rootBlock, FormattingDocumentModelImpl documentModel) { super(file, rootBlock, documentModel); }
public ImportsFormatter(@NotNull CodeStyleSettings settings, @NotNull PsiFile file) { myPostProcessor = new PostFormatProcessorHelper(settings); myDocumentModel = FormattingDocumentModelImpl.createOn(file); myIndentOptions = settings.getIndentOptions(file.getFileType()); }
@Override public FormattingModel createFormattingModelForPsiFile(final PsiFile file, @Nonnull final Block rootBlock, final CodeStyleSettings settings) { return new PsiBasedFormattingModel(file, rootBlock, FormattingDocumentModelImpl.createOn(file)); }
public void assertInvalidRanges(final int startOffset, final int newEndOffset, FormattingDocumentModel model, String message) { final StringBuilder buffer = new StringBuilder(); buffer.append("Invalid formatting blocks:").append(message).append("\n"); buffer.append("Start offset:"); buffer.append(startOffset); buffer.append(" end offset:"); buffer.append(newEndOffset); buffer.append("\n"); int minOffset = Math.max(Math.min(startOffset, newEndOffset) - 20, 0); int maxOffset = Math.min(Math.max(startOffset, newEndOffset) + 20, model.getTextLength()); buffer.append("Affected text fragment:[").append(minOffset).append(",").append(maxOffset).append("] - '") .append(model.getText(new TextRange(minOffset, maxOffset))).append("'\n"); final StringBuilder messageBuffer = new StringBuilder(); messageBuffer.append("Invalid ranges during formatting"); if (model instanceof FormattingDocumentModelImpl) { messageBuffer.append(" in ").append(((FormattingDocumentModelImpl)model).getFile().getLanguage()); } buffer.append("File text:(").append(model.getTextLength()).append(")\n'"); buffer.append(model.getText(new TextRange(0, model.getTextLength())).toString()); buffer.append("'\n"); buffer.append("model (").append(model.getClass()).append("): ").append(model); Throwable currentThrowable = new Throwable(); if (model instanceof FormattingDocumentModelImpl) { final FormattingDocumentModelImpl modelImpl = (FormattingDocumentModelImpl)model; buffer.append("Psi Tree:\n"); final PsiFile file = modelImpl.getFile(); final List<PsiFile> roots = file.getViewProvider().getAllFiles(); for (PsiFile root : roots) { buffer.append("Root "); DebugUtil.treeToBuffer(buffer, root.getNode(), 0, false, true, true, true); } buffer.append('\n'); currentThrowable = makeLanguageStackTrace(currentThrowable, file); } LogMessageEx.error(LOG, messageBuffer.toString(), currentThrowable, buffer.toString()); }
/** * Allows to check if <code>'myInitial'</code> property value stands for continuous white space text. * <p/> * The text is considered to be continuous <code>'white space'</code> at following cases: * <ul> * <li><code>'myInitial'</code> is empty string or string that contains white spaces only;</li> * <li><code>'myInitial'</code> is a <code>CDATA</code> string which content is empty or consists from white spaces only;</li> * <li><code>'myInitial'</code> string belongs to the same {@link PsiWhiteSpace} element;</li> * </ul> * * @param model formatting model that is used to provide access to the <code>PSI API</code> if necessary * @return <code>true</code> if <code>'myInitial'</code> property value stands for white space; * <code>false</code> otherwise */ private boolean coveredByBlock(final FormattingDocumentModel model) { if (myInitial == null) return true; if (model.containsWhiteSpaceSymbolsOnly(myStart, myEnd)) return true; if (!(model instanceof FormattingDocumentModelImpl)) return false; PsiFile psiFile = ((FormattingDocumentModelImpl)model).getFile(); if (psiFile == null) return false; PsiElement start = psiFile.findElementAt(myStart); PsiElement end = psiFile.findElementAt(myEnd-1); return start == end && start instanceof PsiWhiteSpace; // there maybe non-white text inside CDATA-encoded injected elements }
/** * Allows to check if {@code 'myInitial'} property value stands for continuous white space text. * <p/> * The text is considered to be continuous {@code 'white space'} at following cases: * <ul> * <li>{@code 'myInitial'} is empty string or string that contains white spaces only;</li> * <li>{@code 'myInitial'} is a {@code CDATA} string which content is empty or consists from white spaces only;</li> * <li>{@code 'myInitial'} string belongs to the same {@link PsiWhiteSpace} element;</li> * </ul> * * @param model formatting model that is used to provide access to the {@code PSI API} if necessary * @return {@code true} if {@code 'myInitial'} property value stands for white space; * {@code false} otherwise */ private boolean coveredByBlock(final FormattingDocumentModel model) { if (myInitial == null) return true; if (model.containsWhiteSpaceSymbolsOnly(myStart, myEnd)) return true; if (!(model instanceof FormattingDocumentModelImpl)) return false; PsiFile psiFile = ((FormattingDocumentModelImpl)model).getFile(); if (psiFile == null) return false; PsiElement start = psiFile.findElementAt(myStart); PsiElement end = psiFile.findElementAt(myEnd-1); return start == end && start instanceof PsiWhiteSpace; // there maybe non-white text inside CDATA-encoded injected elements }