org.apache.royale.compiler.internal.scopes.SWCFileScopeProvider 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.compiler.internal.scopes;
import org.apache.royale.compiler.asdoc.IASDocComment;
import org.apache.royale.compiler.definitions.IDocumentableDefinition;
import org.apache.royale.compiler.internal.abc.ABCScopeBuilder;
import org.apache.royale.compiler.internal.projects.ASProject;
import org.apache.royale.compiler.internal.projects.LibraryPathManager;
import org.apache.royale.compiler.internal.units.SWCCompilationUnit;
import org.apache.royale.compiler.projects.ICompilerProject;
import org.apache.royale.compiler.scopes.IFileScopeProvider;
import org.apache.royale.compiler.units.ICompilationUnit;
import org.apache.royale.compiler.workspaces.IWorkspace;
import com.google.common.base.Strings;
/**
* Creates {@code ASFileScope} objects for byte code in SWC library. The result
* is used by {@link ABCScopeBuilder}.
*/
public final class SWCFileScopeProvider implements IFileScopeProvider
{
/**
* This class is able to resolve the source file path of a given QName
* defined in a SWC library, if the source directory is set for that SWC
* library.
*/
public static final class SWCFileScope extends ASFileScope
{
public SWCFileScope(IWorkspace workspace, String filePath)
{
super(workspace, filePath);
}
@Override
public String getContainingSourcePath(final String qName, final ICompilerProject project)
{
assert !Strings.isNullOrEmpty(qName) : "Expected QName.";
assert project != null;
// Only ASProject and its descendents support
// source attachments to SWCs.
if (!(project instanceof ASProject))
return null;
final ASProject flashProject = (ASProject)project;
final String swcFilePath = filePath;
String attachedSourceDirectory = flashProject.getAttachedSourceDirectory(swcFilePath);
if (attachedSourceDirectory == null)
return null;
return LibraryPathManager.getAttachedSourceFilename(attachedSourceDirectory, qName);
}
public IASDocComment getComment(ICompilerProject project, IDocumentableDefinition def)
{
if (!(project instanceof ASProject))
return null;
ASProject flashProject = (ASProject)project;
return flashProject.getASDocBundleDelegate().getComment(def, getContainingPath());
}
@Override
public boolean isSWC()
{
return true;
}
@Override
public boolean setCompilationUnit(ICompilationUnit compilationUnit)
{
assert (compilationUnit == null || compilationUnit instanceof SWCCompilationUnit) : "non SWCCompilationUnit passed to SWCFileScopeProvider";
return false;
}
@Override
public ICompilationUnit getCompilationUnit()
{
return null;
}
}
private static final SWCFileScopeProvider instance = new SWCFileScopeProvider();
/**
* @return Singleton object of this class.
*/
public static SWCFileScopeProvider getInstance()
{
return instance;
}
/**
* Hide constructor for singleton class.
*/
private SWCFileScopeProvider()
{
}
@Override
public ASFileScope createFileScope(IWorkspace workspace, String filePath)
{
return new SWCFileScope(workspace, filePath);
}
}