use of com.kyj.fx.voeditor.visual.exceptions.ProgramSpecSourceNullException in project Gargoyle by callakrsos.
the class InspectorSourceMeta method doAnalysis.
/**
* 2014. 6. 28. KYJ
*
* @throws InspectSourceErrException
* 브레이스 숫자가 다를경우 발생
* @처리내용 : Brace위치 조정 및
*/
private void doAnalysis() throws Exception {
/* brace 시작부 */
List<BraceDVO> startBraceDVOList;
/* brace 종료부 */
List<BraceDVO> endBraceDVOList;
if (svnCatList != null && !svnCatList.isEmpty()) {
/* 배열의 삭제가 빠르도록 LinkedList로 생성 */
startBraceDVOList = new LinkedList<BraceDVO>();
endBraceDVOList = new LinkedList<BraceDVO>();
Matcher matcher = null;
for (int index = 0; index < svnCatList.size(); index++) {
String txt = svnCatList.get(index);
sb.append(txt).append("\n");
/* if ~ elseif로 가지 않는다. 한 라인내에 브레이스의 시작과 종료부가 같이 있을경우도 있기 때문 */
/* 만약 소스내 문자열이 포함되있는경우는 없애고 작업함 문자열내에 브레이스문이 있을가능성이 있기때문 */
txt = txt.replaceAll(EXCEPT_STING, "");
txt = txt.trim();
/* '//' 로 시작하는 주석부분은 제외 */
if (txt.startsWith("//")) {
continue;
}
// import문일경우 importList에 add
if (txt.startsWith("import ")) {
this.importList.add(txt);
}
/* brace시작부일경우 + 주석부분에 해당하는 브레이스의 경우 제외 */
if (txt.contains(START_BRACE)) {
matcher = startBracePattern.matcher(txt);
boolean result = matcher.find();
while (result) {
startBraceDVOList.add(new BraceDVO(START_BRACE, index));
result = matcher.find();
}
}
/* brace종료부 + 주석부분에 해당하는 브레이스 경우 제외 */
if (txt.contains(END_BRACE)) {
matcher = endBracePattern.matcher(txt);
boolean result = matcher.find();
while (result) {
endBraceDVOList.add(new BraceDVO(END_BRACE, index));
result = matcher.find();
}
}
}
resultDVOList = new LinkedList<BlockDVO>();
/* 배열이 비어있지않고 브레이스의 숫자가 같은경우 진행 */
if (!startBraceDVOList.isEmpty() && !endBraceDVOList.isEmpty() && (startBraceDVOList.size() == endBraceDVOList.size())) {
int startIndex = -1;
int endIndex = -1;
/* 시작브레이스의 끝부분 인덱스부터 시작 */
for (int sbIdx = startBraceDVOList.size() - 1; sbIdx >= 0; sbIdx--) {
startIndex = startBraceDVOList.get(sbIdx).getIndex();
/* 종료브레이스는 처음인덱스부터 시작 */
int endSize = endBraceDVOList.size();
for (int ebIdx = 0; ebIdx < endSize; ebIdx++) {
/**/
endIndex = endBraceDVOList.get(ebIdx).getIndex();
if (startIndex <= endIndex) {
resultDVOList.add(new BlockDVO(startIndex + 1, endIndex + 1));
endBraceDVOList.remove(ebIdx);
endSize = endBraceDVOList.size();
break;
}
}
}
Collections.reverse(resultDVOList);
System.out.println("############");
int seq = 0;
for (BlockDVO b : resultDVOList) {
LOGGER.debug(String.format("seq : %d start : %d end : %d \n", seq++, b.getStartindex(), b.getEndindex()));
}
System.out.println("############");
} else if (startBraceDVOList.isEmpty() && endBraceDVOList.isEmpty()) {
// N/A
} else {
throw new ProgramSpecSourceErrException("Brace Count is Wrong.");
}
} else {
throw new ProgramSpecSourceNullException("Source is null");
}
}
Aggregations