org.apache.royale.swc.SWCScript Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of compiler Show documentation
Show all versions of compiler Show documentation
The Apache Royale Compiler
/*
*
* 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 org.apache.royale.swc;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.apache.royale.compiler.common.DependencyType;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.SetMultimap;
/**
* Implementation for {@link ISWCScript} model.
*/
public class SWCScript implements ISWCScript
{
public SWCScript()
{
definitions = new HashSet();
dependencies = HashMultimap.create();
}
private String name;
private long lastModified;
private String signatureChecksum;
private byte[] abcData;
private final Set definitions;
private final SetMultimap dependencies;
@Override
public String getName()
{
return name;
}
@Override
public long getLastModified()
{
return lastModified;
}
@Override
public String getSignatureChecksum()
{
return signatureChecksum;
}
@Override
public void addDefinition(String id)
{
definitions.add(id);
}
@Override
public void addDependency(String id, DependencyType type)
{
dependencies.put(id, type);
removeUnnecessaryDependencies(id);
}
/**
* Removes unnecessary dependencies so that they won't
* produce unnecessary <dep>
tags.
* The presence of certain dependencies makes other unnecessary
* to write out, thereby reducing the size of the SWC catalog.
*/
private void removeUnnecessaryDependencies(String id)
{
Set set = dependencies.get(id);
// INHERITANCE makes SIGNATURE, NAMESPACE, and EXPRESSION unnecessary.
if (set.contains(DependencyType.INHERITANCE))
{
set.remove(DependencyType.SIGNATURE);
set.remove(DependencyType.NAMESPACE);
set.remove(DependencyType.EXPRESSION);
}
// SIGNATURE or NAMESAPCE makes EXPRESSION unnecessary.
else if (set.contains(DependencyType.SIGNATURE) ||
set.contains(DependencyType.NAMESPACE))
{
set.remove(DependencyType.EXPRESSION);
}
}
@Override
public Set getDefinitions()
{
return definitions;
}
@Override
public SetMultimap getDependencies()
{
return dependencies;
}
/**
* @param name the name to set
*/
public void setName(String name)
{
this.name = name;
}
/**
* @param lastModified the lastModified to set
*/
public void setLastModified(long lastModified)
{
this.lastModified = lastModified;
}
/**
* @param signatureChecksum the signatureChecksum to set
*/
public void setSignatureChecksum(String signatureChecksum)
{
this.signatureChecksum = signatureChecksum;
}
@Override
public void setSource(byte[] abcData)
{
assert abcData != null;
this.abcData = abcData;
}
@Override
public byte[] getSource()
{
return abcData;
}
/**
* For debugging only.
*/
@Override
public String toString()
{
StringBuffer sb = new StringBuffer();
sb.append("name: ");
sb.append(getName());
sb.append('\n');
sb.append("definitions:\n");
String[] defs = getDefinitions().toArray(new String[0]);
Arrays.sort(defs);
for (String def : defs)
{
sb.append(def);
sb.append('\n');
}
return sb.toString();
}
}