JS: remove unused imports from generated JS. Fix KT-14748

This commit is contained in:
Alexey Andreev
2016-11-22 12:42:49 +03:00
parent cf89e24b49
commit ea1e196e9a
6 changed files with 67 additions and 1 deletions
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.js.config.JsConfig;
import org.jetbrains.kotlin.js.coroutine.CoroutineTransformer;
import org.jetbrains.kotlin.js.facade.exceptions.TranslationException;
import org.jetbrains.kotlin.js.inline.JsInliner;
import org.jetbrains.kotlin.js.inline.clean.RemoveUnusedImportsKt;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
import org.jetbrains.kotlin.js.translate.general.Translation;
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus;
@@ -88,6 +89,7 @@ public final class K2JSTranslator {
CoroutineTransformer coroutineTransformer = new CoroutineTransformer(program);
coroutineTransformer.accept(program);
RemoveUnusedImportsKt.removeUnusedImports(program);
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
if (hasError(diagnostics)) return new TranslationResult.Fail(diagnostics);
@@ -48,7 +48,6 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
import java.util.*;
import static org.jetbrains.kotlin.js.config.LibrarySourcesConfig.UNKNOWN_EXTERNAL_MODULE_NAME;
import static org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils.getNameForAnnotatedObject;
import static org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils.isLibraryObject;
import static org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils.isNativeObject;
import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.pureFqn;
@@ -403,6 +402,7 @@ public final class StaticContext {
// TODO: remove prefix when problem with scopes is solved
JsName result = rootFunction.getScope().declareFreshName("imported$" + suggestedName);
MetadataProperties.setImported(result, true);
importStatements.add(JsAstUtils.newVar(result, declaration));
return result;
}
@@ -0,0 +1,10 @@
// MODULE: lib
// FILE: lib.kt
package lib
inline fun foo(f: () -> String) = f()
// MODULE: main(lib)
// FILE: main.kt
// PROPERTY_NOT_READ_FROM: foo_6r51u9$
fun box() = lib.foo { "OK" }