blob: fd5d653d2e981f6cad39d5e41a449b24d06ac10b [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package flex2.linker;
import flex2.compiler.CompilationUnit;
import flex2.compiler.util.MultiName;
import flex2.compiler.util.Name;
import flex2.compiler.util.QName;
import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;
/**
* Represents a CompilationUnit wrapper, which exposes only the
* information used during dependency traversal.
*/
public class CULinkable implements Linkable
{
public CULinkable( CompilationUnit unit )
{
this.unit = unit;
assert unit != null && unit.topLevelDefinitions != null : "Must have missed a forcedToStop() check after the most recent batch()";
defs.addAll( unit.topLevelDefinitions.getStringSet() );
addDeps( prereqs, unit.inheritance );
addDeps( deps, unit.expressions );
addDeps( deps, unit.namespaces );
addDeps( deps, unit.types );
deps.addAll( unit.extraClasses );
deps.addAll( unit.resourceBundles );
}
public String getName()
{
return unit.getSource().getName();
}
public CompilationUnit getUnit()
{
return unit;
}
public long getLastModified()
{
return unit.getSource().getLastModified();
}
public long getSize()
{
return unit.bytes.size();
}
public boolean hasDefinition( String defName )
{
return defs.contains( defName );
}
public Iterator<String> getDefinitions()
{
return defs.iterator();
}
public Iterator<String> getPrerequisites()
{
return prereqs.iterator();
}
public Iterator<String> getDependencies()
{
return deps.iterator();
}
public String toString()
{
return unit.getSource().getName();
}
public void addDep( String val )
{
deps.add( val );
}
public boolean dependsOn( String s )
{
return deps.contains( s ) || prereqs.contains( s );
}
public boolean isNative()
{
return unit.getSource().isInternal();
}
// todo - nuke this
private void addDeps( Set<String> set, Set<Name> nameSet )
{
for (Name name : nameSet)
{
if (name instanceof QName)
{
set.add( name.toString() );
}
}
}
private final Set<String> defs = new HashSet<String>();
private final Set<String> prereqs = new HashSet<String>();
private final Set<String> deps = new HashSet<String>();
private final CompilationUnit unit;
}