1/*****************************************************************************
    2 * This file is part of the Prolog Development Tool (PDT)
    3 * 
    4 * WWW: http://sewiki.iai.uni-bonn.de/research/pdt/start
    5 * Mail: pdt@lists.iai.uni-bonn.de
    6 * Copyright (C): 2004-2012, CS Dept. III, University of Bonn
    7 * 
    8 * All rights reserved. This program is  made available under the terms
    9 * of the Eclipse Public License v1.0 which accompanies this distribution,
   10 * and is available at http://www.eclipse.org/legal/epl-v10.html
   11 * 
   12 ****************************************************************************/
   13
   14%:- ensure_loaded(source_files).
   15:- ensure_loaded('parse_util').   16:- use_module('analyzer/metapred_finder').   17:- use_module(library(lists)).   18
   19
   20ensure_generated_factbase_for_source_file(File) :-
   21	source_file(File),
   22	exists_file(File),
   23	generate_factbase(File).
   24%	(	fileT_ri(File, _)
   25%	->	true
   26%	;	generate_factbase(File)
   27%	).
   28
   29generate_factbase:-
   30    with_mutex(prolog_factbase,
   31    	(	find_all_loaded_files(ProjectFiles),
   32    		parse_util:generate_facts(ProjectFiles)
   33    	)
   34    ).       
   35
   36
   37generate_factbase(File):-
   38    with_mutex(prolog_factbase,
   39    	(	find_all_loaded_files(Project),
   40    		filter_already_known_files(Project,MissingFiles),
   41    		flatten(MissingFiles,FlatMissingFiles),
   42    		parse_util:update_facts(File,FlatMissingFiles)
   43    	)
   44    ).
   45    	       
   46
   47    
   48find_all_loaded_files(Project):-
   49    current_prolog_flag(home, PrologHome),
   50    findall(
   51    	File,					%the following removes the files from prolog itself - maybe this should be changed back
   52    	(	source_file(File),
   53    		\+(string_concat(PrologHome, _, File))
   54    	), 
   55    	Project
   56    ).	
   57 
   58filter_already_known_files([],[]).
   59filter_already_known_files([File|Tail],[MissingTail]):-
   60    fileT_ri(File,_),
   61  	%format('!!!!Already there: ~w~n',[File]),
   62    !,
   63    filter_already_known_files(Tail,MissingTail).
   64filter_already_known_files([File|Tail],[File|MissingTail]):-
   65    filter_already_known_files(Tail,MissingTail).    
   66    
   67	 
   68 
   69pl_test(Project):-
   70	parse_util:generate_facts(Project).
   71	
   72	
   73pl_test_fix:-	
   74    pl_test(['C:/Data/Git-Data/pdt.git/pdt.runtime.builder/prolog-src'])