/*
* Copyright 2012 Phil Pratt-Szeliga and other contributors
* http://chirrup.org/
*
* See the file LICENSE for copying permission.
*/
package org.trifort.rootbeer.deadmethods;
import java.util.ArrayList;
import java.util.List;
public class BlockParser {
public static final int TYPE_FREE = 0;
public static final int TYPE_DEFINE = 1;
public static final int TYPE_DECLARE = 2;
public static final int TYPE_METHOD = 3;
public List<Block> parse(List<Segment> segments) {
List<Block> ret = new ArrayList<Block>();
for(int i = 0; i < segments.size(); ++i){
Segment segment = segments.get(i);
if(segment.getType() == SegmentParser.TYPE_DEFINE){
ret.add(new Block(segment, TYPE_DEFINE));
} else if(segment.getType() == SegmentParser.TYPE_FREE){
String str = segment.getString().trim();
if(str.isEmpty()){
continue;
}
char last_char = str.charAt(str.length() - 1);
if(last_char == ';'){
ret.add(new Block(segment, TYPE_DECLARE));
} else {
List<Segment> block_segments = new ArrayList<Segment>();
block_segments.add(segment);
int brace_count = 0;
if(last_char == '{'){
brace_count++;
}
for(int j = i + 1; j < segments.size(); ++j){
Segment curr = segments.get(j);
if(curr.getType() == SegmentParser.TYPE_COMMENT){
continue;
}
block_segments.add(curr);
String str2 = curr.getString().trim();
if(str2.isEmpty()){
continue;
}
char last_char2 = str2.charAt(str2.length() - 1);
if(last_char2 == ';' && brace_count == 0){
ret.add(new Block(block_segments, TYPE_DECLARE));
i = j;
break;
}
if(last_char2 == '{'){
brace_count++;
} else if(last_char2 == '}'){
brace_count--;
if(brace_count == 0){
ret.add(new Block(block_segments, TYPE_METHOD));
i = j;
break;
}
}
}
}
}
}
return ret;
}
}