private List<FileObfuscationStructure> generateProjectFileObfuscationList () {
		List<FileObfuscationStructure> result = new ArrayList<FileObfuscationStructure>();

		for (File file : projectFiles) {
			if (file.isFile()) {
				String fileExtension = McbcFileUtils.getFilenameExtension(file.getName());

				if (Constants.PHP_EXTENSION_TABLE.contains(fileExtension)) {
					FileObfuscationStructure structure = new FileObfuscationStructure();
					String fileContent = McbcFileUtils.getFileContent(file);

					List<ParsingContext> fileContexts = new ArrayList<ParsingContext>();
					if (!fileExtension.equals(Constants.JAVA_FILE_EXTENSION)) {
						fileContexts = parser.parsePhpContent(fileContent);						
					} else {
						ParsingContext javaScriptParsingContext = 
							new ParsingContext(ParsingContextType.JavaScript, 0, fileContent.length(), fileContent);
						fileContexts.add(javaScriptParsingContext);
					}

					String relativeFileName = file.getAbsolutePath();
					relativeFileName = relativeFileName
							.substring(sourceDir.length());
					structure.setFileName(relativeFileName);
					structure.setFileContent(fileContent);
					structure.setFileContexts(fileContexts);

					List<VariableAppearance> fileVariablesAppearances = handler
							.getVariableAppearances(structure, true);
					/**
					 * It's very important to sort the Appearances patterns
					 * frome the bigger to the smaller. In this order, no
					 * replacement confusion can be done.
					 * 
					 * <b>Example which can create problem:</b> 
					 * 
					 * $i = 0; 
					 * $in = 100; 
					 * $index = 21;
					 * 
					 * The $i pattern must be replaced in last.
					 * 
					 */
					Collections.sort(fileVariablesAppearances);
					structure.addFileVariablesAppearances(fileVariablesAppearances);
					result.add(structure);
				}
			}
		}
		if (handler.mustProceedSecondScan()) {
			for (FileObfuscationStructure structure : result) {
				structure.addFileVariablesAppearances(handler.getVariableAppearances(structure, false));
			}
		}
		return result;
	}