From 3b106ed5869be230129501b1cfaef65ae22fae98 Mon Sep 17 00:00:00 2001 From: Kui LIU Date: Fri, 4 Aug 2017 13:42:34 +0200 Subject: [PATCH] Correct the method of scanning java project. --- .../bugLocalization/ProjectScanner.java | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/src/main/java/edu/lu/uni/serval/bugLocalization/ProjectScanner.java b/src/main/java/edu/lu/uni/serval/bugLocalization/ProjectScanner.java index 6ec6317..529b1b1 100644 --- a/src/main/java/edu/lu/uni/serval/bugLocalization/ProjectScanner.java +++ b/src/main/java/edu/lu/uni/serval/bugLocalization/ProjectScanner.java @@ -28,9 +28,21 @@ import edu.lu.uni.serval.utils.FileHelper; */ public class ProjectScanner { - private int maxSize = Integer.parseInt(FileHelper.readFile(Configuration.MAX_TOKEN_VECTORS_SIZE_OF_SOURCE_CODE)); - private int numberOfFiles = 0; - private List allSimpleTrees = new ArrayList<>(); + private int maxSize; + private int numberOfFiles; + private List allSimpleTrees = null; + + private StringBuilder tokensBuilder; + private StringBuilder localizationsBuilder; + private int counter; + + public ProjectScanner() { + maxSize = Integer.parseInt(FileHelper.readFile(Configuration.MAX_TOKEN_VECTORS_SIZE_OF_SOURCE_CODE)); + numberOfFiles = 0; + tokensBuilder = new StringBuilder(); + localizationsBuilder = new StringBuilder(); + counter = 0; + } public void scanJavaProject(File[] projects, String outputLocalizeFile, String outputTokensFile, int limitation) { for (File project : projects) { @@ -41,10 +53,6 @@ public class ProjectScanner { public void scanJavaProject(File javaProject, String outputLocalizeFile, String outputTokensFile, int limitation) { List files = new ArrayList<>(); files.addAll(FileHelper.getAllFiles(javaProject.getPath(), ".java")); - - StringBuilder tokensBuilder = new StringBuilder(); - StringBuilder localizationsBuilder = new StringBuilder(); - int counter = 0; for (File file : files) { if (file.getPath().toLowerCase().contains("test")) { continue; // ignore all test-related java files. @@ -53,28 +61,19 @@ public class ProjectScanner { CUCreator cuCreator = new CUCreator(); CompilationUnit cUnit = cuCreator.createCompilationUnit(file); - getTokenVectorOfAllStatements(tree, cUnit, tokensBuilder, localizationsBuilder, javaProject.getPath(), file.getPath()); - ++ counter; - - if ( counter % limitation == 0) { - numberOfFiles ++; - FileHelper.outputToFile(outputLocalizeFile + "Positions" + numberOfFiles + ".list", localizationsBuilder, true); - FileHelper.outputToFile(outputTokensFile + "Tokens" + numberOfFiles + ".list", tokensBuilder, true); - localizationsBuilder.setLength(0); - tokensBuilder.setLength(0); - } + getTokenVectorOfAllStatements(tree, cUnit, javaProject.getPath(), file.getPath(), outputLocalizeFile, outputTokensFile, limitation); } if (localizationsBuilder.length() > 0) { numberOfFiles ++; - FileHelper.outputToFile(outputLocalizeFile + "Positions" + numberOfFiles + ".list", localizationsBuilder, true); - FileHelper.outputToFile(outputTokensFile + "Tokens" + numberOfFiles + ".list", tokensBuilder, true); + FileHelper.outputToFile(outputLocalizeFile + "Positions_" + numberOfFiles + ".list", localizationsBuilder, true); + FileHelper.outputToFile(outputTokensFile + "Tokens_" + numberOfFiles + ".list", tokensBuilder, true); localizationsBuilder.setLength(0); tokensBuilder.setLength(0); } } - private void getTokenVectorOfAllStatements(ITree tree, CompilationUnit unit, StringBuilder tokensBuilder, StringBuilder localizationsBuilder, String projectName, String filePath) { + private void getTokenVectorOfAllStatements(ITree tree, CompilationUnit unit, String projectName, String filePath, String outputLocalizeFile, String outputTokensFile, int limitation) { String astNodeType = ASTNodeMap.map.get(tree.getType()); //ignore: SwitchCase, SuperConstructorInvocation, ConstructorInvocation if ((astNodeType.endsWith("Statement") && !astNodeType.equals("TypeDeclarationStatement")) || astNodeType.equals("FieldDeclaration")) { @@ -103,6 +102,15 @@ public class ProjectScanner { int lineNum = unit.getLineNumber(position); tokensBuilder.append(tokens).append("\n"); localizationsBuilder.append(projectName + ":" + filePath + "LineNum:" + lineNum + "\n"); //project name: file name: line number + ++ counter; + + if ( counter % limitation == 0) { + numberOfFiles ++; + FileHelper.outputToFile(outputLocalizeFile + "Positions_" + numberOfFiles + ".list", localizationsBuilder, true); + FileHelper.outputToFile(outputTokensFile + "Tokens_" + numberOfFiles + ".list", tokensBuilder, true); + localizationsBuilder.setLength(0); + tokensBuilder.setLength(0); + } } } } else {