/*
* #%~
* The Overture Abstract Syntax Tree
* %%
* Copyright (C) 2008 - 2014 Overture
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #~%
*/
package org.overture.ast.util.definitions;
import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import org.overture.ast.definitions.ABusClassDefinition;
import org.overture.ast.definitions.ACpuClassDefinition;
import org.overture.ast.definitions.SClassDefinition;
/**
* A class for holding a list of ClassDefinitions.
*/
public class ClassList extends Vector<SClassDefinition>
{
private static final long serialVersionUID = 1L;
protected static Map<String, SClassDefinition> map = new HashMap<String, SClassDefinition>();
public ClassList()
{
super();
}
public ClassList(SClassDefinition definition)
{
add(definition);
}
@Override
public boolean add(SClassDefinition cdef)
{
map.put(cdef.getName().getName(), cdef);
return super.add(cdef);
}
@Override
public boolean addAll(Collection<? extends SClassDefinition> clist)
{
for (SClassDefinition cls : clist)
{
add(cls);
}
return true;
}
public void remap()
{
map.clear();
for (SClassDefinition d : this)
{
map.put(d.getName().getName(), d);
}
}
public Set<File> getSourceFiles()
{
Set<File> files = new HashSet<File>();
for (SClassDefinition def : this)
{
if (!(def instanceof ACpuClassDefinition || def instanceof ABusClassDefinition))
{
files.add(def.getLocation().getFile());
}
}
return files;
}
// public void implicitDefinitions(Environment env)
// {
// for (SClassDefinition d: this)
// {
// d.implicitDefinitions(env);
// }
// }
// public void setLoaded()
// {
// for (SClassDefinition d: this)
// {
// d.typechecked = true;
// }
// }
// public int notLoaded()
// {
// int count = 0;
//
// for (SClassDefinition d: this)
// {
// if (!d.typechecked) count++;
// }
//
// return count;
// }
// public void unusedCheck()
// {
// for (SClassDefinition d: this)
// {
// d.unusedCheck();
// }
// }
@Override
public String toString()
{
StringBuilder sb = new StringBuilder();
for (SClassDefinition c : this)
{
sb.append(c.toString());
sb.append("\n");
}
return sb.toString();
}
// public ProofObligationList getProofObligations()
// {
// ProofObligationList obligations = new ProofObligationList();
//
// for (SClassDefinition c: this)
// {
// obligations.addAll(c.getProofObligations(new POContextStack()));
// }
//
// obligations.trivialCheck();
// return obligations;
// }
}