package org.monkey.comparator; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; public abstract class Constants { public static int MAX_INT; public static int MIN_INT; public static boolean ENABLE_VALUE_CLASSES; public static int LINE_NUMBER_DIFFERENCE_THRESHOLD; /* Features' scores */ public static double GENERAL_PROPERTIES_FEATURE_SCORE; public static double STACK_TRACE_FEATURE_SCORE; /* Weights for feature: Bug General Properties */ public static double BUG_CATEGORY_WEIGHT; public static double LINE_NUMBER_WEIGHT; public static double BUG_FUNCTION_NAME_WEIGHT; public static double FILE_NAME_WEIGHT; /* Weights for feature: Stack-Trace */ public static double FUNCTION_SEMANTICS_WEIGHT; // Weight of all function semantics in the stack-trace (function name, file name, line number) public static double EXPRESSIONS_WEIGHT; // Weight of all expressions in the stack-trace public static double FUNCTION_NAME_WEIGHT; // Within the function semantics public static double FUNCTION_LINE_WEIGHT; public static double FUNCTION_FILE_NAME; public static double EXPRESSION_SYTNAX_WEIGHT; // Within the expressions of the function public static double EXPRESSION_VALUE_WEIGHT; public static void setUpConstants(String propertiesFilePath) { Properties properties = new Properties(); try { properties.load(new FileInputStream(propertiesFilePath)); MAX_INT = Integer.parseInt(properties.getProperty("MAX_INT")); MIN_INT = Integer.parseInt(properties.getProperty("MIN_INT")); ENABLE_VALUE_CLASSES = Boolean.parseBoolean(properties.getProperty("ENABLE_VALUE_CLASSES")); LINE_NUMBER_DIFFERENCE_THRESHOLD = Integer.parseInt(properties.getProperty("LINE_NUMBER_DIFFERENCE_THRESHOLD")); GENERAL_PROPERTIES_FEATURE_SCORE = Double.parseDouble(properties.getProperty("GENERAL_PROPERTIES_FEATURE_SCORE")); STACK_TRACE_FEATURE_SCORE = Double.parseDouble(properties.getProperty("STACK_TRACE_FEATURE_SCORE")); BUG_CATEGORY_WEIGHT = Double.parseDouble(properties.getProperty("BUG_CATEGORY_WEIGHT")); LINE_NUMBER_WEIGHT = Double.parseDouble(properties.getProperty("LINE_NUMBER_WEIGHT")); BUG_FUNCTION_NAME_WEIGHT = Double.parseDouble(properties.getProperty("BUG_FUNCTION_NAME_WEIGHT")); FILE_NAME_WEIGHT = Double.parseDouble(properties.getProperty("FILE_NAME_WEIGHT")); FUNCTION_SEMANTICS_WEIGHT = Double.parseDouble(properties.getProperty("FUNCTION_SEMANTICS_WEIGHT")); EXPRESSIONS_WEIGHT = Double.parseDouble(properties.getProperty("EXPRESSIONS_WEIGHT")); FUNCTION_NAME_WEIGHT = Double.parseDouble(properties.getProperty("FUNCTION_NAME_WEIGHT")); FUNCTION_LINE_WEIGHT = Double.parseDouble(properties.getProperty("FUNCTION_LINE_WEIGHT")); FUNCTION_FILE_NAME = Double.parseDouble(properties.getProperty("FUNCTION_FILE_NAME")); EXPRESSION_SYTNAX_WEIGHT = Double.parseDouble(properties.getProperty("EXPRESSION_SYTNAX_WEIGHT")); EXPRESSION_VALUE_WEIGHT = Double.parseDouble(properties.getProperty("EXPRESSION_VALUE_WEIGHT")); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { System.err.println("Fatal error: unable to read properties. Entomologist will exit now."); e.printStackTrace(); System.exit(1); } } }