I agree. It doesn't seem correct to place the flag at the project level. I
want to see that coupling go away. I was thinking about adding some new
methods to JSEmitter and JSSubEmitter (maybe something like
setNeedLanguage() and setNeedXML()), that would set flags on the emitter
instead. The emitter isn't reused across multiple files, so that seems like
a better way to handle it.

I have more I need to do for source maps, so I'm going to focus on that for
a bit. I'll leave a note on this thread if I start working on that
refactoring.

- Josh



On Thu, Apr 7, 2016 at 10:44 PM, Alex Harui <[email protected]> wrote:

> Thanks Josh.
>
> It occurs to me that someday we may want to tweak the implementation
> again.  I think there is a danger to using a Project level flag to set
> output on a per-file basis, and I think we should be able to use the
> project dependency map instead of a string search to determine if XML is
> really being used in a file.  Let me know if you want to take a shot at the
> tweak, otherwise I will try to find time.  My main short term goal was to
> unblock Harbs so I'm not too worried about the current code.
>
> -Alex
>
> From: Josh Tynjala <[email protected]>
> Date: Thursday, April 7, 2016 at 4:39 PM
> To: Alex Harui <[email protected]>
> Cc: "[email protected]" <[email protected]>
>
> Subject: Re: [1/2] git commit: [flex-falcon] [refs/heads/develop] -
> changes to get XML in the requires
>
> No problem! It's done.
>
> - Josh
>
> On Thu, Apr 7, 2016 at 11:49 AM, Alex Harui <[email protected]> wrote:
>
>> Ok. I won't have time to rework it until this evening.  If you have time
>> to do it sooner that is fine too.
>>
>>
>> Sent from my LG G3, an AT&T 4G LTE smartphone
>>
>>
>> ------ Original message------
>>
>> *From: *Josh Tynjala
>>
>> *Date: *Thu, Apr 7, 2016 11:36 AM
>>
>> *To: *[email protected];
>>
>> *Subject:*Re: [1/2] git commit: [flex-falcon] [refs/heads/develop] -
>> changes to get XML in the requires
>>
>>
>> Hey Alex,
>>
>> The require for Language does not need to be appended in
>> MXMLFlexJSPublisher anymore. I moved it into the postProcess() step of
>> JSFlexJSEmitter. The reason I did this is because inserting an extra line
>> near the top of the file, after the file had already been written, broke
>> its source map. Everything was off by one line. In the emitter, it's still
>> possible to adjust the source maps to account for that extra line before
>> the file gets written.
>>
>> Ideally, the require for XML would be part of the emitter's postProcess()
>> too, for the same reason.
>>
>> - Josh
>>
>> On Thu, Apr 7, 2016 at 10:55 AM, <[email protected]> wrote:
>>
>> > Repository: flex-falcon
>> > Updated Branches:
>> >   refs/heads/develop 88a9bc28c -> bdc933e4c
>> >
>> >
>> > changes to get XML in the requires
>> >
>> >
>> > Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
>> > Commit:
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/6c6584da
>> > Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/6c6584da
>> > Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/6c6584da
>> >
>> > Branch: refs/heads/develop
>> > Commit: 6c6584da5be8ab5c4df0012110479b4d7d336a8b
>> > Parents: 88a9bc2
>> > Author: Alex Harui <[email protected]>
>> > Authored: Thu Apr 7 10:39:28 2016 -0700
>> > Committer: Alex Harui <[email protected]>
>> > Committed: Thu Apr 7 10:42:59 2016 -0700
>> >
>> > ----------------------------------------------------------------------
>> >  .../js/flexjs/TestFlexJSGlobalClasses.java      |  1 +
>> >  .../codegen/js/flexjs/TestFlexJSProject.java    | 15 +++
>> >  .../flex/compiler/internal/test/TestBase.java   | 98
>> ++++++++++++++------
>> >  .../flexjs/projects/interfaces/Test_result.js   |  1 +
>> >  .../flexjs/projects/super/Base_result.js        |  1 +
>> >  .../flexjs/projects/xml_requires/XMLRequire.as  | 30 ++++++
>> >  .../projects/xml_requires/XMLRequire_result.js  | 74 +++++++++++++++
>> >  .../codegen/js/jx/PackageHeaderEmitter.java     |  2 +-
>> >  .../mxml/flexjs/MXMLFlexJSPublisher.java        | 71 ++++++++++++++
>> >  .../internal/projects/FlexJSProject.java        |  5 +
>> >  compiler.tests/.classpath                       |  1 +
>> >  11 files changed, 270 insertions(+), 29 deletions(-)
>> > ----------------------------------------------------------------------
>> >
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
>> >
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
>> > index df663af..32f28f5 100644
>> > ---
>> >
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
>> > +++
>> >
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
>> > @@ -27,6 +27,7 @@ import
>> > org.apache.flex.compiler.internal.projects.FlexJSProject;
>> >  import org.apache.flex.compiler.internal.tree.as.VariableNode;
>> >  import org.apache.flex.compiler.tree.as.IASNode;
>> >  import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
>> > +import org.apache.flex.compiler.tree.as.IFileNode;
>> >  import org.apache.flex.compiler.tree.as.IForLoopNode;
>> >  import org.apache.flex.compiler.tree.as.IFunctionCallNode;
>> >  import org.apache.flex.compiler.tree.as.IFunctionNode;
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
>> >
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
>> > index fec0d2f..c057f92 100644
>> > ---
>> >
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
>> > +++
>> >
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSProject.java
>> > @@ -131,6 +131,21 @@ public class TestFlexJSProject extends
>> TestGoogProject
>> >      }
>> >
>> >      @Test
>> > +    public void test_XMLRequires()
>> > +    {
>> > +        String testDirPath = projectDirPath + "/xml_requires";
>> > +
>> > +        String fileName = "XMLRequire";
>> > +
>> > +        sourcePath = new
>> > File(TestAdapterFactory.getTestAdapter().getUnitTestBaseDir(),
>> > +                projectDirPath + "/xml_requires").getPath();
>> > +
>> > +        List<String> compiledFileNames = compileProject(fileName,
>> > testDirPath);
>> > +
>> > +        assertProjectOut(compiledFileNames, testDirPath);
>> > +    }
>> > +
>> > +    @Test
>> >      public void test_Overrides()
>> >      {
>> >          String testDirPath = projectDirPath + "/overrides";
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
>> >
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
>> > index 186f690..d8d6e36 100644
>> > ---
>> >
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
>> > +++
>> >
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
>> > @@ -40,6 +40,7 @@ import java.util.List;
>> >  import org.apache.flex.compiler.codegen.as.IASEmitter;
>> >  import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
>> >  import org.apache.flex.compiler.config.Configurator;
>> > +import org.apache.flex.compiler.constants.IASLanguageConstants;
>> >  import org.apache.flex.compiler.driver.IBackend;
>> >  import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
>> >  import org.apache.flex.compiler.internal.codegen.as.ASFilterWriter;
>> > @@ -350,7 +351,7 @@ public class TestBase implements ITestBase
>> >                         qname = mainCU.getQualifiedNames().get(0);
>> >                 final File outputClassFile = getOutputClassFile(qname
>> >                         + "_output", outputRootDir);
>> > -               appendLanguage(outputClassFile.getAbsolutePath(),
>> qname);
>> > +               appendLanguageAndXML(outputClassFile.getAbsolutePath(),
>> > qname);
>> >                 } catch (InterruptedException e) {
>> >                         // TODO Auto-generated catch block
>> >                         e.printStackTrace();
>> > @@ -374,34 +375,75 @@ public class TestBase implements ITestBase
>> >                 fw.close();
>> >         }
>> >
>> > -    private void appendLanguage(String path, String projectName)
>> > -       throws IOException
>> > -       {
>> > -               StringBuilder appendString = new StringBuilder();
>> > -
>> >  appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > -
>> appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
>> > -
>> >  appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > -
>> >  appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
>> > -
>> >  appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > -
>> >  appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
>> > -
>> appendString.append(ASEmitterTokens.SEMICOLON.getToken());
>> > -
>> > -           String fileData = readCode(new File(path));
>> > -           int reqidx = fileData.indexOf(appendString.toString());
>> > -
>> > +    private void appendLanguageAndXML(String path, String projectName)
>> > throws IOException
>> > +    {
>> > +        StringBuilder appendString = new StringBuilder();
>> > +
>> appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
>> > +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +
>> > appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
>> > +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
>> > +        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
>> > +        appendString.append("\n");
>> > +
>> > +        String fileData = readCode(new File(path));
>> > +        int reqidx = fileData.indexOf(appendString.toString());
>> >             if (reqidx == -1 && project instanceof FlexJSProject &&
>> > ((FlexJSProject)project).needLanguage)
>> > -           {
>> > -               reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > -               if (reqidx == -1)
>> > -                       reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > -               reqidx = fileData.indexOf(";", reqidx);
>> > -                   String after = fileData.substring(reqidx + 1);
>> > -                   String before = fileData.substring(0, reqidx + 1);
>> > -                   String s = before + "\n" + appendString.toString() +
>> > after;
>> > -                   writeFile(path, s, false);
>> > -           }
>> > -       }
>> > -
>> > +        {
>> > +               boolean afterProvide = false;
>> > +            reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +            if (reqidx == -1)
>> > +            {
>> > +               afterProvide = true;
>> > +                reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > +            }
>> > +            reqidx = fileData.indexOf(";", reqidx);
>> > +            String after = fileData.substring(reqidx + 1);
>> > +            String before = fileData.substring(0, reqidx + 1);
>> > +            if (afterProvide)
>> > +               before += "\n";
>> > +            String s = before + "\n" + appendString.toString() + after;
>> > +            writeFile(path, s, false);
>> > +        }
>> > +
>> > +        StringBuilder appendStringXML = new StringBuilder();
>> > +
>> > appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
>> > +
>> appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +        appendStringXML.append(IASLanguageConstants.XML);
>> > +
>> appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
>> > +        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
>> > +        appendStringXML.append("\n");
>> > +
>> > +        if (project instanceof FlexJSProject &&
>> > ((FlexJSProject)project).needXML)
>> > +        {
>> > +               fileData = readCode(new File(path));
>> > +               reqidx = fileData.indexOf(appendStringXML.toString());
>> > +               if (reqidx == -1)
>> > +               {
>> > +                       boolean afterProvide = false;
>> > +                   reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +                   if (reqidx == -1)
>> > +                   {
>> > +                       afterProvide = true;
>> > +                       reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > +                   }
>> > +                   reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +                   if (reqidx == -1)
>> > +                       reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > +                   reqidx = fileData.indexOf(";", reqidx);
>> > +                   String after = fileData.substring(reqidx + 1);
>> > +                   String before = fileData.substring(0, reqidx + 1);
>> > +                   if (afterProvide)
>> > +                       before += "\n";
>> > +                   String s = before + "\n" +
>> appendStringXML.toString()
>> > + after;
>> > +                   writeFile(path, s, false);
>> > +               }
>> > +        }
>> > +    }
>> > +
>> >         protected String readCode(File file)
>> >         {
>> >             String code = "";
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
>> > ----------------------------------------------------------------------
>> > diff --git
>> > a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
>> > b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
>> > index 42ab0f4..92bb29f 100644
>> > ---
>> > a/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
>> > +++
>> > b/compiler.jx.tests/test-files/flexjs/projects/interfaces/Test_result.js
>> > @@ -29,6 +29,7 @@ goog.require('org.apache.flex.utils.Language');
>> >
>> >
>> >
>> > +
>> >  /**
>> >   * @constructor
>> >   * @extends {classes.A}
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
>> > ----------------------------------------------------------------------
>> > diff --git
>> > a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
>> > b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
>> > index 1306674..db3ade9 100644
>> > --- a/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
>> > +++ b/compiler.jx.tests/test-files/flexjs/projects/super/Base_result.js
>> > @@ -26,6 +26,7 @@ goog.require('org.apache.flex.utils.Language');
>> >
>> >
>> >
>> > +
>> >  /**
>> >   * @constructor
>> >   * @extends {Super}
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
>> >
>> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
>> > new file mode 100644
>> > index 0000000..4a997c9
>> > --- /dev/null
>> > +++
>> >
>> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire.as
>> > @@ -0,0 +1,30 @@
>> >
>> >
>> +////////////////////////////////////////////////////////////////////////////////
>> > +//
>> > +//  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
>> > +{
>> > +
>> > +       public class XMLRequire
>> > +       {
>> > +               public function XMLRequire()
>> > +        {
>> > +            var myXML:XML = <node />;
>> > +        }
>> > +       }
>> > +
>> > +}
>> > \ No newline at end of file
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
>> >
>> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
>> > new file mode 100644
>> > index 0000000..d6affbe
>> > --- /dev/null
>> > +++
>> >
>> b/compiler.jx.tests/test-files/flexjs/projects/xml_requires/XMLRequire_result.js
>> > @@ -0,0 +1,74 @@
>> > +/**
>> > + * Licensed 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.
>> > + */
>> > +/**
>> > + * XMLRequire
>> > + *
>> > + * @fileoverview
>> > + *
>> > + * @suppress {checkTypes|accessControls}
>> > + */
>> > +
>> > +goog.provide('XMLRequire');
>> > +
>> > +goog.require('XML');
>> > +
>> > +
>> > +
>> > +
>> > +
>> > +/**
>> > + * @constructor
>> > + */
>> > +XMLRequire = function() {
>> > +  var /** @type {XML} */ myXML = new XML( '<node />') ;
>> > +};
>> > +
>> > +
>> > +/**
>> > + * Metadata
>> > + *
>> > + * @type {Object.<string, Array.<Object>>}
>> > + */
>> > +XMLRequire.prototype.FLEXJS_CLASS_INFO = { names: [{ name:
>> 'XMLRequire',
>> > qName: 'XMLRequire'}] };
>> > +
>> > +
>> > +/**
>> > + * Prevent renaming of class. Needed for reflection.
>> > + */
>> > +goog.exportSymbol('XMLRequire', XMLRequire);
>> > +
>> > +
>> > +
>> > +/**
>> > + * Reflection
>> > + *
>> > + * @return {Object.<string, Function>}
>> > + */
>> > +XMLRequire.prototype.FLEXJS_REFLECTION_INFO = function () {
>> > +  return {
>> > +    variables: function () {
>> > +      return {
>> > +      };
>> > +    },
>> > +    accessors: function () {
>> > +      return {
>> > +      };
>> > +    },
>> > +    methods: function () {
>> > +      return {
>> > +        'XMLRequire': { type: '', declaredBy: 'XMLRequire'}
>> > +      };
>> > +    }
>> > +  };
>> > +};
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
>> >
>> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
>> > index 48acf5b..d47c6dc 100644
>> > ---
>> >
>> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
>> > +++
>> >
>> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
>> > @@ -208,7 +208,7 @@ public class PackageHeaderEmitter extends
>> JSSubEmitter
>> > implements
>> >
>> >                  if (NativeUtils.isNative(imp))
>> >                  {
>> > -                       if (!(imp.equals("QName") ||
>> > imp.equals("Namespace")))
>> > +                       if (!(imp.equals("QName") ||
>> > imp.equals("Namespace") || imp.equals("XML") || imp.equals("XMLList")))
>> >                                 continue;
>> >                  }
>> >
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> >
>> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> > index 347e01c..4dcc1be 100644
>> > ---
>> >
>> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> > +++
>> >
>> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> > @@ -42,6 +42,7 @@ import
>> org.apache.commons.io.filefilter.RegexFileFilter;
>> >  import org.apache.flex.compiler.clients.problems.ProblemQuery;
>> >  import org.apache.flex.compiler.codegen.js.IJSPublisher;
>> >  import org.apache.flex.compiler.config.Configuration;
>> > +import org.apache.flex.compiler.constants.IASLanguageConstants;
>> >  import org.apache.flex.compiler.css.ICSSPropertyValue;
>> >  import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
>> >  import org.apache.flex.compiler.internal.codegen.js.JSSharedData;
>> > @@ -278,6 +279,7 @@ public class MXMLFlexJSPublisher extends
>> > JSGoogPublisher implements IJSPublisher
>> >
>> >          appendExportSymbol(projectIntermediateJSFilePath, projectName);
>> >          appendEncodedCSS(projectIntermediateJSFilePath, projectName);
>> > +        appendLanguageAndXML(projectIntermediateJSFilePath,
>> projectName);
>> >
>> >          // if (!subsetGoog)
>> >          // {
>> > @@ -525,6 +527,75 @@ public class MXMLFlexJSPublisher extends
>> > JSGoogPublisher implements IJSPublisher
>> >          }
>> >      }
>> >
>> > +    private void appendLanguageAndXML(String path, String projectName)
>> > throws IOException
>> > +    {
>> > +        StringBuilder appendString = new StringBuilder();
>> > +
>> appendString.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +        appendString.append(ASEmitterTokens.PAREN_OPEN.getToken());
>> > +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +
>> > appendString.append(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
>> > +        appendString.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +        appendString.append(ASEmitterTokens.PAREN_CLOSE.getToken());
>> > +        appendString.append(ASEmitterTokens.SEMICOLON.getToken());
>> > +        appendString.append("\n");
>> > +
>> > +        String fileData = readCode(new File(path));
>> > +        int reqidx = fileData.indexOf(appendString.toString());
>> > +        if (reqidx == -1 && project.needLanguage)
>> > +        {
>> > +               boolean afterProvide = false;
>> > +            reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +            if (reqidx == -1)
>> > +            {
>> > +               afterProvide = true;
>> > +                reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > +            }
>> > +            reqidx = fileData.indexOf(";", reqidx);
>> > +            String after = fileData.substring(reqidx + 1);
>> > +            String before = fileData.substring(0, reqidx + 1);
>> > +            if (afterProvide)
>> > +               before += "\n";
>> > +            String s = before + "\n" + appendString.toString() + after;
>> > +            writeFile(path, s, false);
>> > +        }
>> > +
>> > +        StringBuilder appendStringXML = new StringBuilder();
>> > +
>> > appendStringXML.append(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +        appendStringXML.append(ASEmitterTokens.PAREN_OPEN.getToken());
>> > +
>> appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +        appendStringXML.append(IASLanguageConstants.XML);
>> > +
>> appendStringXML.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
>> > +        appendStringXML.append(ASEmitterTokens.PAREN_CLOSE.getToken());
>> > +        appendStringXML.append(ASEmitterTokens.SEMICOLON.getToken());
>> > +        appendStringXML.append("\n");
>> > +
>> > +        if (project.needXML)
>> > +        {
>> > +               fileData = readCode(new File(path));
>> > +               reqidx = fileData.indexOf(appendStringXML.toString());
>> > +               if (reqidx == -1)
>> > +               {
>> > +                       boolean afterProvide = false;
>> > +                   reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +                   if (reqidx == -1)
>> > +                   {
>> > +                       afterProvide = true;
>> > +                       reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > +                   }
>> > +                   reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_REQUIRE.getToken());
>> > +                   if (reqidx == -1)
>> > +                       reqidx =
>> > fileData.lastIndexOf(JSGoogEmitterTokens.GOOG_PROVIDE.getToken());
>> > +                   reqidx = fileData.indexOf(";", reqidx);
>> > +                   String after = fileData.substring(reqidx + 1);
>> > +                   String before = fileData.substring(0, reqidx + 1);
>> > +                   if (afterProvide)
>> > +                       before += "\n";
>> > +                   String s = before + "\n" +
>> appendStringXML.toString()
>> > + after;
>> > +                   writeFile(path, s, false);
>> > +               }
>> > +        }
>> > +    }
>> > +
>> >      protected String readCode(File file)
>> >      {
>> >          String code = "";
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> >
>> a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
>> >
>> b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
>> > index a1098a7..67869ab 100644
>> > ---
>> >
>> a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
>> > +++
>> >
>> b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
>> > @@ -101,7 +101,11 @@ public class FlexJSProject extends FlexProject
>> >                      }
>> >                  }
>> >                  else if (!isExternalLinkage(to) ||
>> > qname.equals("Namespace"))
>> > +                {
>> > +                       if (qname.equals("XML"))
>> > +                               needXML = true;
>> >                      reqs.put(qname, dt);
>> > +                }
>> >              }
>> >          }
>> >          else
>> > @@ -134,6 +138,7 @@ public class FlexJSProject extends FlexProject
>> >
>> >      public boolean needLanguage;
>> >      public boolean needCSS;
>> > +    public boolean needXML;
>> >
>> >      private LinkageChecker linkageChecker;
>> >      private ITargetSettings ts;
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6c6584da/compiler.tests/.classpath
>> > ----------------------------------------------------------------------
>> > diff --git a/compiler.tests/.classpath b/compiler.tests/.classpath
>> > index c8aaecc..7508ebe 100644
>> > --- a/compiler.tests/.classpath
>> > +++ b/compiler.tests/.classpath
>> > @@ -9,5 +9,6 @@
>> >         <classpathentry kind="lib" path="/compiler/lib/commons-io.jar"/>
>> >         <classpathentry kind="src" path="/compiler"/>
>> >         <classpathentry kind="lib" path="/compiler/lib/guava.jar"/>
>> > +       <classpathentry kind="lib"
>> > path="/compiler.tests/lib/commons-compress-1.10.jar"/>
>> >         <classpathentry kind="output" path="classes"/>
>> >  </classpath>
>> >
>> >
>>
>
>

Reply via email to