JS: move processing metaInfo to TranslationResult

This commit is contained in:
Michael Nedzelsky
2015-03-25 14:57:28 +03:00
parent dbe59190ed
commit 5a73bd19c5
5 changed files with 28 additions and 22 deletions
@@ -192,10 +192,6 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
} }
OutputUtilsPackage.writeAll(outputFiles, outputDir, messageCollector); OutputUtilsPackage.writeAll(outputFiles, outputDir, messageCollector);
if (arguments.metaInfo != null) {
new KotlinJavaScriptSerializer().serialize(config.getModuleId(), analysisResult.getModuleDescriptor(), new File(arguments.metaInfo));
}
return OK; return OK;
} }
@@ -410,8 +410,9 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase {
@NotNull @NotNull
private static String[] k2jsOutput(String moduleName) { private static String[] k2jsOutput(String moduleName) {
String outputDir = "out/production/" + moduleName; String outputDir = "out/production/" + moduleName;
String[] result = new String[1]; String[] result = new String[2];
result[0] = outputDir + "/" + moduleName + ".js"; result[0] = outputDir + "/" + moduleName + ".js";
result[1] = outputDir + "/" + moduleName + ".meta.js";
return result; return result;
} }
@@ -560,7 +561,7 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase {
return klass(moduleName, AsmUtil.internalNameByFqNameWithoutInnerClasses(packagePartFqName)); return klass(moduleName, AsmUtil.internalNameByFqNameWithoutInnerClasses(packagePartFqName));
} }
private static enum Operation { private enum Operation {
CHANGE, DELETE CHANGE, DELETE
} }
+1
View File
@@ -14,6 +14,7 @@
<orderEntry type="module" module-name="js.frontend" exported="" /> <orderEntry type="module" module-name="js.frontend" exported="" />
<orderEntry type="module" module-name="js.inliner" exported="" /> <orderEntry type="module" module-name="js.inliner" exported="" />
<orderEntry type="module" module-name="js.parser" /> <orderEntry type="module" module-name="js.parser" />
<orderEntry type="module" module-name="js.serializer" />
<orderEntry type="module" module-name="util" /> <orderEntry type="module" module-name="util" />
</component> </component>
</module> </module>
@@ -79,6 +79,6 @@ public final class K2JSTranslator {
JsProgram program = JsInliner.process(context); JsProgram program = JsInliner.process(context);
if (hasError(diagnostics)) return new TranslationResult.Fail(diagnostics); if (hasError(diagnostics)) return new TranslationResult.Fail(diagnostics);
return new TranslationResult.Success(config, files, program, diagnostics); return new TranslationResult.Success(config, files, program, diagnostics, moduleDescriptor);
} }
} }
@@ -16,26 +16,25 @@
package org.jetbrains.kotlin.js.facade package org.jetbrains.kotlin.js.facade
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
import com.google.dart.compiler.backend.js.ast.JsProgram import com.google.dart.compiler.backend.js.ast.JsProgram
import kotlin.properties.Delegates import com.google.dart.compiler.util.TextOutput
import org.jetbrains.kotlin.js.sourceMap.SourceMapBuilder
import com.google.dart.compiler.util.TextOutputImpl import com.google.dart.compiler.util.TextOutputImpl
import org.jetbrains.kotlin.js.config.Config import com.intellij.openapi.util.text.StringUtil
import org.jetbrains.kotlin.backend.common.output.OutputFile import com.intellij.openapi.vfs.VfsUtilCore
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection import org.jetbrains.kotlin.backend.common.output.OutputFileCollection
import org.jetbrains.kotlin.backend.common.output.SimpleOutputFile
import org.jetbrains.kotlin.backend.common.output.SimpleOutputFileCollection
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.js.config.Config
import org.jetbrains.kotlin.js.sourceMap.JsSourceGenerationVisitor import org.jetbrains.kotlin.js.sourceMap.JsSourceGenerationVisitor
import org.jetbrains.kotlin.js.sourceMap.SourceMap3Builder import org.jetbrains.kotlin.js.sourceMap.SourceMap3Builder
import com.google.dart.compiler.util.TextOutput import org.jetbrains.kotlin.js.sourceMap.SourceMapBuilder
import java.io.File
import org.jetbrains.kotlin.utils.fileUtils.readTextOrEmpty
import com.intellij.util.containers.ContainerUtil
import org.jetbrains.kotlin.psi.JetFile import org.jetbrains.kotlin.psi.JetFile
import com.intellij.openapi.vfs.VirtualFile import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
import com.intellij.openapi.vfs.VfsUtilCore import org.jetbrains.kotlin.utils.fileUtils.readTextOrEmpty
import org.jetbrains.kotlin.backend.common.output.SimpleOutputFile import org.jetbrains.kotlin.utils.serializer.KotlinJavaScriptSerializer
import com.intellij.openapi.util.text.StringUtil import java.io.File
import org.jetbrains.kotlin.backend.common.output.SimpleOutputFileCollection import java.util.ArrayList
public abstract class TranslationResult protected (public val diagnostics: Diagnostics) { public abstract class TranslationResult protected (public val diagnostics: Diagnostics) {
@@ -45,7 +44,8 @@ public abstract class TranslationResult protected (public val diagnostics: Diagn
private val config: Config, private val config: Config,
private val files: List<JetFile>, private val files: List<JetFile>,
public val program: JsProgram, public val program: JsProgram,
diagnostics: Diagnostics diagnostics: Diagnostics,
private val moduleDescriptor: ModuleDescriptor
) : TranslationResult(diagnostics) { ) : TranslationResult(diagnostics) {
public fun getCode(): String = getCode(TextOutputImpl(), sourceMapBuilder = null) public fun getCode(): String = getCode(TextOutputImpl(), sourceMapBuilder = null)
@@ -71,6 +71,14 @@ public abstract class TranslationResult protected (public val diagnostics: Diagn
val jsFile = SimpleOutputFile(sourceFiles, outputFile.getName(), prefix + code + postfix) val jsFile = SimpleOutputFile(sourceFiles, outputFile.getName(), prefix + code + postfix)
val outputFiles = arrayListOf(jsFile) val outputFiles = arrayListOf(jsFile)
config.getMetaInfo()?.let {
val metaFile = File(it)
val metaFileContent = KotlinJavaScriptSerializer.metadataAsString(config.getModuleId(), moduleDescriptor)
val sourceFilesForMetaFile = ArrayList<File>(sourceFiles)
val jsMetaFile = SimpleOutputFile(sourceFilesForMetaFile, metaFile.getName(), metaFileContent)
outputFiles.add(jsMetaFile)
}
if (sourceMapBuilder != null) { if (sourceMapBuilder != null) {
sourceMapBuilder.skipLinesAtBeginning(StringUtil.getLineBreakCount(prefix)) sourceMapBuilder.skipLinesAtBeginning(StringUtil.getLineBreakCount(prefix))
val sourceMapFile = SimpleOutputFile(sourceFiles, sourceMapBuilder.getOutFile().getName(), sourceMapBuilder.build()) val sourceMapFile = SimpleOutputFile(sourceFiles, sourceMapBuilder.getOutFile().getName(), sourceMapBuilder.build())