You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@royale.apache.org by Harbs <ha...@gmail.com> on 2018/03/18 08:16:34 UTC

Re: [royale-compiler] branch develop updated: handle main MXML file in packages

This commit appears to break things.

I’m getting the following error in Core tests:

https://paste.apache.org/Bmsg <https://paste.apache.org/Bmsg>

Harbs

> On Mar 17, 2018, at 5:16 PM, aharui@apache.org wrote:
> 
> This is an automated email from the ASF dual-hosted git repository.
> 
> aharui pushed a commit to branch develop
> in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
> 
> 
> The following commit(s) were added to refs/heads/develop by this push:
>     new ac500b7  handle main MXML file in packages
> ac500b7 is described below
> 
> commit ac500b75530fc9094768824e4339fbd7df95e7ed
> Author: Alex Harui <ah...@apache.org>
> AuthorDate: Sat Mar 17 08:16:12 2018 -0700
> 
>    handle main MXML file in packages
> ---
> .../internal/codegen/js/jsc/JSCPublisher.java      | 10 ++--
> .../internal/codegen/js/node/NodePublisher.java    | 14 ++---
> .../codegen/mxml/royale/MXMLRoyalePublisher.java   | 61 ++++++++++++++--------
> .../compiler/internal/graph/GoogDepsWriter.java    |  4 --
> .../internal/projects/SourceListManager.java       |  4 +-
> .../internal/projects/SourcePathManager.java       | 11 ++++
> 6 files changed, 64 insertions(+), 40 deletions(-)
> 
> diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jsc/JSCPublisher.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jsc/JSCPublisher.java
> index 8f530e2..4a54cfb 100644
> --- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jsc/JSCPublisher.java
> +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jsc/JSCPublisher.java
> @@ -41,28 +41,28 @@ public class JSCPublisher extends MXMLRoyalePublisher
>     private RoyaleJSProject project;
> 
>     @Override
> -    protected String getTemplateBody(String projectName)
> +    protected String getTemplateBody(String mainClassQName)
>     {
> -        IDefinition def = project.resolveQNameToDefinition(projectName);
> +        IDefinition def = project.resolveQNameToDefinition(mainClassQName);
>         IDefinitionNode node = def.getNode();
>         if (node instanceof IMXMLDocumentNode)
>         {
>             //we should probably customize MXML too, but for now, pass it to the
>             //default implementation -JT
> -            return super.getTemplateBody(projectName);
> +            return super.getTemplateBody(mainClassQName);
>         }
>         //for ActionScript classes, simply call the constructor by default
>         StringBuilder bodyHTML = new StringBuilder();
>         bodyHTML.append("\t<script type=\"text/javascript\">\n");
>         bodyHTML.append("\t\tnew ");
> -        bodyHTML.append(projectName);
> +        bodyHTML.append(mainClassQName);
>         bodyHTML.append("();\n");
>         bodyHTML.append("\t</script>\n");
>         return bodyHTML.toString();
>     }
> 
>     @Override
> -    protected void writeHTML(String type, String projectName, File targetDir,
> +    protected void writeHTML(String type, String projectName, String mainClassQName, File targetDir,
>                              String deps, List<String> additionalHTML) throws IOException
>     {
>         if ("intermediate".equals(type))
> diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/node/NodePublisher.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/node/NodePublisher.java
> index bb3515d..3c2eb6f 100644
> --- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/node/NodePublisher.java
> +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/node/NodePublisher.java
> @@ -37,7 +37,7 @@ public class NodePublisher extends JSCPublisher
>     }
> 
>     @Override
> -    protected String getTemplateDependencies(String type, String projectName, String deps)
> +    protected String getTemplateDependencies(String type, String projectName, String mainClassQName, String deps)
>     {
>         StringBuilder depsJS = new StringBuilder();
>         if ("intermediate".equals(type))
> @@ -62,31 +62,31 @@ public class NodePublisher extends JSCPublisher
>     }
> 
>     @Override
> -    protected String getTemplateBody(String projectName)
> +    protected String getTemplateBody(String mainClassQName)
>     {
>         StringBuilder bodyJS = new StringBuilder();
>         if (exportModule)
>         {
>             bodyJS.append("module.exports = ");
> -            bodyJS.append(projectName);
> +            bodyJS.append(mainClassQName);
>             bodyJS.append(";");
>         }
>         else
>         {
>             bodyJS.append("new ");
> -            bodyJS.append(projectName);
> +            bodyJS.append(mainClassQName);
>             bodyJS.append("();");
>         }
>         return bodyJS.toString();
>     }
> 
>     @Override
> -    protected void writeHTML(String type, String projectName, File targetDir,
> +    protected void writeHTML(String type, String projectName, String mainClassQName, File targetDir,
>                              String deps, List<String> additionalHTML) throws IOException
>     {
>         StringBuilder contents = new StringBuilder();
> -        contents.append(getTemplateDependencies(type, projectName, deps));
> -        contents.append(getTemplateBody(projectName));
> +        contents.append(getTemplateDependencies(type, projectName, mainClassQName, deps));
> +        contents.append(getTemplateBody(mainClassQName));
>         writeFile(new File(targetDir, "index.js"), contents.toString(), false);
>     }
> }
> diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyalePublisher.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyalePublisher.java
> index 1c3e943..6ad8bbb 100644
> --- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyalePublisher.java
> +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyalePublisher.java
> @@ -96,11 +96,11 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSPublisher
>     private boolean useStrictPublishing;
> 
>     private GoogDepsWriter getGoogDepsWriter(File intermediateDir, 
> -    										String projectName, 
> +    										String mainClassQName, 
>     										JSGoogConfiguration googConfiguration, 
>     										List<ISWC> swcs)
>     {
> -    	return new GoogDepsWriter(intermediateDir, projectName, googConfiguration, swcs);
> +    	return new GoogDepsWriter(intermediateDir, mainClassQName, googConfiguration, swcs);
>     }
> 
>     @Override
> @@ -159,7 +159,25 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSPublisher
>         // The "intermediate" is the "js-debug" output.
>         final File intermediateDir = outputFolder;
> 
> +        // The source directory is the source path entry containing the Main class.
> +        List<File> sourcePaths = project.getSourcePath();
> +        String targetFile = configuration.getTargetFile().toLowerCase();
> +        File imageSrcDir = null;
> +        for (File sp : sourcePaths)
> +        {
> +        	String lowercasePath = sp.getAbsolutePath().toLowerCase();
> +        	if (targetFile.startsWith(lowercasePath))
> +        		imageSrcDir = sp;
> +        }
>         final String projectName = FilenameUtils.getBaseName(configuration.getTargetFile());
> +        String qName = null;
> +        try {
> +			qName = project.mainCU.getQualifiedNames().get(0);
> +		} catch (InterruptedException e) {
> +			// TODO Auto-generated catch block
> +			e.printStackTrace();
> +		}
> +		final String mainClassQName = qName;
>         final String outputFileName = projectName + "." + project.getBackend().getOutputExtension();
> 
>         // The "release" is the "js-release" directory.
> @@ -184,11 +202,8 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSPublisher
>         IOFileFilter assetFiles = FileFilterUtils.or(pngSuffixFilter, jpgSuffixFilter, jpegSuffixFilter, svgSuffixFilter, gifSuffixFilter,
>                 jsonSuffixFilter);
>         IOFileFilter resourceFilter = FileFilterUtils.or(DirectoryFileFilter.DIRECTORY, assetFiles);
> -        // The source directory is the directory containing the Main class.
> -        File imageSrcDir = new File(configuration.getTargetFile()).getAbsoluteFile().getParentFile();
>         // FIXME: All images need to be located relative to the Main class ... for Maven this is a problem.
>         FileUtils.copyDirectory(imageSrcDir, intermediateDir, resourceFilter);
> -        
>         // Iterate over all themes SWCs and add the contents of any included files in
>         // an assets folder to an assets folder in the destination folder.
>         final ISWCManager swcManager = project.getWorkspace().getSWCManager();
> @@ -347,7 +362,7 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSPublisher
>         // Add all files generated by the compiler to the compilation unit.
>         /////////////////////////////////////////////////////////////////////////////////
> 
> -        GoogDepsWriter gdw = getGoogDepsWriter(intermediateDir, projectName, googConfiguration, allswcs);
> +        GoogDepsWriter gdw = getGoogDepsWriter(intermediateDir, mainClassQName, googConfiguration, allswcs);
>         // This list contains all files generated by the compiler, this is both the
>         // compiled js files created by the sources of the current project plus the
>         // js files of used dependencies.
> @@ -365,10 +380,10 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSPublisher
>         // is generated here so it can be used for outputting the html templates.
>         String depsFileData = gdw.generateDeps(project, problems);
> 
> -        if (project.isModule(projectName))
> +        if (project.isModule(mainClassQName))
>         {
>         	// need better test someday
> -        	depsFileData += "\ngoog.require('" + projectName + "');\n";
> +        	depsFileData += "\ngoog.require('" + mainClassQName + "');\n";
>             writeFile(new File(intermediateDir, projectName + "__deps.js"), depsFileData, false);
>             Set<String> provideds = computeProvideds(depsFileData);
>             compilerWrapper.setProvideds(provideds);
> @@ -380,17 +395,17 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSPublisher
> 	        // Create the index.html for the debug-js version.
> 	        if (!((JSGoogConfiguration)configuration).getSkipTranspile()) {
> 	            if (template != null) {
> -	                writeTemplate(template, "intermediate", projectName, intermediateDir, depsFileData, gdw.additionalHTML);
> +	                writeTemplate(template, "intermediate", projectName, mainClassQName, intermediateDir, depsFileData, gdw.additionalHTML);
> 	            } else {
> -	                writeHTML("intermediate", projectName, intermediateDir, depsFileData, gdw.additionalHTML);
> +	                writeHTML("intermediate", projectName, mainClassQName, intermediateDir, depsFileData, gdw.additionalHTML);
> 	            }
> 	        }
> 	        // Create the index.html for the release-js version.
> 	        if (configuration.release()) {
> 	            if (template != null) {
> -	                writeTemplate(template, "release", projectName, releaseDir, depsFileData, gdw.additionalHTML);
> +	                writeTemplate(template, "release", projectName, mainClassQName, releaseDir, depsFileData, gdw.additionalHTML);
> 	            } else {
> -	                writeHTML("release", projectName, releaseDir, null, gdw.additionalHTML);
> +	                writeHTML("release", projectName, mainClassQName, releaseDir, null, gdw.additionalHTML);
> 	            }
> 	        }
>         }        
> @@ -608,7 +623,7 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSPublisher
>         return code;
>     }
> 
> -    protected void writeTemplate(File template, String type, String projectName, File targetDir, String deps, List<String> additionalHTML)
> +    protected void writeTemplate(File template, String type, String projectName, String mainClassQName, File targetDir, String deps, List<String> additionalHTML)
>     		throws IOException
> 	{
> 	    // Check if the template exists.
> @@ -629,7 +644,7 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSPublisher
>             bgcolor = ta.getBackgroundColor();
>             pageTitle = ta.getPageTitle();
>         }
> -        String result = input.replaceAll("\\$\\{application\\}", projectName);
> +        String result = input.replaceAll("\\$\\{application\\}", mainClassQName);
>         if (bgcolor != null)
>             result = result.replaceAll("\\$\\{bgcolor\\}", bgcolor);
>         //result = result.replaceAll("\\$\\{expressInstallSwf\\}", expressInstallSwf);
> @@ -646,10 +661,10 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSPublisher
> 
>         StringBuilder addHTML = new StringBuilder();
>         addHTML.append(getTemplateAdditionalHTML(additionalHTML));
> -		addHTML.append(getTemplateDependencies(type, projectName, deps));
> +		addHTML.append(getTemplateDependencies(type, projectName, mainClassQName, deps));
>         result = result.replaceAll("\\$\\{head\\}", addHTML.toString());
> 
> -        String templateBody = getTemplateBody(projectName);
> +        String templateBody = getTemplateBody("release".equals(type) ? projectName : mainClassQName);
>         result = result.replaceAll("\\$\\{body\\}", templateBody);
> 
> 		writeFile(new File(targetDir, googConfiguration.getHtmlOutputFileName()), result, false);
> @@ -665,7 +680,7 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSPublisher
>         return htmlFile.toString();
>     }
> 
> -    protected String getTemplateDependencies(String type, String projectName, String deps)
> +    protected String getTemplateDependencies(String type, String projectName, String mainClassQName, String deps)
>     {
>         StringBuilder depsHTML = new StringBuilder();
>         if ("intermediate".equals(type))
> @@ -674,7 +689,7 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSPublisher
>             depsHTML.append("\t<script type=\"text/javascript\">\n");
>             depsHTML.append(deps);
>             depsHTML.append("\t\tgoog.require(\"");
> -            depsHTML.append(projectName);
> +            depsHTML.append(mainClassQName);
>             depsHTML.append("\");\n");
>             depsHTML.append("\t</script>\n");
>         }
> @@ -687,19 +702,19 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSPublisher
>         return depsHTML.toString();
>     }
> 
> -	protected String getTemplateBody(String projectName)
> +	protected String getTemplateBody(String mainClassQName)
>     {
>         StringBuilder bodyHTML = new StringBuilder();
>         bodyHTML.append("\t<script type=\"text/javascript\">\n");
>         bodyHTML.append("\t\tnew ");
> -        bodyHTML.append(projectName);
> +        bodyHTML.append(mainClassQName);
>         bodyHTML.append("()");
>         bodyHTML.append(".start();\n");
>         bodyHTML.append("\t</script>\n");
>         return bodyHTML.toString();
>     }
> 
> -    protected void writeHTML(String type, String projectName, File targetDir, String deps, List<String> additionalHTML)
> +    protected void writeHTML(String type, String projectName, String mainClassQName, File targetDir, String deps, List<String> additionalHTML)
>             throws IOException
>     {
>         StringBuilder htmlFile = new StringBuilder();
> @@ -711,12 +726,12 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSPublisher
>         htmlFile.append("\t<link rel=\"stylesheet\" type=\"text/css\" href=\"").append(projectName).append(".css\">\n");
> 
>         htmlFile.append(getTemplateAdditionalHTML(additionalHTML));
> -        htmlFile.append(getTemplateDependencies(type, projectName, deps));
> +        htmlFile.append(getTemplateDependencies(type, projectName, mainClassQName, deps));
> 
>         htmlFile.append("</head>\n");
>         htmlFile.append("<body>\n");
> 
> -        htmlFile.append(getTemplateBody(projectName));
> +        htmlFile.append(getTemplateBody(mainClassQName));
> 
>         htmlFile.append("</body>\n");
>         htmlFile.append("</html>");
> diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/GoogDepsWriter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/GoogDepsWriter.java
> index b412817..45f95b6 100644
> --- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/GoogDepsWriter.java
> +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/GoogDepsWriter.java
> @@ -703,10 +703,6 @@ public class GoogDepsWriter {
> 	    File f;
> 	    
> 		String classPath = className.replace(".", File.separator);
> -		// special case app names with underscores, but hope that
> -		// no other class names have underscores in them
> -        if (className.equals(mainName))
> -        	classPath = className;
> 
>         fn = outputFolderPath + File.separator + classPath + ".js";
>         f = new File(fn);
> diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/SourceListManager.java b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/SourceListManager.java
> index 21bd8a4..a42555a 100644
> --- a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/SourceListManager.java
> +++ b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/SourceListManager.java
> @@ -124,8 +124,10 @@ final class SourceListManager
>             unitsToAdd = new ArrayList<ICompilationUnit>(newSourcesToCreate.size());
>             for (File file : newSourcesToCreate)
>             {
> +            	File sourcePath = sourcePathManager.getSourcePath(file);
> +            	String qname = sourcePathManager.computeQName(sourcePath, file);
>                 ICompilationUnit unit = project.getSourceCompilationUnitFactory().createCompilationUnit(
> -                    file, DefinitionPriority.BasePriority.SOURCE_LIST, 0, null, null);
> +                    file, DefinitionPriority.BasePriority.SOURCE_LIST, 0, qname, null);
> 
>                 //It can be null in some cases, see #ResourceBundleSourceFileHandler
>                 if(unit != null)
> diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/SourcePathManager.java b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/SourcePathManager.java
> index 23f8bbc..366cab1 100644
> --- a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/SourcePathManager.java
> +++ b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/SourcePathManager.java
> @@ -95,6 +95,17 @@ public final class SourcePathManager
>         return false;
>     }
> 
> +    public File getSourcePath(File file)
> +    {
> +        for (final DirectoryID directory : sourcePaths.keySet())
> +        {
> +            if (directory.isParentOf(file))
> +                return directory.getFile();
> +        }
> +        
> +        return null;
> +    }
> +    
>     private void accumulateQNameFiles(Set<QNameFile> qNameFiles, File directory, String baseQName, String locale, 
>             Collection<ICompilerProblem> problems, int order)
>     {
> 
> -- 
> To stop receiving notification emails like this one, please contact
> aharui@apache.org.


RE: [royale-compiler] branch develop updated: handle main MXML file in packages

Posted by Yishay Weiss <yi...@hotmail.com>.
Going back to 8b0ee7192310c7f925b303ea4dab117ee9cd2b9b in compiler and rebuilding royale-compiler and royale-asjs fixes the issue.


From: Yishay Weiss<ma...@hotmail.com>
Sent: Monday, March 19, 2018 9:52 AM
To: dev@royale.apache.org<ma...@royale.apache.org>
Subject: RE: [royale-compiler] branch develop updated: handle main MXML file in packages

I’m still getting an error when compiling our app using the up2date compiler.



   [mxmlc] Internal error: java.lang.NullPointerException: Source must not be null org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1362)org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1310)org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyalePublisher.publish(MXMLRoyalePublisher.java:206)org.apache.royale.compiler.clients.MXMLJSCRoyale.compile(MXMLJSCRoyale.java:384)org.apache.royale.compiler.clients.MXMLJSCRoyale._mainNoExit(MXMLJSCRoyale.java:240)org.apache.royale.compiler.clients.MXMLJSCRoyale.mainNoExit(MXMLJSCRoyale.java:197)org.apache.royale.compiler.clients.MXMLJSC._mainNoExit(MXMLJSC.java:345)org.apache.royale.compiler.clients.MXMLJSC.mainNoExit(MXMLJSC.java:281)org.apache.royale.compiler.clients.MXMLJSC.staticMainNoExit(MXMLJSC.java:240)org.apache.royale.compiler.clients.MXMLJSC.main(MXMLJSC.java:222)



