下面列出了org.eclipse.jdt.core.dom.Statement#getStartPosition ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static String getLabel(Statement node, IDocument document, int minLineNumber) {
try {
int offset = node.getStartPosition();
if (minLineNumber > 0) {
int startLine = document.getLineOfOffset(offset);
int endLine = document.getLineOfOffset(offset + node.getLength());
if (endLine - startLine <= minLineNumber) {
return "";
}
}
IRegion first = document.getLineInformationOfOffset(offset);
return " // --> " + document.get(first.getOffset(), first.getLength()).trim();
} catch (BadLocationException e1) {
return "";
}
}
public EndStatementCodeMining(Statement node, ITextEditor textEditor, ITextViewer viewer, int minLineNumber,
ICodeMiningProvider provider) {
super(new Position(node.getStartPosition() + node.getLength(), 1), provider, e -> {
textEditor.selectAndReveal(node.getStartPosition(), 0);
});
String label = getLabel(node, viewer.getDocument(), minLineNumber);
super.setLabel(label);
}
private static int getIndex(int offset, List<Statement> statements) {
for (int i = 0; i < statements.size(); i++) {
Statement s = statements.get(i);
if (offset <= s.getStartPosition()) {
return i;
}
if (offset < s.getStartPosition() + s.getLength()) {
return -1;
}
}
return statements.size();
}
protected SwitchData createSwitchData(SwitchStatement node) {
SwitchData result = new SwitchData();
List<Statement> statements = node.statements();
if (statements.isEmpty()) {
return result;
}
int start = -1, end = -1;
GenericSequentialFlowInfo info = null;
for (Iterator<Statement> iter = statements.iterator(); iter.hasNext();) {
Statement statement = iter.next();
if (statement instanceof SwitchCase) {
SwitchCase switchCase = (SwitchCase) statement;
if (switchCase.isDefault()) {
result.setHasDefaultCase();
}
if (info == null) {
info = createSequential();
start = statement.getStartPosition();
} else {
if (info.isReturn() || info.isPartialReturn() || info.branches()) {
result.add(new Region(start, end - start + 1), info);
info = createSequential();
start = statement.getStartPosition();
}
}
} else {
info.merge(getFlowInfo(statement), fFlowContext);
}
end = statement.getStartPosition() + statement.getLength() - 1;
}
result.add(new Region(start, end - start + 1), info);
return result;
}
protected SwitchData createSwitchData(SwitchStatement node) {
SwitchData result= new SwitchData();
List<Statement> statements= node.statements();
if (statements.isEmpty())
return result;
int start= -1, end= -1;
GenericSequentialFlowInfo info= null;
for (Iterator<Statement> iter= statements.iterator(); iter.hasNext(); ) {
Statement statement= iter.next();
if (statement instanceof SwitchCase) {
SwitchCase switchCase= (SwitchCase)statement;
if (switchCase.isDefault()) {
result.setHasDefaultCase();
}
if (info == null) {
info= createSequential();
start= statement.getStartPosition();
} else {
if (info.isReturn() || info.isPartialReturn() || info.branches()) {
result.add(new Region(start, end - start + 1), info);
info= createSequential();
start= statement.getStartPosition();
}
}
} else {
info.merge(getFlowInfo(statement), fFlowContext);
}
end= statement.getStartPosition() + statement.getLength() - 1;
}
result.add(new Region(start, end - start + 1), info);
return result;
}
private static int getIndex(int offset, List<Statement> statements) {
for (int i= 0; i < statements.size(); i++) {
Statement s= statements.get(i);
if (offset <= s.getStartPosition()) {
return i;
}
if (offset < s.getStartPosition() + s.getLength()) {
return -1;
}
}
return statements.size();
}
private boolean cloneFragmentContainsPDGNode(List<ASTNode> cloneFragmentNodes, PDGNode pdgNode) {
Statement pdgStatement = pdgNode.getASTStatement();
int start = pdgStatement.getStartPosition();
int cloneFragmentStart = cloneFragmentNodes.get(0).getStartPosition();
int cloneFragmentLastNodeStart = cloneFragmentNodes.get(cloneFragmentNodes.size()-1).getStartPosition();
int cloneFragmentEnd = cloneFragmentLastNodeStart + cloneFragmentNodes.get(cloneFragmentNodes.size()-1).getLength();
if (start >= cloneFragmentStart && start <= cloneFragmentEnd)
return true;
else
return false;
}
private boolean nodeExistsInsideTypeCheckCodeFragment(ASTNode node) {
Statement statement = typeCheckElimination.getTypeCheckCodeFragment();
int startPosition = statement.getStartPosition();
int endPosition = startPosition + statement.getLength();
if(node.getStartPosition() >= startPosition && node.getStartPosition() <= endPosition)
return true;
else
return false;
}