Class Block
- java.lang.Object
-
- org.benf.cfr.reader.bytecode.analysis.structured.statement.AbstractStructuredStatement
-
- org.benf.cfr.reader.bytecode.analysis.structured.statement.Block
-
- All Implemented Interfaces:
HasByteCodeLoc
,Matcher<StructuredStatement>
,StructuredStatement
,Dumpable
,TypeUsageCollectable
- Direct Known Subclasses:
WildcardMatch.BlockWildcard
public class Block extends AbstractStructuredStatement
TODO : Block implements way more functionality than it should - move into callers.
-
-
Field Summary
Fields Modifier and Type Field Description private BlockIdentifier
blockIdentifier
private java.util.LinkedList<Op04StructuredStatement>
containedStatements
private boolean
indenting
-
Constructor Summary
Constructors Constructor Description Block(java.util.LinkedList<Op04StructuredStatement> containedStatements, boolean indenting)
Block(java.util.LinkedList<Op04StructuredStatement> containedStatements, boolean indenting, BlockIdentifier blockIdentifier)
Block(Op04StructuredStatement statement)
-
Method Summary
-
Methods inherited from class org.benf.cfr.reader.bytecode.analysis.structured.statement.AbstractStructuredStatement
addLoc, canDefine, canFall, claimBlock, fallsNopToNext, findCreatedHere, getContainer, getLoc, informBlockHeirachy, isProperlyStructured, setContainer, suggestName, supportsBreak, supportsContinueBreak, toString
-
-
-
-
Field Detail
-
containedStatements
private java.util.LinkedList<Op04StructuredStatement> containedStatements
-
indenting
private boolean indenting
-
blockIdentifier
private BlockIdentifier blockIdentifier
-
-
Constructor Detail
-
Block
public Block(Op04StructuredStatement statement)
-
Block
public Block(java.util.LinkedList<Op04StructuredStatement> containedStatements, boolean indenting)
-
Block
public Block(java.util.LinkedList<Op04StructuredStatement> containedStatements, boolean indenting, BlockIdentifier blockIdentifier)
-
-
Method Detail
-
getCombinedLoc
public BytecodeLoc getCombinedLoc()
-
flattenOthersIn
public void flattenOthersIn()
-
addStatement
public void addStatement(Op04StructuredStatement stm)
-
getEmptyBlock
static Block getEmptyBlock(boolean indenting)
-
getBlockFor
public static Block getBlockFor(boolean indenting, StructuredStatement... statements)
-
collectTypeUsages
public void collectTypeUsages(TypeUsageCollector collector)
-
removeLastContinue
public boolean removeLastContinue(BlockIdentifier block)
-
removeLastNVReturn
public void removeLastNVReturn()
-
removeLastGoto
public void removeLastGoto()
-
getLast
public Op04StructuredStatement getLast()
-
removeLastEndWhile
public UnstructuredWhile removeLastEndWhile()
-
getOneStatementIfPresent
public Pair<java.lang.Boolean,Op04StructuredStatement> getOneStatementIfPresent()
-
getFilteredBlockStatements
public java.util.List<Op04StructuredStatement> getFilteredBlockStatements()
-
getMaybeJustOneStatement
public Optional<Op04StructuredStatement> getMaybeJustOneStatement()
-
inlineable
public boolean inlineable()
- Specified by:
inlineable
in interfaceStructuredStatement
- Overrides:
inlineable
in classAbstractStructuredStatement
-
getInline
public Op04StructuredStatement getInline()
- Specified by:
getInline
in interfaceStructuredStatement
- Overrides:
getInline
in classAbstractStructuredStatement
-
combineInlineable
public void combineInlineable()
-
replaceInlineSource
private void replaceInlineSource(Op04StructuredStatement oldS, Op04StructuredStatement newS)
-
extractLabelledBlocks
public void extractLabelledBlocks()
-
combineTryCatch
public void combineTryCatch()
-
isScopeBlock
public boolean isScopeBlock()
- Specified by:
isScopeBlock
in interfaceStructuredStatement
- Overrides:
isScopeBlock
in classAbstractStructuredStatement
-
transformStructuredChildren
public void transformStructuredChildren(StructuredStatementTransformer transformer, StructuredScope scope)
-
transformStructuredChildrenInReverse
public void transformStructuredChildrenInReverse(StructuredStatementTransformer transformer, StructuredScope scope)
- Specified by:
transformStructuredChildrenInReverse
in interfaceStructuredStatement
- Overrides:
transformStructuredChildrenInReverse
in classAbstractStructuredStatement
-
getNextAfter
public java.util.Set<Op04StructuredStatement> getNextAfter(int x, boolean skipComments)
-
statementIsLast
public boolean statementIsLast(Op04StructuredStatement needle)
-
getBreakableBlockOrNull
public BlockIdentifier getBreakableBlockOrNull()
- Specified by:
getBreakableBlockOrNull
in interfaceStructuredStatement
- Overrides:
getBreakableBlockOrNull
in classAbstractStructuredStatement
-
isRecursivelyStructured
public boolean isRecursivelyStructured()
- Specified by:
isRecursivelyStructured
in interfaceStructuredStatement
- Overrides:
isRecursivelyStructured
in classAbstractStructuredStatement
-
getBlockStatements
public java.util.List<Op04StructuredStatement> getBlockStatements()
-
replaceBlockStatements
public void replaceBlockStatements(java.util.Collection<Op04StructuredStatement> statements)
-
linearizeInto
public void linearizeInto(java.util.List<StructuredStatement> out)
-
traceLocalVariableScope
public void traceLocalVariableScope(LValueScopeDiscoverer scopeDiscoverer)
-
markCreator
public void markCreator(LValue scopedEntity, StatementContainer<StructuredStatement> hint)
- Specified by:
markCreator
in interfaceStructuredStatement
- Overrides:
markCreator
in classAbstractStructuredStatement
-
alwaysDefines
public boolean alwaysDefines(LValue scopedEntity)
- Specified by:
alwaysDefines
in interfaceStructuredStatement
- Overrides:
alwaysDefines
in classAbstractStructuredStatement
-
canFoldUp
private boolean canFoldUp()
-
isIndenting
public boolean isIndenting()
-
setIndenting
public void setIndenting(boolean indenting)
-
match
public boolean match(MatchIterator<StructuredStatement> matchIterator, MatchResultCollector matchResultCollector)
- Specified by:
match
in interfaceMatcher<StructuredStatement>
- Overrides:
match
in classAbstractStructuredStatement
-
rewriteExpressions
public void rewriteExpressions(ExpressionRewriter expressionRewriter)
-
isEffectivelyNOP
public boolean isEffectivelyNOP()
- Specified by:
isEffectivelyNOP
in interfaceStructuredStatement
- Overrides:
isEffectivelyNOP
in classAbstractStructuredStatement
-
-