public static String addStepsFromFeatureFile(String featurePath, String stepPath, String... otherStepPaths) {
        // We start by retrieving the two relevant files as Strings
        String featureAsString = FileToolBox.readFile(featurePath);
        String stepAsString = FileToolBox.readFile(stepPath);

        Set<String> stepsFilePaths = new HashSet<String>();
        stepsFilePaths.add(stepPath);
        for (String path : otherStepPaths) {
            stepsFilePaths.add(path);
        }

        // We get the already implemented steps. Note that since we are working on the file
        // from a String, we do not parse Java to see if there is actually a method ; we rely
        // on finding the annotation alone
        Set<String> alreadyImplementedSteps = StepsFileToolBox.getAlreadyImplementedSteps(stepsFilePaths.toArray(new String[0]));
        // Next, we generate a method for each steps found in the feature file
        Map<String, String> stepMethodByStep = FeatureFileToolBox.getStepsMethodsFromFeatureFile(featureAsString);
        // To append to the class in such a way that it remains compilable, we remove
        // the closing curly bracket of the class
        String newStepsFile = StepsFileToolBox.prepareStringForAppend(stepAsString);

        // Then, for each generated method, we try to see if there is not already an implementation
        // in the target steps file
        for (Entry<String, String> entry : stepMethodByStep.entrySet()) {
            if (!alreadyImplementedSteps.contains(entry.getKey())) {
                newStepsFile = newStepsFile.concat(entry.getValue());
                // Do not forget to add it to the list of implemented steps, else doubles may appear
                alreadyImplementedSteps.add(entry.getKey());
            }
        }

        // We replace the curly bracket we removed earlier
        newStepsFile = StepsFileToolBox.addClosingCurlyBracket(newStepsFile);

        return newStepsFile;
    }