blob: 8a1a105c46352f111ec65ed43204c625cc4b23b6 [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 org.apache.royale.compiler.internal.units;
import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.royale.compiler.common.IDefinitionPriority;
import org.apache.royale.compiler.common.IFileSpecificationGetter;
import org.apache.royale.compiler.definitions.IDefinition;
import org.apache.royale.compiler.internal.projects.ASProject;
import org.apache.royale.compiler.problems.ICompilerProblem;
import org.apache.royale.compiler.projects.ICompilerProject;
import org.apache.royale.compiler.targets.ITarget.TargetType;
import org.apache.royale.compiler.units.ICompilationUnit;
import org.apache.royale.compiler.units.IInvisibleCompilationUnit;
import org.apache.royale.compiler.units.requests.IABCBytesRequestResult;
import org.apache.royale.compiler.units.requests.IFileScopeRequestResult;
import org.apache.royale.compiler.units.requests.IOutgoingDependenciesRequestResult;
import org.apache.royale.compiler.units.requests.IRequest;
import org.apache.royale.compiler.units.requests.ISWFTagsRequestResult;
import org.apache.royale.compiler.units.requests.ISyntaxTreeRequestResult;
/**
* Implementation of {@link IInvisibleCompilationUnit}.
*/
public class InvisibleCompilationUnit implements IInvisibleCompilationUnit
{
/**
* Constructor.
*
* @param delegate {@link CompilationUnitBase} that this class will delegate
* to.
* @param fileSpecGetter {@link IFileSpecificationGetter} that should be
* used to open files.
*/
public InvisibleCompilationUnit(CompilationUnitBase delegate, IFileSpecificationGetter fileSpecGetter)
{
assert delegate != null;
this.delegate = delegate;
delegate.setFileSpecificationGetter(fileSpecGetter);
delegate.makeInvisible(this);
}
private final CompilationUnitBase delegate;
@Override
public ICompilerProject getProject()
{
assert delegate.isInvisible();
return delegate.getProject();
}
@Override
public IRequest<ISyntaxTreeRequestResult, ICompilationUnit> getSyntaxTreeRequest()
{
assert delegate.isInvisible();
return delegate.getSyntaxTreeRequest();
}
@Override
public IRequest<IFileScopeRequestResult, ICompilationUnit> getFileScopeRequest()
{
assert delegate.isInvisible();
return delegate.getFileScopeRequest();
}
@Override
public IRequest<IOutgoingDependenciesRequestResult, ICompilationUnit> getOutgoingDependenciesRequest()
{
assert delegate.isInvisible();
return delegate.getOutgoingDependenciesRequest();
}
@Override
public IRequest<IABCBytesRequestResult, ICompilationUnit> getABCBytesRequest()
{
assert delegate.isInvisible();
return delegate.getABCBytesRequest();
}
@Override
public IRequest<ISWFTagsRequestResult, ICompilationUnit> getSWFTagsRequest()
{
assert delegate.isInvisible();
return delegate.getSWFTagsRequest();
}
@Override
public List<String> getShortNames() throws InterruptedException
{
assert delegate.isInvisible();
return delegate.getShortNames();
}
@Override
public List<String> getQualifiedNames() throws InterruptedException
{
assert delegate.isInvisible();
return delegate.getQualifiedNames();
}
@Override
public String getName()
{
assert delegate.isInvisible();
return delegate.getName();
}
@Override
public String getAbsoluteFilename()
{
assert delegate.isInvisible();
return delegate.getAbsoluteFilename();
}
@Override
public List<IDefinition> getDefinitionPromises()
{
assert delegate.isInvisible();
return delegate.getDefinitionPromises();
}
@Override
public UnitType getCompilationUnitType()
{
assert delegate.isInvisible();
return delegate.getCompilationUnitType();
}
@Override
public boolean clean(Map<ICompilerProject, Set<File>> invalidatedSWCFiles, Map<ICompilerProject, Set<ICompilationUnit>> cusToUpdate, boolean clearFileScope)
{
assert delegate.isInvisible();
clean();
return true;
}
@Override
public IDefinitionPriority getDefinitionPriority()
{
assert delegate.isInvisible();
return delegate.getDefinitionPriority();
}
@Override
public void clearProject()
{
assert delegate.isInvisible();
delegate.clearProject();
}
@Override
public synchronized void waitForBuildFinish(Collection<ICompilerProblem> problems, TargetType targetType) throws InterruptedException
{
assert delegate.isInvisible();
delegate.waitForBuildFinish(problems, targetType);
}
@Override
public void startBuildAsync(TargetType targetType)
{
assert delegate.isInvisible();
delegate.startBuildAsync(targetType);
}
public boolean isInvisible()
{
assert delegate.isInvisible();
return true;
}
@Override
public synchronized void getCompilerProblems(Collection<ICompilerProblem> problems) throws InterruptedException
{
assert problems != null : "A valid collection of ICompilerProblems should be passed" ;
startBuildAsync(TargetType.SWF);
waitForBuildFinish(problems, TargetType.SWF);
}
@Override
public synchronized void clean()
{
delegate.clean(null, null, true);
}
@Override
public void remove()
{
((ASProject)getProject()).removeCompilationUnit(delegate);
}
@Override
public Collection<String> getEmbeddedFilenames()
{
assert delegate.isInvisible();
return delegate.getEmbeddedFilenames();
}
/**
* @return The delegate compilation unit for this {@link InvisibleCompilationUnit}
*/
public CompilationUnitBase getDelegate()
{
return delegate;
}
}