blob: 042bb81e084842f9eadc6dd388a83940b108cef1 [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.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);
}
}