________________________________
From: Alex Harui <ah...@adobe.com.INVALID>
Sent: Monday, March 19, 2018 2:40:38 AM
To: dev@royale.apache.org
Subject: Re: [royale-compiler] branch develop updated: handle main MXML file in packages

I took care of it.

On 3/18/18, 1:16 AM, "Harbs" <ha...@gmail.com> wrote:

>This commit appears to break things.
>
>I’m getting the following error in Core tests:
>
>https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpaste.apa
>che.org%2FBmsg&data=02%7C01%7Caharui%40adobe.com%7C41c93109f528477fe9bb08d
>58ca8983b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636569578094796225&
>sdata=fanlDrBFFOSL0rpZNNR7IMZyFOxmeJeR5riVdFJcLH8%3D&reserved=0
><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpaste.ap
>ache.org%2FBmsg&data=02%7C01%7Caharui%40adobe.com%7C41c93109f528477fe9bb08
>d58ca8983b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636569578094796225
>&sdata=fanlDrBFFOSL0rpZNNR7IMZyFOxmeJeR5riVdFJcLH8%3D&reserved=0>
>
>Harbs
>
>> On Mar 17, 2018, at 5:16 PM, aharui@apache.org wrote:
>>
>> This is an automated email from the ASF dual-hosted git repository.
>>
>> aharui pushed a commit to branch develop
>> in repository
>>https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitbox.a
>>pache.org%2Frepos%2Fasf%2Froyale-compiler.git&data=02%7C01%7Caharui%40ado
>>be.com%7C41c93109f528477fe9bb08d58ca8983b%7Cfa7b1b5a7b34438794aed2c178dec
>>ee1%7C0%7C0%7C636569578094796225&sdata=hx1FTlGgdcEVSsfSfHW0gAVPVvFwwmJdeu
>>iIQQx2QtY%3D&reserved=0
>>
>>
>> The following commit(s) were added to refs/heads/develop by this push:
>>     new ac500b7  handle main MXML file in packages
>> ac500b7 is described below
>>
>> commit ac500b75530fc9094768824e4339fbd7df95e7ed
>> Author: Alex Harui <ah...@apache.org>
>> AuthorDate: Sat Mar 17 08:16:12 2018 -0700
>>
>>    handle main MXML file in packages
>> ---
>> .../internal/codegen/js/jsc/JSCPublisher.java      | 10 ++--
>> .../internal/codegen/js/node/NodePublisher.java    | 14 ++---
>> .../codegen/mxml/royale/MXMLRoyalePublisher.java   | 61
>>++++++++++++++--------
>> .../compiler/internal/graph/GoogDepsWriter.java    |  4 --
>> .../internal/projects/SourceListManager.java       |  4 +-
>> .../internal/projects/SourcePathManager.java       | 11 ++++
>> 6 files changed, 64 insertions(+), 40 deletions(-)
>>
>> diff --git
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/jsc/JSCPublisher.java
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/jsc/JSCPublisher.java
>> index 8f530e2..4a54cfb 100644
>> ---
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/jsc/JSCPublisher.java
>> +++
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/jsc/JSCPublisher.java
>> @@ -41,28 +41,28 @@ public class JSCPublisher extends
>>MXMLRoyalePublisher
>>     private RoyaleJSProject project;
>>
>>     @Override
>> -    protected String getTemplateBody(String projectName)
>> +    protected String getTemplateBody(String mainClassQName)
>>     {
>> -        IDefinition def =
>>project.resolveQNameToDefinition(projectName);
>> +        IDefinition def =
>>project.resolveQNameToDefinition(mainClassQName);
>>         IDefinitionNode node = def.getNode();
>>         if (node instanceof IMXMLDocumentNode)
>>         {
>>             //we should probably customize MXML too, but for now, pass
>>it to the
>>             //default implementation -JT
>> -            return super.getTemplateBody(projectName);
>> +            return super.getTemplateBody(mainClassQName);
>>         }
>>         //for ActionScript classes, simply call the constructor by
>>default
>>         StringBuilder bodyHTML = new StringBuilder();
>>         bodyHTML.append("\t<script type=\"text/javascript\">\n");
>>         bodyHTML.append("\t\tnew ");
>> -        bodyHTML.append(projectName);
>> +        bodyHTML.append(mainClassQName);
>>         bodyHTML.append("();\n");
>>         bodyHTML.append("\t</script>\n");
>>         return bodyHTML.toString();
>>     }
>>
>>     @Override
>> -    protected void writeHTML(String type, String projectName, File
>>targetDir,
>> +    protected void writeHTML(String type, String projectName, String
>>mainClassQName, File targetDir,
>>                              String deps, List<String> additionalHTML)
>>throws IOException
>>     {
>>         if ("intermediate".equals(type))
>> diff --git
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/node/NodePublisher.java
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/node/NodePublisher.java
>> index bb3515d..3c2eb6f 100644
>> ---
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/node/NodePublisher.java
>> +++
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/node/NodePublisher.java
>> @@ -37,7 +37,7 @@ public class NodePublisher extends JSCPublisher
>>     }
>>
>>     @Override
>> -    protected String getTemplateDependencies(String type, String
>>projectName, String deps)
>> +    protected String getTemplateDependencies(String type, String
>>projectName, String mainClassQName, String deps)
>>     {
>>         StringBuilder depsJS = new StringBuilder();
>>         if ("intermediate".equals(type))
>> @@ -62,31 +62,31 @@ public class NodePublisher extends JSCPublisher
>>     }
>>
>>     @Override
>> -    protected String getTemplateBody(String projectName)
>> +    protected String getTemplateBody(String mainClassQName)
>>     {
>>         StringBuilder bodyJS = new StringBuilder();
>>         if (exportModule)
>>         {
>>             bodyJS.append("module.exports = ");
>> -            bodyJS.append(projectName);
>> +            bodyJS.append(mainClassQName);
>>             bodyJS.append(";");
>>         }
>>         else
>>         {
>>             bodyJS.append("new ");
>> -            bodyJS.append(projectName);
>> +            bodyJS.append(mainClassQName);
>>             bodyJS.append("();");
>>         }
>>         return bodyJS.toString();
>>     }
>>
>>     @Override
>> -    protected void writeHTML(String type, String projectName, File
>>targetDir,
>> +    protected void writeHTML(String type, String projectName, String
>>mainClassQName, File targetDir,
>>                              String deps, List<String> additionalHTML)
>>throws IOException
>>     {
>>         StringBuilder contents = new StringBuilder();
>> -        contents.append(getTemplateDependencies(type, projectName,
>>deps));
>> -        contents.append(getTemplateBody(projectName));
>> +        contents.append(getTemplateDependencies(type, projectName,
>>mainClassQName, deps));
>> +        contents.append(getTemplateBody(mainClassQName));
>>         writeFile(new File(targetDir, "index.js"), contents.toString(),
>>false);
>>     }
>> }
>> diff --git
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/m
>>xml/royale/MXMLRoyalePublisher.java
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/m
>>xml/royale/MXMLRoyalePublisher.java
>> index 1c3e943..6ad8bbb 100644
>> ---
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/m
>>xml/royale/MXMLRoyalePublisher.java
>> +++
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/m
>>xml/royale/MXMLRoyalePublisher.java
>> @@ -96,11 +96,11 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>     private boolean useStrictPublishing;
>>
>>     private GoogDepsWriter getGoogDepsWriter(File intermediateDir,
>> -                                                                             String projectName,
>> +                                                                             String mainClassQName,
>>                                                                               JSGoogConfiguration googConfiguration,
>>                                                                               List<ISWC> swcs)
>>     {
>> -     return new GoogDepsWriter(intermediateDir, projectName,
>>googConfiguration, swcs);
>> +     return new GoogDepsWriter(intermediateDir, mainClassQName,
>>googConfiguration, swcs);
>>     }
>>
>>     @Override
>> @@ -159,7 +159,25 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         // The "intermediate" is the "js-debug" output.
>>         final File intermediateDir = outputFolder;
>>
>> +        // The source directory is the source path entry containing
>>the Main class.
>> +        List<File> sourcePaths = project.getSourcePath();
>> +        String targetFile =
>>configuration.getTargetFile().toLowerCase();
>> +        File imageSrcDir = null;
>> +        for (File sp : sourcePaths)
>> +        {
>> +             String lowercasePath = sp.getAbsolutePath().toLowerCase();
>> +             if (targetFile.startsWith(lowercasePath))
>> +                     imageSrcDir = sp;
>> +        }
>>         final String projectName =
>>FilenameUtils.getBaseName(configuration.getTargetFile());
>> +        String qName = null;
>> +        try {
>> +                    qName = project.mainCU.getQualifiedNames().get(0);
>> +            } catch (InterruptedException e) {
>> +                    // TODO Auto-generated catch block
>> +                    e.printStackTrace();
>> +            }
>> +            final String mainClassQName = qName;
>>         final String outputFileName = projectName + "." +
>>project.getBackend().getOutputExtension();
>>
>>         // The "release" is the "js-release" directory.
>> @@ -184,11 +202,8 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         IOFileFilter assetFiles = FileFilterUtils.or(pngSuffixFilter,
>>jpgSuffixFilter, jpegSuffixFilter, svgSuffixFilter, gifSuffixFilter,
>>                 jsonSuffixFilter);
>>         IOFileFilter resourceFilter =
>>FileFilterUtils.or(DirectoryFileFilter.DIRECTORY, assetFiles);
>> -        // The source directory is the directory containing the Main
>>class.
>> -        File imageSrcDir = new
>>File(configuration.getTargetFile()).getAbsoluteFile().getParentFile();
>>         // FIXME: All images need to be located relative to the Main
>>class ... for Maven this is a problem.
>>         FileUtils.copyDirectory(imageSrcDir, intermediateDir,
>>resourceFilter);
>> -
>>         // Iterate over all themes SWCs and add the contents of any
>>included files in
>>         // an assets folder to an assets folder in the destination
>>folder.
>>         final ISWCManager swcManager =
>>project.getWorkspace().getSWCManager();
>> @@ -347,7 +362,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         // Add all files generated by the compiler to the compilation
>>unit.
>>
>>/////////////////////////////////////////////////////////////////////////
>>////////
>>
>> -        GoogDepsWriter gdw = getGoogDepsWriter(intermediateDir,
>>projectName, googConfiguration, allswcs);
>> +        GoogDepsWriter gdw = getGoogDepsWriter(intermediateDir,
>>mainClassQName, googConfiguration, allswcs);
>>         // This list contains all files generated by the compiler, this
>>is both the
>>         // compiled js files created by the sources of the current
>>project plus the
>>         // js files of used dependencies.
>> @@ -365,10 +380,10 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         // is generated here so it can be used for outputting the html
>>templates.
>>         String depsFileData = gdw.generateDeps(project, problems);
>>
>> -        if (project.isModule(projectName))
>> +        if (project.isModule(mainClassQName))
>>         {
>>               // need better test someday
>> -             depsFileData += "\ngoog.require('" + projectName + "');\n";
>> +             depsFileData += "\ngoog.require('" + mainClassQName + "');\n";
>>             writeFile(new File(intermediateDir, projectName +
>>"__deps.js"), depsFileData, false);
>>             Set<String> provideds = computeProvideds(depsFileData);
>>             compilerWrapper.setProvideds(provideds);
>> @@ -380,17 +395,17 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>               // Create the index.html for the debug-js version.
>>               if (!((JSGoogConfiguration)configuration).getSkipTranspile()) {
>>                   if (template != null) {
>> -                    writeTemplate(template, "intermediate", projectName,
>>intermediateDir, depsFileData, gdw.additionalHTML);
>> +                    writeTemplate(template, "intermediate", projectName,
>>mainClassQName, intermediateDir, depsFileData, gdw.additionalHTML);
>>                   } else {
>> -                    writeHTML("intermediate", projectName,
>>intermediateDir, depsFileData, gdw.additionalHTML);
>> +                    writeHTML("intermediate", projectName,
>>mainClassQName, intermediateDir, depsFileData, gdw.additionalHTML);
>>                   }
>>               }
>>               // Create the index.html for the release-js version.
>>               if (configuration.release()) {
>>                   if (template != null) {
>> -                    writeTemplate(template, "release", projectName,
>>releaseDir, depsFileData, gdw.additionalHTML);
>> +                    writeTemplate(template, "release", projectName,
>>mainClassQName, releaseDir, depsFileData, gdw.additionalHTML);
>>                   } else {
>> -                    writeHTML("release", projectName, releaseDir, null,
>>gdw.additionalHTML);
>> +                    writeHTML("release", projectName, mainClassQName,
>>releaseDir, null, gdw.additionalHTML);
>>                   }
>>               }
>>         }
>> @@ -608,7 +623,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         return code;
>>     }
>>
>> -    protected void writeTemplate(File template, String type, String
>>projectName, File targetDir, String deps, List<String> additionalHTML)
>> +    protected void writeTemplate(File template, String type, String
>>projectName, String mainClassQName, File targetDir, String deps,
>>List<String> additionalHTML)
>>               throws IOException
>>       {
>>           // Check if the template exists.
>> @@ -629,7 +644,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>             bgcolor = ta.getBackgroundColor();
>>             pageTitle = ta.getPageTitle();
>>         }
>> -        String result = input.replaceAll("\\$\\{application\\}",
>>projectName);
>> +        String result = input.replaceAll("\\$\\{application\\}",
>>mainClassQName);
>>         if (bgcolor != null)
>>             result = result.replaceAll("\\$\\{bgcolor\\}", bgcolor);
>>         //result = result.replaceAll("\\$\\{expressInstallSwf\\}",
>>expressInstallSwf);
>> @@ -646,10 +661,10 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>
>>         StringBuilder addHTML = new StringBuilder();
>>         addHTML.append(getTemplateAdditionalHTML(additionalHTML));
>> -            addHTML.append(getTemplateDependencies(type, projectName, deps));
>> +            addHTML.append(getTemplateDependencies(type, projectName,
>>mainClassQName, deps));
>>         result = result.replaceAll("\\$\\{head\\}", addHTML.toString());
>>
>> -        String templateBody = getTemplateBody(projectName);
>> +        String templateBody = getTemplateBody("release".equals(type) ?
>>projectName : mainClassQName);
>>         result = result.replaceAll("\\$\\{body\\}", templateBody);
>>
>>               writeFile(new File(targetDir,
>>googConfiguration.getHtmlOutputFileName()), result, false);
>> @@ -665,7 +680,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         return htmlFile.toString();
>>     }
>>
>> -    protected String getTemplateDependencies(String type, String
>>projectName, String deps)
>> +    protected String getTemplateDependencies(String type, String
>>projectName, String mainClassQName, String deps)
>>     {
>>         StringBuilder depsHTML = new StringBuilder();
>>         if ("intermediate".equals(type))
>> @@ -674,7 +689,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>             depsHTML.append("\t<script type=\"text/javascript\">\n");
>>             depsHTML.append(deps);
>>             depsHTML.append("\t\tgoog.require(\"");
>> -            depsHTML.append(projectName);
>> +            depsHTML.append(mainClassQName);
>>             depsHTML.append("\");\n");
>>             depsHTML.append("\t</script>\n");
>>         }
>> @@ -687,19 +702,19 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         return depsHTML.toString();
>>     }
>>
>> -    protected String getTemplateBody(String projectName)
>> +    protected String getTemplateBody(String mainClassQName)
>>     {
>>         StringBuilder bodyHTML = new StringBuilder();
>>         bodyHTML.append("\t<script type=\"text/javascript\">\n");
>>         bodyHTML.append("\t\tnew ");
>> -        bodyHTML.append(projectName);
>> +        bodyHTML.append(mainClassQName);
>>         bodyHTML.append("()");
>>         bodyHTML.append(".start();\n");
>>         bodyHTML.append("\t</script>\n");
>>         return bodyHTML.toString();
>>     }
>>
>> -    protected void writeHTML(String type, String projectName, File
>>targetDir, String deps, List<String> additionalHTML)
>> +    protected void writeHTML(String type, String projectName, String
>>mainClassQName, File targetDir, String deps, List<String> additionalHTML)
>>             throws IOException
>>     {
>>         StringBuilder htmlFile = new StringBuilder();
>> @@ -711,12 +726,12 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         htmlFile.append("\t<link rel=\"stylesheet\" type=\"text/css\"
>>href=\"").append(projectName).append(".css\">\n");
>>
>>         htmlFile.append(getTemplateAdditionalHTML(additionalHTML));
>> -        htmlFile.append(getTemplateDependencies(type, projectName,
>>deps));
>> +        htmlFile.append(getTemplateDependencies(type, projectName,
>>mainClassQName, deps));
>>
>>         htmlFile.append("</head>\n");
>>         htmlFile.append("<body>\n");
>>
>> -        htmlFile.append(getTemplateBody(projectName));
>> +        htmlFile.append(getTemplateBody(mainClassQName));
>>
>>         htmlFile.append("</body>\n");
>>         htmlFile.append("</html>");
>> diff --git
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/Goo
>>gDepsWriter.java
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/Goo
>>gDepsWriter.java
>> index b412817..45f95b6 100644
>> ---
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/Goo
>>gDepsWriter.java
>> +++
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/Goo
>>gDepsWriter.java
>> @@ -703,10 +703,6 @@ public class GoogDepsWriter {
>>           File f;
>>
>>               String classPath = className.replace(".", File.separator);
>> -            // special case app names with underscores, but hope that
>> -            // no other class names have underscores in them
>> -        if (className.equals(mainName))
>> -             classPath = className;
>>
>>         fn = outputFolderPath + File.separator + classPath + ".js";
>>         f = new File(fn);
>> diff --git
>>a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rceListManager.java
>>b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rceListManager.java
>> index 21bd8a4..a42555a 100644
>> ---
>>a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rceListManager.java
>> +++
>>b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rceListManager.java
>> @@ -124,8 +124,10 @@ final class SourceListManager
>>             unitsToAdd = new
>>ArrayList<ICompilationUnit>(newSourcesToCreate.size());
>>             for (File file : newSourcesToCreate)
>>             {
>> +             File sourcePath = sourcePathManager.getSourcePath(file);
>> +             String qname = sourcePathManager.computeQName(sourcePath,
>>file);
>>                 ICompilationUnit unit =
>>project.getSourceCompilationUnitFactory().createCompilationUnit(
>> -                    file, DefinitionPriority.BasePriority.SOURCE_LIST,
>>0, null, null);
>> +                    file, DefinitionPriority.BasePriority.SOURCE_LIST,
>>0, qname, null);
>>
>>                 //It can be null in some cases, see
>>#ResourceBundleSourceFileHandler
>>                 if(unit != null)
>> diff --git
>>a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rcePathManager.java
>>b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rcePathManager.java
>> index 23f8bbc..366cab1 100644
>> ---
>>a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rcePathManager.java
>> +++
>>b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rcePathManager.java
>> @@ -95,6 +95,17 @@ public final class SourcePathManager
>>         return false;
>>     }
>>
>> +    public File getSourcePath(File file)
>> +    {
>> +        for (final DirectoryID directory : sourcePaths.keySet())
>> +        {
>> +            if (directory.isParentOf(file))
>> +                return directory.getFile();
>> +        }
>> +
>> +        return null;
>> +    }
>> +
>>     private void accumulateQNameFiles(Set<QNameFile> qNameFiles, File
>>directory, String baseQName, String locale,
>>             Collection<ICompilerProblem> problems, int order)
>>     {
>>
>> --
>> To stop receiving notification emails like this one, please contact
>> aharui@apache.org.
>


RE: [royale-compiler] branch develop updated: handle main MXML file in packages

Posted by Yishay Weiss <yi...@hotmail.com>.
I’m still getting an error when compiling our app using the up2date compiler.



   [mxmlc] Internal error: java.lang.NullPointerException: Source must not be null org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1362)org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1310)org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyalePublisher.publish(MXMLRoyalePublisher.java:206)org.apache.royale.compiler.clients.MXMLJSCRoyale.compile(MXMLJSCRoyale.java:384)org.apache.royale.compiler.clients.MXMLJSCRoyale._mainNoExit(MXMLJSCRoyale.java:240)org.apache.royale.compiler.clients.MXMLJSCRoyale.mainNoExit(MXMLJSCRoyale.java:197)org.apache.royale.compiler.clients.MXMLJSC._mainNoExit(MXMLJSC.java:345)org.apache.royale.compiler.clients.MXMLJSC.mainNoExit(MXMLJSC.java:281)org.apache.royale.compiler.clients.MXMLJSC.staticMainNoExit(MXMLJSC.java:240)org.apache.royale.compiler.clients.MXMLJSC.main(MXMLJSC.java:222)



