@NotNull @Override public ChildAttributes getChildAttributes(int newChildIndex) { return myOriginal.getChildAttributes(newChildIndex); }
@Nullable @Override public Spacing getSpacing(@Nullable Block child1, @NotNull Block child2) { assert child1 instanceof PerlInjectedLanguageBlockWrapper; assert child2 instanceof PerlInjectedLanguageBlockWrapper; return myOriginal.getSpacing(child1, child2); }
@Nullable @Override public Wrap getWrap() { return myOriginal.getWrap(); }
@Nullable @Override public Alignment getAlignment() { Indent indent = myOriginal.getIndent(); return isAbsoluteNoneIndent(indent) ? myBuilder.getAbsoluteIndentAlignment() : myOriginal.getAlignment(); }
public PerlInjectedLanguageBlockWrapper(@NotNull Block original, @NotNull PerlInjectedLanguageBlocksBuilder builder) { myOriginal = original; myBuilder = builder; myRangeProvider = AtomicNullableLazyValue.createValue(() -> myBuilder.getRangeInHostDocument(myOriginal.getTextRange())); myChildBlocksProvider = AtomicNotNullLazyValue.createValue(() -> myOriginal.getSubBlocks().stream() .map(block -> new PerlInjectedLanguageBlockWrapper(block, myBuilder)) .filter(wrapper -> wrapper.getTextRangeInner() != null) .collect(Collectors.toList())); }
@Nullable @Override public Indent getIndent() { Indent indent = myOriginal.getIndent(); return isAbsoluteNoneIndent(indent) ? Indent.getNoneIndent() : indent; }
@Override public boolean isLeaf() { return myOriginal.isLeaf(); }
@Override public boolean isIncomplete() { return myOriginal.isIncomplete(); }
@Nullable public Alignment getChildAlignment(@NotNull PerlAstBlock block, int newChildIndex) { ASTNode node = block.getNode(); IElementType elementType = PsiUtilCore.getElementType(node); if (PerlFormattingContext.COMMA_LIKE_SEQUENCES.contains(elementType)) { return null; } // this is default algorythm from AbstractBlock#getFirstChildAlignment() List<Block> subBlocks = block.getSubBlocks(); for (final Block subBlock : subBlocks) { if (subBlock instanceof ASTBlock && PsiUtilCore.getElementType(((ASTBlock)subBlock).getNode()) == PerlElementTypes.COMMENT_LINE) { continue; } Alignment alignment = subBlock.getAlignment(); if (alignment != null) { return alignment; } } return null; }
public PerlSyntheticBlock(@NotNull PerlAstBlock realBlock, @NotNull List<Block> subBlocks, @Nullable Wrap wrap, @Nullable Alignment alignment, @NotNull PerlFormattingContext context) { if (subBlocks.isEmpty()) { throw new IllegalArgumentException("Subblocks should not be empty"); } mySubBlocks = ContainerUtil.immutableList(new ArrayList<>(subBlocks)); myRealBlock = realBlock; myWrap = wrap; myAlignment = alignment; myContext = context; myIndent = getFirstRealBlock().getIndent(); mySubBlocks.stream() .filter(block -> block instanceof PerlAstBlock && block.getIndent() != Indent.getAbsoluteNoneIndent()) .forEach(block -> ((PerlAstBlock)block) .setIndent(Indent.getContinuationWithoutFirstIndent())); }