code: public static Properties mergeAndSkipExisting(Properties props1, Properties props2) {
          Properties properties = new Properties();
          properties.putAll(props1);
          for (String key : props2.stringPropertyNames()) {
              if (!props1.containsKey(key) && !Strings.isNullOrEmpty(props2.getProperty(key))) {
                  properties.put(key, props2.getProperty(key));
              }
          }
          return properties;
      }
docs: Utility method to merge instructions from {@code props2} into the {@code props1}. The instructions
  from {@code props2} do not override the instructions  from {@code props1} (when both contain the same
  instruction), so instructions from {@code props1} stay unchanged and are contained in the file set of
  instructions.
  <p>
  Notice that entries with empty values from {@code props2} are <strong>not</strong> merged.
  
  @param props1 the first set of instructions
  @param props2 the second set of instructions
  @return the new set of instructions containing the instructions from {@code props2} merged into {@code props1}.