________________________________
From: Alex Harui <ah...@adobe.com.INVALID>
Sent: Monday, March 19, 2018 2:40:38 AM
To: dev@royale.apache.org
Subject: Re: [royale-compiler] branch develop updated: handle main MXML file in packages

I took care of it.

On 3/18/18, 1:16 AM, "Harbs" <ha...@gmail.com> wrote:

>This commit appears to break things.
>
>I’m getting the following error in Core tests:
>
>https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpaste.apa
>che.org%2FBmsg&data=02%7C01%7Caharui%40adobe.com%7C41c93109f528477fe9bb08d
>58ca8983b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636569578094796225&
>sdata=fanlDrBFFOSL0rpZNNR7IMZyFOxmeJeR5riVdFJcLH8%3D&reserved=0
><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpaste.ap
>ache.org%2FBmsg&data=02%7C01%7Caharui%40adobe.com%7C41c93109f528477fe9bb08
>d58ca8983b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636569578094796225
>&sdata=fanlDrBFFOSL0rpZNNR7IMZyFOxmeJeR5riVdFJcLH8%3D&reserved=0>
>
>Harbs
>
>> On Mar 17, 2018, at 5:16 PM, aharui@apache.org wrote:
>>
>> This is an automated email from the ASF dual-hosted git repository.
>>
>> aharui pushed a commit to branch develop
>> in repository
>>https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitbox.a
>>pache.org%2Frepos%2Fasf%2Froyale-compiler.git&data=02%7C01%7Caharui%40ado
>>be.com%7C41c93109f528477fe9bb08d58ca8983b%7Cfa7b1b5a7b34438794aed2c178dec
>>ee1%7C0%7C0%7C636569578094796225&sdata=hx1FTlGgdcEVSsfSfHW0gAVPVvFwwmJdeu
>>iIQQx2QtY%3D&reserved=0
>>
>>
>> The following commit(s) were added to refs/heads/develop by this push:
>>     new ac500b7  handle main MXML file in packages
>> ac500b7 is described below
>>
>> commit ac500b75530fc9094768824e4339fbd7df95e7ed
>> Author: Alex Harui <ah...@apache.org>
>> AuthorDate: Sat Mar 17 08:16:12 2018 -0700
>>
>>    handle main MXML file in packages
>> ---
>> .../internal/codegen/js/jsc/JSCPublisher.java      | 10 ++--
>> .../internal/codegen/js/node/NodePublisher.java    | 14 ++---
>> .../codegen/mxml/royale/MXMLRoyalePublisher.java   | 61
>>++++++++++++++--------
>> .../compiler/internal/graph/GoogDepsWriter.java    |  4 --
>> .../internal/projects/SourceListManager.java       |  4 +-
>> .../internal/projects/SourcePathManager.java       | 11 ++++
>> 6 files changed, 64 insertions(+), 40 deletions(-)
>>
>> diff --git
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/jsc/JSCPublisher.java
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/jsc/JSCPublisher.java
>> index 8f530e2..4a54cfb 100644
>> ---
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/jsc/JSCPublisher.java
>> +++
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/jsc/JSCPublisher.java
>> @@ -41,28 +41,28 @@ public class JSCPublisher extends
>>MXMLRoyalePublisher
>>     private RoyaleJSProject project;
>>
>>     @Override
>> -    protected String getTemplateBody(String projectName)
>> +    protected String getTemplateBody(String mainClassQName)
>>     {
>> -        IDefinition def =
>>project.resolveQNameToDefinition(projectName);
>> +        IDefinition def =
>>project.resolveQNameToDefinition(mainClassQName);
>>         IDefinitionNode node = def.getNode();
>>         if (node instanceof IMXMLDocumentNode)
>>         {
>>             //we should probably customize MXML too, but for now, pass
>>it to the
>>             //default implementation -JT
>> -            return super.getTemplateBody(projectName);
>> +            return super.getTemplateBody(mainClassQName);
>>         }
>>         //for ActionScript classes, simply call the constructor by
>>default
>>         StringBuilder bodyHTML = new StringBuilder();
>>         bodyHTML.append("\t<script type=\"text/javascript\">\n");
>>         bodyHTML.append("\t\tnew ");
>> -        bodyHTML.append(projectName);
>> +        bodyHTML.append(mainClassQName);
>>         bodyHTML.append("();\n");
>>         bodyHTML.append("\t</script>\n");
>>         return bodyHTML.toString();
>>     }
>>
>>     @Override
>> -    protected void writeHTML(String type, String projectName, File
>>targetDir,
>> +    protected void writeHTML(String type, String projectName, String
>>mainClassQName, File targetDir,
>>                              String deps, List<String> additionalHTML)
>>throws IOException
>>     {
>>         if ("intermediate".equals(type))
>> diff --git
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/node/NodePublisher.java
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/node/NodePublisher.java
>> index bb3515d..3c2eb6f 100644
>> ---
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/node/NodePublisher.java
>> +++
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/node/NodePublisher.java
>> @@ -37,7 +37,7 @@ public class NodePublisher extends JSCPublisher
>>     }
>>
>>     @Override
>> -    protected String getTemplateDependencies(String type, String
>>projectName, String deps)
>> +    protected String getTemplateDependencies(String type, String
>>projectName, String mainClassQName, String deps)
>>     {
>>         StringBuilder depsJS = new StringBuilder();
>>         if ("intermediate".equals(type))
>> @@ -62,31 +62,31 @@ public class NodePublisher extends JSCPublisher
>>     }
>>
>>     @Override
>> -    protected String getTemplateBody(String projectName)
>> +    protected String getTemplateBody(String mainClassQName)
>>     {
>>         StringBuilder bodyJS = new StringBuilder();
>>         if (exportModule)
>>         {
>>             bodyJS.append("module.exports = ");
>> -            bodyJS.append(projectName);
>> +            bodyJS.append(mainClassQName);
>>             bodyJS.append(";");
>>         }
>>         else
>>         {
>>             bodyJS.append("new ");
>> -            bodyJS.append(projectName);
>> +            bodyJS.append(mainClassQName);
>>             bodyJS.append("();");
>>         }
>>         return bodyJS.toString();
>>     }
>>
>>     @Override
>> -    protected void writeHTML(String type, String projectName, File
>>targetDir,
>> +    protected void writeHTML(String type, String projectName, String
>>mainClassQName, File targetDir,
>>                              String deps, List<String> additionalHTML)
>>throws IOException
>>     {
>>         StringBuilder contents = new StringBuilder();
>> -        contents.append(getTemplateDependencies(type, projectName,
>>deps));
>> -        contents.append(getTemplateBody(projectName));
>> +        contents.append(getTemplateDependencies(type, projectName,
>>mainClassQName, deps));
>> +        contents.append(getTemplateBody(mainClassQName));
>>         writeFile(new File(targetDir, "index.js"), contents.toString(),
>>false);
>>     }
>> }
>> diff --git
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/m
>>xml/royale/MXMLRoyalePublisher.java
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/m
>>xml/royale/MXMLRoyalePublisher.java
>> index 1c3e943..6ad8bbb 100644
>> ---
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/m
>>xml/royale/MXMLRoyalePublisher.java
>> +++
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/m
>>xml/royale/MXMLRoyalePublisher.java
>> @@ -96,11 +96,11 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>     private boolean useStrictPublishing;
>>
>>     private GoogDepsWriter getGoogDepsWriter(File intermediateDir,
>> -                                                                             String projectName,
>> +                                                                             String mainClassQName,
>>                                                                               JSGoogConfiguration googConfiguration,
>>                                                                               List<ISWC> swcs)
>>     {
>> -     return new GoogDepsWriter(intermediateDir, projectName,
>>googConfiguration, swcs);
>> +     return new GoogDepsWriter(intermediateDir, mainClassQName,
>>googConfiguration, swcs);
>>     }
>>
>>     @Override
>> @@ -159,7 +159,25 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         // The "intermediate" is the "js-debug" output.
>>         final File intermediateDir = outputFolder;
>>
>> +        // The source directory is the source path entry containing
>>the Main class.
>> +        List<File> sourcePaths = project.getSourcePath();
>> +        String targetFile =
>>configuration.getTargetFile().toLowerCase();
>> +        File imageSrcDir = null;
>> +        for (File sp : sourcePaths)
>> +        {
>> +             String lowercasePath = sp.getAbsolutePath().toLowerCase();
>> +             if (targetFile.startsWith(lowercasePath))
>> +                     imageSrcDir = sp;
>> +        }
>>         final String projectName =
>>FilenameUtils.getBaseName(configuration.getTargetFile());
>> +        String qName = null;
>> +        try {
>> +                    qName = project.mainCU.getQualifiedNames().get(0);
>> +            } catch (InterruptedException e) {
>> +                    // TODO Auto-generated catch block
>> +                    e.printStackTrace();
>> +            }
>> +            final String mainClassQName = qName;
>>         final String outputFileName = projectName + "." +
>>project.getBackend().getOutputExtension();
>>
>>         // The "release" is the "js-release" directory.
>> @@ -184,11 +202,8 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         IOFileFilter assetFiles = FileFilterUtils.or(pngSuffixFilter,
>>jpgSuffixFilter, jpegSuffixFilter, svgSuffixFilter, gifSuffixFilter,
>>                 jsonSuffixFilter);
>>         IOFileFilter resourceFilter =
>>FileFilterUtils.or(DirectoryFileFilter.DIRECTORY, assetFiles);
>> -        // The source directory is the directory containing the Main
>>class.
>> -        File imageSrcDir = new
>>File(configuration.getTargetFile()).getAbsoluteFile().getParentFile();
>>         // FIXME: All images need to be located relative to the Main
>>class ... for Maven this is a problem.
>>         FileUtils.copyDirectory(imageSrcDir, intermediateDir,
>>resourceFilter);
>> -
>>         // Iterate over all themes SWCs and add the contents of any
>>included files in
>>         // an assets folder to an assets folder in the destination
>>folder.
>>         final ISWCManager swcManager =
>>project.getWorkspace().getSWCManager();
>> @@ -347,7 +362,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         // Add all files generated by the compiler to the compilation
>>unit.
>>
>>/////////////////////////////////////////////////////////////////////////
>>////////
>>
>> -        GoogDepsWriter gdw = getGoogDepsWriter(intermediateDir,
>>projectName, googConfiguration, allswcs);
>> +        GoogDepsWriter gdw = getGoogDepsWriter(intermediateDir,
>>mainClassQName, googConfiguration, allswcs);
>>         // This list contains all files generated by the compiler, this
>>is both the
>>         // compiled js files created by the sources of the current
>>project plus the
>>         // js files of used dependencies.
>> @@ -365,10 +380,10 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         // is generated here so it can be used for outputting the html
>>templates.
>>         String depsFileData = gdw.generateDeps(project, problems);
>>
>> -        if (project.isModule(projectName))
>> +        if (project.isModule(mainClassQName))
>>         {
>>               // need better test someday
>> -             depsFileData += "\ngoog.require('" + projectName + "');\n";
>> +             depsFileData += "\ngoog.require('" + mainClassQName + "');\n";
>>             writeFile(new File(intermediateDir, projectName +
>>"__deps.js"), depsFileData, false);
>>             Set<String> provideds = computeProvideds(depsFileData);
>>             compilerWrapper.setProvideds(provideds);
>> @@ -380,17 +395,17 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>               // Create the index.html for the debug-js version.
>>               if (!((JSGoogConfiguration)configuration).getSkipTranspile()) {
>>                   if (template != null) {
>> -                    writeTemplate(template, "intermediate", projectName,
>>intermediateDir, depsFileData, gdw.additionalHTML);
>> +                    writeTemplate(template, "intermediate", projectName,
>>mainClassQName, intermediateDir, depsFileData, gdw.additionalHTML);
>>                   } else {
>> -                    writeHTML("intermediate", projectName,
>>intermediateDir, depsFileData, gdw.additionalHTML);
>> +                    writeHTML("intermediate", projectName,
>>mainClassQName, intermediateDir, depsFileData, gdw.additionalHTML);
>>                   }
>>               }
>>               // Create the index.html for the release-js version.
>>               if (configuration.release()) {
>>                   if (template != null) {
>> -                    writeTemplate(template, "release", projectName,
>>releaseDir, depsFileData, gdw.additionalHTML);
>> +                    writeTemplate(template, "release", projectName,
>>mainClassQName, releaseDir, depsFileData, gdw.additionalHTML);
>>                   } else {
>> -                    writeHTML("release", projectName, releaseDir, null,
>>gdw.additionalHTML);
>> +                    writeHTML("release", projectName, mainClassQName,
>>releaseDir, null, gdw.additionalHTML);
>>                   }
>>               }
>>         }
>> @@ -608,7 +623,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         return code;
>>     }
>>
>> -    protected void writeTemplate(File template, String type, String
>>projectName, File targetDir, String deps, List<String> additionalHTML)
>> +    protected void writeTemplate(File template, String type, String
>>projectName, String mainClassQName, File targetDir, String deps,
>>List<String> additionalHTML)
>>               throws IOException
>>       {
>>           // Check if the template exists.
>> @@ -629,7 +644,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>             bgcolor = ta.getBackgroundColor();
>>             pageTitle = ta.getPageTitle();
>>         }
>> -        String result = input.replaceAll("\\$\\{application\\}",
>>projectName);
>> +        String result = input.replaceAll("\\$\\{application\\}",
>>mainClassQName);
>>         if (bgcolor != null)
>>             result = result.replaceAll("\\$\\{bgcolor\\}", bgcolor);
>>         //result = result.replaceAll("\\$\\{expressInstallSwf\\}",
>>expressInstallSwf);
>> @@ -646,10 +661,10 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>
>>         StringBuilder addHTML = new StringBuilder();
>>         addHTML.append(getTemplateAdditionalHTML(additionalHTML));
>> -            addHTML.append(getTemplateDependencies(type, projectName, deps));
>> +            addHTML.append(getTemplateDependencies(type, projectName,
>>mainClassQName, deps));
>>         result = result.replaceAll("\\$\\{head\\}", addHTML.toString());
>>
>> -        String templateBody = getTemplateBody(projectName);
>> +        String templateBody = getTemplateBody("release".equals(type) ?
>>projectName : mainClassQName);
>>         result = result.replaceAll("\\$\\{body\\}", templateBody);
>>
>>               writeFile(new File(targetDir,
>>googConfiguration.getHtmlOutputFileName()), result, false);
>> @@ -665,7 +680,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         return htmlFile.toString();
>>     }
>>
>> -    protected String getTemplateDependencies(String type, String
>>projectName, String deps)
>> +    protected String getTemplateDependencies(String type, String
>>projectName, String mainClassQName, String deps)
>>     {
>>         StringBuilder depsHTML = new StringBuilder();
>>         if ("intermediate".equals(type))
>> @@ -674,7 +689,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>             depsHTML.append("\t<script type=\"text/javascript\">\n");
>>             depsHTML.append(deps);
>>             depsHTML.append("\t\tgoog.require(\"");
>> -            depsHTML.append(projectName);
>> +            depsHTML.append(mainClassQName);
>>             depsHTML.append("\");\n");
>>             depsHTML.append("\t</script>\n");
>>         }
>> @@ -687,19 +702,19 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         return depsHTML.toString();
>>     }
>>
>> -    protected String getTemplateBody(String projectName)
>> +    protected String getTemplateBody(String mainClassQName)
>>     {
>>         StringBuilder bodyHTML = new StringBuilder();
>>         bodyHTML.append("\t<script type=\"text/javascript\">\n");
>>         bodyHTML.append("\t\tnew ");
>> -        bodyHTML.append(projectName);
>> +        bodyHTML.append(mainClassQName);
>>         bodyHTML.append("()");
>>         bodyHTML.append(".start();\n");
>>         bodyHTML.append("\t</script>\n");
>>         return bodyHTML.toString();
>>     }
>>
>> -    protected void writeHTML(String type, String projectName, File
>>targetDir, String deps, List<String> additionalHTML)
>> +    protected void writeHTML(String type, String projectName, String
>>mainClassQName, File targetDir, String deps, List<String> additionalHTML)
>>             throws IOException
>>     {
>>         StringBuilder htmlFile = new StringBuilder();
>> @@ -711,12 +726,12 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         htmlFile.append("\t<link rel=\"stylesheet\" type=\"text/css\"
>>href=\"").append(projectName).append(".css\">\n");
>>
>>         htmlFile.append(getTemplateAdditionalHTML(additionalHTML));
>> -        htmlFile.append(getTemplateDependencies(type, projectName,
>>deps));
>> +        htmlFile.append(getTemplateDependencies(type, projectName,
>>mainClassQName, deps));
>>
>>         htmlFile.append("</head>\n");
>>         htmlFile.append("<body>\n");
>>
>> -        htmlFile.append(getTemplateBody(projectName));
>> +        htmlFile.append(getTemplateBody(mainClassQName));
>>
>>         htmlFile.append("</body>\n");
>>         htmlFile.append("</html>");
>> diff --git
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/Goo
>>gDepsWriter.java
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/Goo
>>gDepsWriter.java
>> index b412817..45f95b6 100644
>> ---
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/Goo
>>gDepsWriter.java
>> +++
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/Goo
>>gDepsWriter.java
>> @@ -703,10 +703,6 @@ public class GoogDepsWriter {
>>           File f;
>>
>>               String classPath = className.replace(".", File.separator);
>> -            // special case app names with underscores, but hope that
>> -            // no other class names have underscores in them
>> -        if (className.equals(mainName))
>> -             classPath = className;
>>
>>         fn = outputFolderPath + File.separator + classPath + ".js";
>>         f = new File(fn);
>> diff --git
>>a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rceListManager.java
>>b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rceListManager.java
>> index 21bd8a4..a42555a 100644
>> ---
>>a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rceListManager.java
>> +++
>>b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rceListManager.java
>> @@ -124,8 +124,10 @@ final class SourceListManager
>>             unitsToAdd = new
>>ArrayList<ICompilationUnit>(newSourcesToCreate.size());
>>             for (File file : newSourcesToCreate)
>>             {
>> +             File sourcePath = sourcePathManager.getSourcePath(file);
>> +             String qname = sourcePathManager.computeQName(sourcePath,
>>file);
>>                 ICompilationUnit unit =
>>project.getSourceCompilationUnitFactory().createCompilationUnit(
>> -                    file, DefinitionPriority.BasePriority.SOURCE_LIST,
>>0, null, null);
>> +                    file, DefinitionPriority.BasePriority.SOURCE_LIST,
>>0, qname, null);
>>
>>                 //It can be null in some cases, see
>>#ResourceBundleSourceFileHandler
>>                 if(unit != null)
>> diff --git
>>a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rcePathManager.java
>>b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rcePathManager.java
>> index 23f8bbc..366cab1 100644
>> ---
>>a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rcePathManager.java
>> +++
>>b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rcePathManager.java
>> @@ -95,6 +95,17 @@ public final class SourcePathManager
>>         return false;
>>     }
>>
>> +    public File getSourcePath(File file)
>> +    {
>> +        for (final DirectoryID directory : sourcePaths.keySet())
>> +        {
>> +            if (directory.isParentOf(file))
>> +                return directory.getFile();
>> +        }
>> +
>> +        return null;
>> +    }
>> +
>>     private void accumulateQNameFiles(Set<QNameFile> qNameFiles, File
>>directory, String baseQName, String locale,
>>             Collection<ICompilerProblem> problems, int order)
>>     {
>>
>> --
>> To stop receiving notification emails like this one, please contact
>> aharui@apache.org.
>


Re: [royale-compiler] branch develop updated: handle main MXML file in packages

Posted by Alex Harui <ah...@adobe.com.INVALID>.
I took care of it.

On 3/18/18, 1:16 AM, "Harbs" <ha...@gmail.com> wrote:

>This commit appears to break things.
>
>I’m getting the following error in Core tests:
>
>https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpaste.apa
>che.org%2FBmsg&data=02%7C01%7Caharui%40adobe.com%7C41c93109f528477fe9bb08d
>58ca8983b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636569578094796225&
>sdata=fanlDrBFFOSL0rpZNNR7IMZyFOxmeJeR5riVdFJcLH8%3D&reserved=0
><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpaste.ap
>ache.org%2FBmsg&data=02%7C01%7Caharui%40adobe.com%7C41c93109f528477fe9bb08
>d58ca8983b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636569578094796225
>&sdata=fanlDrBFFOSL0rpZNNR7IMZyFOxmeJeR5riVdFJcLH8%3D&reserved=0>
>
>Harbs
>
>> On Mar 17, 2018, at 5:16 PM, aharui@apache.org wrote:
>> 
>> This is an automated email from the ASF dual-hosted git repository.
>> 
>> aharui pushed a commit to branch develop
>> in repository 
>>https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitbox.a
>>pache.org%2Frepos%2Fasf%2Froyale-compiler.git&data=02%7C01%7Caharui%40ado
>>be.com%7C41c93109f528477fe9bb08d58ca8983b%7Cfa7b1b5a7b34438794aed2c178dec
>>ee1%7C0%7C0%7C636569578094796225&sdata=hx1FTlGgdcEVSsfSfHW0gAVPVvFwwmJdeu
>>iIQQx2QtY%3D&reserved=0
>> 
>> 
>> The following commit(s) were added to refs/heads/develop by this push:
>>     new ac500b7  handle main MXML file in packages
>> ac500b7 is described below
>> 
>> commit ac500b75530fc9094768824e4339fbd7df95e7ed
>> Author: Alex Harui <ah...@apache.org>
>> AuthorDate: Sat Mar 17 08:16:12 2018 -0700
>> 
>>    handle main MXML file in packages
>> ---
>> .../internal/codegen/js/jsc/JSCPublisher.java      | 10 ++--
>> .../internal/codegen/js/node/NodePublisher.java    | 14 ++---
>> .../codegen/mxml/royale/MXMLRoyalePublisher.java   | 61
>>++++++++++++++--------
>> .../compiler/internal/graph/GoogDepsWriter.java    |  4 --
>> .../internal/projects/SourceListManager.java       |  4 +-
>> .../internal/projects/SourcePathManager.java       | 11 ++++
>> 6 files changed, 64 insertions(+), 40 deletions(-)
>> 
>> diff --git 
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/jsc/JSCPublisher.java
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/jsc/JSCPublisher.java
>> index 8f530e2..4a54cfb 100644
>> --- 
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/jsc/JSCPublisher.java
>> +++ 
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/jsc/JSCPublisher.java
>> @@ -41,28 +41,28 @@ public class JSCPublisher extends
>>MXMLRoyalePublisher
>>     private RoyaleJSProject project;
>> 
>>     @Override
>> -    protected String getTemplateBody(String projectName)
>> +    protected String getTemplateBody(String mainClassQName)
>>     {
>> -        IDefinition def =
>>project.resolveQNameToDefinition(projectName);
>> +        IDefinition def =
>>project.resolveQNameToDefinition(mainClassQName);
>>         IDefinitionNode node = def.getNode();
>>         if (node instanceof IMXMLDocumentNode)
>>         {
>>             //we should probably customize MXML too, but for now, pass
>>it to the
>>             //default implementation -JT
>> -            return super.getTemplateBody(projectName);
>> +            return super.getTemplateBody(mainClassQName);
>>         }
>>         //for ActionScript classes, simply call the constructor by
>>default
>>         StringBuilder bodyHTML = new StringBuilder();
>>         bodyHTML.append("\t<script type=\"text/javascript\">\n");
>>         bodyHTML.append("\t\tnew ");
>> -        bodyHTML.append(projectName);
>> +        bodyHTML.append(mainClassQName);
>>         bodyHTML.append("();\n");
>>         bodyHTML.append("\t</script>\n");
>>         return bodyHTML.toString();
>>     }
>> 
>>     @Override
>> -    protected void writeHTML(String type, String projectName, File
>>targetDir,
>> +    protected void writeHTML(String type, String projectName, String
>>mainClassQName, File targetDir,
>>                              String deps, List<String> additionalHTML)
>>throws IOException
>>     {
>>         if ("intermediate".equals(type))
>> diff --git 
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/node/NodePublisher.java
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/node/NodePublisher.java
>> index bb3515d..3c2eb6f 100644
>> --- 
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/node/NodePublisher.java
>> +++ 
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/j
>>s/node/NodePublisher.java
>> @@ -37,7 +37,7 @@ public class NodePublisher extends JSCPublisher
>>     }
>> 
>>     @Override
>> -    protected String getTemplateDependencies(String type, String
>>projectName, String deps)
>> +    protected String getTemplateDependencies(String type, String
>>projectName, String mainClassQName, String deps)
>>     {
>>         StringBuilder depsJS = new StringBuilder();
>>         if ("intermediate".equals(type))
>> @@ -62,31 +62,31 @@ public class NodePublisher extends JSCPublisher
>>     }
>> 
>>     @Override
>> -    protected String getTemplateBody(String projectName)
>> +    protected String getTemplateBody(String mainClassQName)
>>     {
>>         StringBuilder bodyJS = new StringBuilder();
>>         if (exportModule)
>>         {
>>             bodyJS.append("module.exports = ");
>> -            bodyJS.append(projectName);
>> +            bodyJS.append(mainClassQName);
>>             bodyJS.append(";");
>>         }
>>         else
>>         {
>>             bodyJS.append("new ");
>> -            bodyJS.append(projectName);
>> +            bodyJS.append(mainClassQName);
>>             bodyJS.append("();");
>>         }
>>         return bodyJS.toString();
>>     }
>> 
>>     @Override
>> -    protected void writeHTML(String type, String projectName, File
>>targetDir,
>> +    protected void writeHTML(String type, String projectName, String
>>mainClassQName, File targetDir,
>>                              String deps, List<String> additionalHTML)
>>throws IOException
>>     {
>>         StringBuilder contents = new StringBuilder();
>> -        contents.append(getTemplateDependencies(type, projectName,
>>deps));
>> -        contents.append(getTemplateBody(projectName));
>> +        contents.append(getTemplateDependencies(type, projectName,
>>mainClassQName, deps));
>> +        contents.append(getTemplateBody(mainClassQName));
>>         writeFile(new File(targetDir, "index.js"), contents.toString(),
>>false);
>>     }
>> }
>> diff --git 
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/m
>>xml/royale/MXMLRoyalePublisher.java
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/m
>>xml/royale/MXMLRoyalePublisher.java
>> index 1c3e943..6ad8bbb 100644
>> --- 
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/m
>>xml/royale/MXMLRoyalePublisher.java
>> +++ 
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/m
>>xml/royale/MXMLRoyalePublisher.java
>> @@ -96,11 +96,11 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>     private boolean useStrictPublishing;
>> 
>>     private GoogDepsWriter getGoogDepsWriter(File intermediateDir,
>> -    										String projectName,
>> +    										String mainClassQName,
>>     										JSGoogConfiguration googConfiguration,
>>     										List<ISWC> swcs)
>>     {
>> -    	return new GoogDepsWriter(intermediateDir, projectName,
>>googConfiguration, swcs);
>> +    	return new GoogDepsWriter(intermediateDir, mainClassQName,
>>googConfiguration, swcs);
>>     }
>> 
>>     @Override
>> @@ -159,7 +159,25 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         // The "intermediate" is the "js-debug" output.
>>         final File intermediateDir = outputFolder;
>> 
>> +        // The source directory is the source path entry containing
>>the Main class.
>> +        List<File> sourcePaths = project.getSourcePath();
>> +        String targetFile =
>>configuration.getTargetFile().toLowerCase();
>> +        File imageSrcDir = null;
>> +        for (File sp : sourcePaths)
>> +        {
>> +        	String lowercasePath = sp.getAbsolutePath().toLowerCase();
>> +        	if (targetFile.startsWith(lowercasePath))
>> +        		imageSrcDir = sp;
>> +        }
>>         final String projectName =
>>FilenameUtils.getBaseName(configuration.getTargetFile());
>> +        String qName = null;
>> +        try {
>> +			qName = project.mainCU.getQualifiedNames().get(0);
>> +		} catch (InterruptedException e) {
>> +			// TODO Auto-generated catch block
>> +			e.printStackTrace();
>> +		}
>> +		final String mainClassQName = qName;
>>         final String outputFileName = projectName + "." +
>>project.getBackend().getOutputExtension();
>> 
>>         // The "release" is the "js-release" directory.
>> @@ -184,11 +202,8 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         IOFileFilter assetFiles = FileFilterUtils.or(pngSuffixFilter,
>>jpgSuffixFilter, jpegSuffixFilter, svgSuffixFilter, gifSuffixFilter,
>>                 jsonSuffixFilter);
>>         IOFileFilter resourceFilter =
>>FileFilterUtils.or(DirectoryFileFilter.DIRECTORY, assetFiles);
>> -        // The source directory is the directory containing the Main
>>class.
>> -        File imageSrcDir = new
>>File(configuration.getTargetFile()).getAbsoluteFile().getParentFile();
>>         // FIXME: All images need to be located relative to the Main
>>class ... for Maven this is a problem.
>>         FileUtils.copyDirectory(imageSrcDir, intermediateDir,
>>resourceFilter);
>> -        
>>         // Iterate over all themes SWCs and add the contents of any
>>included files in
>>         // an assets folder to an assets folder in the destination
>>folder.
>>         final ISWCManager swcManager =
>>project.getWorkspace().getSWCManager();
>> @@ -347,7 +362,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         // Add all files generated by the compiler to the compilation
>>unit.
>>         
>>/////////////////////////////////////////////////////////////////////////
>>////////
>> 
>> -        GoogDepsWriter gdw = getGoogDepsWriter(intermediateDir,
>>projectName, googConfiguration, allswcs);
>> +        GoogDepsWriter gdw = getGoogDepsWriter(intermediateDir,
>>mainClassQName, googConfiguration, allswcs);
>>         // This list contains all files generated by the compiler, this
>>is both the
>>         // compiled js files created by the sources of the current
>>project plus the
>>         // js files of used dependencies.
>> @@ -365,10 +380,10 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         // is generated here so it can be used for outputting the html
>>templates.
>>         String depsFileData = gdw.generateDeps(project, problems);
>> 
>> -        if (project.isModule(projectName))
>> +        if (project.isModule(mainClassQName))
>>         {
>>         	// need better test someday
>> -        	depsFileData += "\ngoog.require('" + projectName + "');\n";
>> +        	depsFileData += "\ngoog.require('" + mainClassQName + "');\n";
>>             writeFile(new File(intermediateDir, projectName +
>>"__deps.js"), depsFileData, false);
>>             Set<String> provideds = computeProvideds(depsFileData);
>>             compilerWrapper.setProvideds(provideds);
>> @@ -380,17 +395,17 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>> 	        // Create the index.html for the debug-js version.
>> 	        if (!((JSGoogConfiguration)configuration).getSkipTranspile()) {
>> 	            if (template != null) {
>> -	                writeTemplate(template, "intermediate", projectName,
>>intermediateDir, depsFileData, gdw.additionalHTML);
>> +	                writeTemplate(template, "intermediate", projectName,
>>mainClassQName, intermediateDir, depsFileData, gdw.additionalHTML);
>> 	            } else {
>> -	                writeHTML("intermediate", projectName,
>>intermediateDir, depsFileData, gdw.additionalHTML);
>> +	                writeHTML("intermediate", projectName,
>>mainClassQName, intermediateDir, depsFileData, gdw.additionalHTML);
>> 	            }
>> 	        }
>> 	        // Create the index.html for the release-js version.
>> 	        if (configuration.release()) {
>> 	            if (template != null) {
>> -	                writeTemplate(template, "release", projectName,
>>releaseDir, depsFileData, gdw.additionalHTML);
>> +	                writeTemplate(template, "release", projectName,
>>mainClassQName, releaseDir, depsFileData, gdw.additionalHTML);
>> 	            } else {
>> -	                writeHTML("release", projectName, releaseDir, null,
>>gdw.additionalHTML);
>> +	                writeHTML("release", projectName, mainClassQName,
>>releaseDir, null, gdw.additionalHTML);
>> 	            }
>> 	        }
>>         }       
>> @@ -608,7 +623,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         return code;
>>     }
>> 
>> -    protected void writeTemplate(File template, String type, String
>>projectName, File targetDir, String deps, List<String> additionalHTML)
>> +    protected void writeTemplate(File template, String type, String
>>projectName, String mainClassQName, File targetDir, String deps,
>>List<String> additionalHTML)
>>     		throws IOException
>> 	{
>> 	    // Check if the template exists.
>> @@ -629,7 +644,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>             bgcolor = ta.getBackgroundColor();
>>             pageTitle = ta.getPageTitle();
>>         }
>> -        String result = input.replaceAll("\\$\\{application\\}",
>>projectName);
>> +        String result = input.replaceAll("\\$\\{application\\}",
>>mainClassQName);
>>         if (bgcolor != null)
>>             result = result.replaceAll("\\$\\{bgcolor\\}", bgcolor);
>>         //result = result.replaceAll("\\$\\{expressInstallSwf\\}",
>>expressInstallSwf);
>> @@ -646,10 +661,10 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>> 
>>         StringBuilder addHTML = new StringBuilder();
>>         addHTML.append(getTemplateAdditionalHTML(additionalHTML));
>> -		addHTML.append(getTemplateDependencies(type, projectName, deps));
>> +		addHTML.append(getTemplateDependencies(type, projectName,
>>mainClassQName, deps));
>>         result = result.replaceAll("\\$\\{head\\}", addHTML.toString());
>> 
>> -        String templateBody = getTemplateBody(projectName);
>> +        String templateBody = getTemplateBody("release".equals(type) ?
>>projectName : mainClassQName);
>>         result = result.replaceAll("\\$\\{body\\}", templateBody);
>> 
>> 		writeFile(new File(targetDir,
>>googConfiguration.getHtmlOutputFileName()), result, false);
>> @@ -665,7 +680,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         return htmlFile.toString();
>>     }
>> 
>> -    protected String getTemplateDependencies(String type, String
>>projectName, String deps)
>> +    protected String getTemplateDependencies(String type, String
>>projectName, String mainClassQName, String deps)
>>     {
>>         StringBuilder depsHTML = new StringBuilder();
>>         if ("intermediate".equals(type))
>> @@ -674,7 +689,7 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>             depsHTML.append("\t<script type=\"text/javascript\">\n");
>>             depsHTML.append(deps);
>>             depsHTML.append("\t\tgoog.require(\"");
>> -            depsHTML.append(projectName);
>> +            depsHTML.append(mainClassQName);
>>             depsHTML.append("\");\n");
>>             depsHTML.append("\t</script>\n");
>>         }
>> @@ -687,19 +702,19 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         return depsHTML.toString();
>>     }
>> 
>> -	protected String getTemplateBody(String projectName)
>> +	protected String getTemplateBody(String mainClassQName)
>>     {
>>         StringBuilder bodyHTML = new StringBuilder();
>>         bodyHTML.append("\t<script type=\"text/javascript\">\n");
>>         bodyHTML.append("\t\tnew ");
>> -        bodyHTML.append(projectName);
>> +        bodyHTML.append(mainClassQName);
>>         bodyHTML.append("()");
>>         bodyHTML.append(".start();\n");
>>         bodyHTML.append("\t</script>\n");
>>         return bodyHTML.toString();
>>     }
>> 
>> -    protected void writeHTML(String type, String projectName, File
>>targetDir, String deps, List<String> additionalHTML)
>> +    protected void writeHTML(String type, String projectName, String
>>mainClassQName, File targetDir, String deps, List<String> additionalHTML)
>>             throws IOException
>>     {
>>         StringBuilder htmlFile = new StringBuilder();
>> @@ -711,12 +726,12 @@ public class MXMLRoyalePublisher extends
>>JSGoogPublisher implements IJSPublisher
>>         htmlFile.append("\t<link rel=\"stylesheet\" type=\"text/css\"
>>href=\"").append(projectName).append(".css\">\n");
>> 
>>         htmlFile.append(getTemplateAdditionalHTML(additionalHTML));
>> -        htmlFile.append(getTemplateDependencies(type, projectName,
>>deps));
>> +        htmlFile.append(getTemplateDependencies(type, projectName,
>>mainClassQName, deps));
>> 
>>         htmlFile.append("</head>\n");
>>         htmlFile.append("<body>\n");
>> 
>> -        htmlFile.append(getTemplateBody(projectName));
>> +        htmlFile.append(getTemplateBody(mainClassQName));
>> 
>>         htmlFile.append("</body>\n");
>>         htmlFile.append("</html>");
>> diff --git 
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/Goo
>>gDepsWriter.java 
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/Goo
>>gDepsWriter.java
>> index b412817..45f95b6 100644
>> --- 
>>a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/Goo
>>gDepsWriter.java
>> +++ 
>>b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/graph/Goo
>>gDepsWriter.java
>> @@ -703,10 +703,6 @@ public class GoogDepsWriter {
>> 	    File f;
>> 	    
>> 		String classPath = className.replace(".", File.separator);
>> -		// special case app names with underscores, but hope that
>> -		// no other class names have underscores in them
>> -        if (className.equals(mainName))
>> -        	classPath = className;
>> 
>>         fn = outputFolderPath + File.separator + classPath + ".js";
>>         f = new File(fn);
>> diff --git 
>>a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rceListManager.java
>>b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rceListManager.java
>> index 21bd8a4..a42555a 100644
>> --- 
>>a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rceListManager.java
>> +++ 
>>b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rceListManager.java
>> @@ -124,8 +124,10 @@ final class SourceListManager
>>             unitsToAdd = new
>>ArrayList<ICompilationUnit>(newSourcesToCreate.size());
>>             for (File file : newSourcesToCreate)
>>             {
>> +            	File sourcePath = sourcePathManager.getSourcePath(file);
>> +            	String qname = sourcePathManager.computeQName(sourcePath,
>>file);
>>                 ICompilationUnit unit =
>>project.getSourceCompilationUnitFactory().createCompilationUnit(
>> -                    file, DefinitionPriority.BasePriority.SOURCE_LIST,
>>0, null, null);
>> +                    file, DefinitionPriority.BasePriority.SOURCE_LIST,
>>0, qname, null);
>> 
>>                 //It can be null in some cases, see
>>#ResourceBundleSourceFileHandler
>>                 if(unit != null)
>> diff --git 
>>a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rcePathManager.java
>>b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rcePathManager.java
>> index 23f8bbc..366cab1 100644
>> --- 
>>a/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rcePathManager.java
>> +++ 
>>b/compiler/src/main/java/org/apache/royale/compiler/internal/projects/Sou
>>rcePathManager.java
>> @@ -95,6 +95,17 @@ public final class SourcePathManager
>>         return false;
>>     }
>> 
>> +    public File getSourcePath(File file)
>> +    {
>> +        for (final DirectoryID directory : sourcePaths.keySet())
>> +        {
>> +            if (directory.isParentOf(file))
>> +                return directory.getFile();
>> +        }
>> +        
>> +        return null;
>> +    }
>> +    
>>     private void accumulateQNameFiles(Set<QNameFile> qNameFiles, File
>>directory, String baseQName, String locale,
>>             Collection<ICompilerProblem> problems, int order)
>>     {
>> 
>> -- 
>> To stop receiving notification emails like this one, please contact
>> aharui@apache.org.
>