###############################################################################
# Copyright (c) 2005, 2007 IBM Corporation and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# SPDX-License-Identifier: EPL-2.0
#

###############################################################################

require 'monitor'

module XoredDebugger
    class SourceManager
        @@instance = nil  
        def SourceManager.instance
            if (@@instance.nil?)
                @@instance = SourceManager.new
            end
            @@instance
        end
        
        def source_for(file) # :nodoc:
            @monitor.synchronize do
	            finder = lambda do
		            if File.exists?(file)
		                if @script_lines[file].nil?
		                    @script_lines[file] = File.readlines(file)
		                end
		                @script_lines[file]
		            end
	            end	      
	            Dir.chdir(File.dirname($0)){finder.call} || finder.call || @script_lines[file]
            end
        end

        def source_reload
            @monitor.synchronize do
                @script_lines.clear
            end
        end

        def line_at(file, line) # :nodoc:
            lines = source_for(file)
            if lines
                line = lines[line-1]
                return "\n" unless line
                return "#{line.gsub(/^\s+/, '').chomp}\n"
            end
            return "\n"
        end

    private
        def initialize() 
            @script_lines = {}
            @monitor = Monitor.new
        end    
    end # class SourceManager
end # module XoredDebugger


    
