Rename package k2js -> kotlin.js in js.inliner

org.jetbrains.k2js.inline -> org.jetbrains.kotlin.js.inline
This commit is contained in:
Alexander Udalov
2015-01-04 05:16:21 +03:00
parent c1bc4e0c46
commit 6f2a0b06e1
34 changed files with 142 additions and 198 deletions
@@ -14,37 +14,30 @@
* the License.
*/
package org.jetbrains.k2js.inline;
package org.jetbrains.kotlin.js.inline;
import com.google.dart.compiler.backend.js.ast.*;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.k2js.inline.context.*;
import static org.jetbrains.k2js.inline.util.UtilPackage.aliasArgumentsIfNeeded;
import static org.jetbrains.k2js.inline.util.UtilPackage.collectInstances;
import static org.jetbrains.k2js.inline.util.UtilPackage.getCallerQualifier;
import static org.jetbrains.k2js.inline.util.UtilPackage.getSimpleIdent;
import static org.jetbrains.k2js.inline.util.UtilPackage.hasCallerQualifier;
import static org.jetbrains.k2js.inline.util.UtilPackage.isCallInvocation;
import static org.jetbrains.k2js.inline.util.UtilPackage.needToAlias;
import static org.jetbrains.k2js.inline.util.UtilPackage.renameLocalNames;
import static org.jetbrains.k2js.inline.util.UtilPackage.replaceReturns;
import static org.jetbrains.k2js.inline.util.UtilPackage.replaceThisReference;
import static org.jetbrains.k2js.inline.clean.CleanPackage.removeDefaultInitializers;
import org.jetbrains.kotlin.js.inline.context.FunctionContext;
import org.jetbrains.kotlin.js.inline.context.InliningContext;
import org.jetbrains.kotlin.js.inline.context.NamingContext;
import org.jetbrains.kotlin.js.inline.context.StatementContext;
import java.util.List;
import static org.jetbrains.kotlin.js.inline.clean.CleanPackage.removeDefaultInitializers;
import static org.jetbrains.kotlin.js.inline.util.UtilPackage.*;
class FunctionInlineMutator {
private final JsInvocation call;
private final InliningContext inliningContext;
private final FunctionContext functionContext;
private final JsFunction invokedFunction;
private final boolean isResultNeeded;
private final NamingContext namingContext;
private JsBlock body;
private final JsBlock body;
private JsExpression resultExpr = null;
private JsLabel breakLabel = null;
@@ -73,7 +66,7 @@ class FunctionInlineMutator {
this.inliningContext = inliningContext;
this.call = call;
functionContext = inliningContext.getFunctionContext();
FunctionContext functionContext = inliningContext.getFunctionContext();
invokedFunction = functionContext.getFunctionDefinition(call);
body = invokedFunction.getBody().deepCopy();
isResultNeeded = isResultNeeded(call);
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,9 +14,12 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline
package org.jetbrains.kotlin.js.inline
import com.google.dart.compiler.backend.js.ast.JsStatement
import com.google.dart.compiler.backend.js.ast.JsExpression
class InlineableResult(val inlineableBody: JsStatement, val resultExpression: JsExpression?)
class InlineableResult(
val inlineableBody: JsStatement,
val resultExpression: JsExpression?
)
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,27 +14,25 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline;
package org.jetbrains.kotlin.js.inline;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.backend.js.ast.metadata.MetadataPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.types.lang.InlineStrategy;
import org.jetbrains.k2js.inline.context.*;
import org.jetbrains.k2js.inline.exception.InlineRecursionException;
import org.jetbrains.kotlin.js.inline.context.*;
import org.jetbrains.kotlin.js.inline.exception.InlineRecursionException;
import java.util.IdentityHashMap;
import java.util.Set;
import java.util.Stack;
import static org.jetbrains.k2js.inline.FunctionInlineMutator.getInlineableCallReplacement;
import static org.jetbrains.k2js.inline.clean.CleanPackage.removeUnusedFunctionDefinitions;
import static org.jetbrains.k2js.inline.clean.CleanPackage.removeUnusedLocalFunctionDeclarations;
import static org.jetbrains.k2js.inline.util.UtilPackage.IdentitySet;
import static org.jetbrains.k2js.inline.util.UtilPackage.collectNamedFunctions;
import static org.jetbrains.k2js.inline.util.UtilPackage.refreshLabelNames;
import static org.jetbrains.k2js.translate.utils.JsAstUtils.flattenStatement;
import static org.jetbrains.kotlin.js.inline.FunctionInlineMutator.getInlineableCallReplacement;
import static org.jetbrains.kotlin.js.inline.clean.CleanPackage.removeUnusedFunctionDefinitions;
import static org.jetbrains.kotlin.js.inline.clean.CleanPackage.removeUnusedLocalFunctionDeclarations;
import static org.jetbrains.kotlin.js.inline.util.UtilPackage.*;
public class JsInliner extends JsVisitorWithContextImpl {
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.clean
package org.jetbrains.kotlin.js.inline.clean
import com.google.dart.compiler.backend.js.ast.JsVisitorWithContextImpl
import com.google.dart.compiler.backend.js.ast.JsNode
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,18 +14,17 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.clean
package org.jetbrains.kotlin.js.inline.clean
import com.google.dart.compiler.backend.js.ast.*
import org.jetbrains.k2js.inline.util.IdentitySet
import org.jetbrains.kotlin.js.inline.util.IdentitySet
import java.util.IdentityHashMap
import java.util.ArrayList
private class ReferenceTracker<Reference, RemoveCandidate : JsNode> {
private val reachable = IdentityHashMap<Reference, Boolean>()
private val removableCandidates = IdentityHashMap<Reference, RemoveCandidate>()
private val refereceFromTo = IdentityHashMap<Reference, MutableSet<Reference>>()
private val referenceFromTo = IdentityHashMap<Reference, MutableSet<Reference>>()
private val visited = IdentitySet<Reference>()
public val removable: List<RemoveCandidate>
@@ -42,12 +41,12 @@ private class ReferenceTracker<Reference, RemoveCandidate : JsNode> {
reachable.put(reference, false)
}
public fun addRemovableReference(referer: Reference, referenced: Reference) {
public fun addRemovableReference(referrer: Reference, referenced: Reference) {
if (!isKnown(referenced)) return
getReferencedBy(referer).add(referenced)
getReferencedBy(referrer).add(referenced)
if (isReachable(referer)) {
if (isReachable(referrer)) {
markReachable(referenced)
}
}
@@ -65,8 +64,8 @@ private class ReferenceTracker<Reference, RemoveCandidate : JsNode> {
reachable[reference] = true
}
private fun getReferencedBy(referer: Reference): MutableSet<Reference> {
return refereceFromTo.getOrPut(referer, { IdentitySet<Reference>() })
private fun getReferencedBy(referrer: Reference): MutableSet<Reference> {
return referenceFromTo.getOrPut(referrer, { IdentitySet<Reference>() })
}
private fun isKnown(ref: Reference): Boolean {
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,21 +14,17 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.clean
package org.jetbrains.kotlin.js.inline.clean
import com.google.dart.compiler.backend.js.ast.*
import com.google.dart.compiler.backend.js.ast.metadata.hasDefaultValue
import org.jetbrains.k2js.inline.util.toIdentitySet
import org.jetbrains.k2js.inline.util.zipWithDefault
import org.jetbrains.kotlin.js.inline.util.toIdentitySet
import org.jetbrains.kotlin.js.inline.util.zipWithDefault
import org.jetbrains.k2js.translate.context.Namer
import org.jetbrains.k2js.translate.context.Namer.isUndefined
import org.jetbrains.k2js.translate.utils.JsAstUtils.flattenStatement
import java.util.IdentityHashMap
import java.util.Collections
import org.jetbrains.k2js.translate.utils.JsAstUtils
/**
* Removes initializers for default parameters with defined arguments given
* Expands initializers for default parameters with undefined arguments given
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,17 +14,14 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.clean
package org.jetbrains.kotlin.js.inline.clean
import com.google.dart.compiler.backend.js.ast.*
import com.google.dart.compiler.backend.js.ast.metadata.staticRef
import com.google.dart.compiler.backend.js.ast.metadata.isLocal
import com.intellij.util.containers.Stack
import java.util.IdentityHashMap
import org.jetbrains.k2js.inline.util.IdentitySet
import org.jetbrains.k2js.inline.util.collectReferencesInside
import org.jetbrains.k2js.inline.util.collectFunctionReferencesInside
import org.jetbrains.kotlin.js.inline.util.IdentitySet
import org.jetbrains.kotlin.js.inline.util.collectFunctionReferencesInside
/**
* Removes unused function definitions:
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,14 +14,12 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.clean
package org.jetbrains.kotlin.js.inline.clean
import com.google.dart.compiler.backend.js.ast.*
import com.google.dart.compiler.backend.js.ast.metadata.staticRef
import java.util.ArrayList
import java.util.IdentityHashMap
import org.jetbrains.k2js
import org.jetbrains.kotlin.js.inline.util.collectReferencesInside
/**
* Removes unused local function declarations like:
@@ -59,7 +57,7 @@ private class UnusedInstanceCollector : JsVisitorWithContextImpl() {
val currentStatement = currentNode as JsStatement
tracker.addCandidateForRemoval(name, currentStatement)
val references = k2js.inline.util.collectReferencesInside(x)
val references = collectReferencesInside(x)
references.filterNotNull()
.forEach { tracker.addRemovableReference(name, it) }
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,24 +14,16 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.context
package org.jetbrains.kotlin.js.inline.context
import com.google.dart.compiler.backend.js.ast.JsEmpty
import com.google.dart.compiler.backend.js.ast.JsExpression
import com.google.dart.compiler.backend.js.ast.JsFunction
import com.google.dart.compiler.backend.js.ast.JsInvocation
import com.google.dart.compiler.backend.js.ast.JsLiteral
import com.google.dart.compiler.backend.js.ast.JsName
import com.google.dart.compiler.backend.js.ast.JsNameRef
import com.google.dart.compiler.backend.js.ast.JsScope
import com.google.dart.compiler.backend.js.ast.JsStatement
import com.google.dart.compiler.backend.js.ast.*
import com.google.dart.compiler.backend.js.ast.metadata.staticRef
import org.jetbrains.k2js.inline.util.aliasArgumentsIfNeeded
import org.jetbrains.k2js.inline.util.getInnerFunction
import org.jetbrains.k2js.inline.util.getSimpleName
import org.jetbrains.k2js.inline.util.isCallInvocation
import org.jetbrains.k2js.inline.util.isFunctionCreator
import org.jetbrains.kotlin.js.inline.util.aliasArgumentsIfNeeded
import org.jetbrains.kotlin.js.inline.util.getInnerFunction
import org.jetbrains.kotlin.js.inline.util.getSimpleName
import org.jetbrains.kotlin.js.inline.util.isCallInvocation
import org.jetbrains.kotlin.js.inline.util.isFunctionCreator
import com.intellij.util.containers.ContainerUtil
import java.util.IdentityHashMap
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,9 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.context
import com.google.dart.compiler.backend.js.ast.JsNode
package org.jetbrains.kotlin.js.inline.context
trait InliningContext {
public val statementContext: StatementContext
@@ -24,4 +22,3 @@ trait InliningContext {
public fun newNamingContext(): NamingContext
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.context
package org.jetbrains.kotlin.js.inline.context
import com.google.dart.compiler.backend.js.ast.JsContext
import com.google.dart.compiler.backend.js.ast.JsNode
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,16 +14,15 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.context
package org.jetbrains.kotlin.js.inline.context
import com.google.dart.compiler.backend.js.ast.*
import com.google.dart.compiler.backend.js.ast.JsVars.JsVar
import java.util.ArrayList
import java.util.IdentityHashMap
import org.jetbrains.k2js.translate.utils.JsAstUtils
import org.jetbrains.k2js.inline.util.replaceNames
import org.jetbrains.kotlin.js.inline.util.replaceNames
class NamingContext(
private val scope: JsScope,
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.context
package org.jetbrains.kotlin.js.inline.context
import com.google.dart.compiler.backend.js.ast.JsContext
import com.google.dart.compiler.backend.js.ast.JsStatement
@@ -44,4 +44,4 @@ abstract class StatementContext {
}
protected abstract fun getEmptyStatement(): JsStatement
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,10 +14,10 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.exception;
package org.jetbrains.kotlin.js.inline.exception;
public class InlineRecursionException extends RuntimeException {
public InlineRecursionException() {
super("Encountered mutual inline recursion, inline will lead to stackoverflow");
super("Encountered mutual inline recursion, inline will lead to stack overflow");
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,18 +14,16 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util
package org.jetbrains.kotlin.js.inline.util
import com.google.dart.compiler.backend.js.ast.*
import com.google.dart.compiler.backend.js.ast.metadata.staticRef
import java.util.ArrayList
import java.util.IdentityHashMap
import org.jetbrains.k2js.inline.util.IdentitySet
import org.jetbrains.k2js.inline.util.collectors.ReferenceNameCollector
import org.jetbrains.k2js.inline.util.collectors.NameCollector
import org.jetbrains.k2js.inline.util.collectors.InstanceCollector
import org.jetbrains.k2js.inline.util.collectors.FunctionCollector
import org.jetbrains.kotlin.js.inline.util.collectors.ReferenceNameCollector
import org.jetbrains.kotlin.js.inline.util.collectors.NameCollector
import org.jetbrains.kotlin.js.inline.util.collectors.InstanceCollector
import org.jetbrains.kotlin.js.inline.util.collectors.FunctionCollector
public fun collectFunctionReferencesInside(scope: JsNode): List<JsName> =
collectReferencesInside(scope) filter { it.staticRef is JsFunction }
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util
package org.jetbrains.kotlin.js.inline.util
import java.util.Collections
import java.util.IdentityHashMap
@@ -62,4 +62,4 @@ public fun <T, R> Iterable<T>.zipWithDefault(
}
return result
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util.collectors
package org.jetbrains.kotlin.js.inline.util.collectors
import com.google.dart.compiler.backend.js.ast.RecursiveJsVisitor
import com.google.dart.compiler.backend.js.ast.JsPropertyInitializer
@@ -34,7 +34,7 @@ class FunctionCollector : RecursiveJsVisitor() {
val value = x?.getValueExpr()
if (label is JsNameRef && value is JsFunction) {
val name = (label as JsNameRef).getName()
val name = label.getName()
val function = value as JsFunction
if (name != null) {
@@ -42,4 +42,4 @@ class FunctionCollector : RecursiveJsVisitor() {
}
}
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util.collectors
package org.jetbrains.kotlin.js.inline.util.collectors
import com.google.dart.compiler.backend.js.ast.JsNode
import com.google.dart.compiler.backend.js.ast.RecursiveJsVisitor
@@ -30,4 +30,4 @@ class InstanceCollector<T : JsNode>(val klass: Class<T>) : RecursiveJsVisitor()
super.visitElement(node)
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,12 +14,11 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util.collectors
package org.jetbrains.kotlin.js.inline.util.collectors
import com.google.dart.compiler.backend.js.ast.JsScope
import com.google.dart.compiler.backend.js.ast.RecursiveJsVisitor
import com.google.dart.compiler.backend.js.ast.JsFunction
import com.google.dart.compiler.backend.js.ast.JsLabel
import com.google.dart.compiler.backend.js.ast.HasName
import com.google.dart.compiler.backend.js.ast.JsName
import com.google.dart.compiler.backend.js.ast.JsVars
@@ -48,4 +47,4 @@ class NameCollector(private val scope: JsScope) : RecursiveJsVisitor() {
names.put(ident, name)
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,16 +14,16 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util.collectors
package org.jetbrains.kotlin.js.inline.util.collectors
import com.google.dart.compiler.backend.js.ast.JsVisitorWithContextImpl
import com.google.dart.compiler.backend.js.ast.JsName
import com.google.dart.compiler.backend.js.ast.JsNameRef
import com.google.dart.compiler.backend.js.ast.JsContext
import org.jetbrains.k2js
import org.jetbrains.kotlin.js.inline.util.IdentitySet
class ReferenceNameCollector : JsVisitorWithContextImpl() {
private val referenceSet = k2js.inline.util.IdentitySet<JsName>()
private val referenceSet = IdentitySet<JsName>()
public val references: List<JsName>
get() = referenceSet.toList()
@@ -34,4 +34,4 @@ class ReferenceNameCollector : JsVisitorWithContextImpl() {
referenceSet.add(name)
}
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util
package org.jetbrains.kotlin.js.inline.util
import com.google.dart.compiler.backend.js.ast.JsFunction
import com.google.dart.compiler.backend.js.ast.JsReturn
@@ -41,4 +41,4 @@ public fun JsFunction.getInnerFunction(): JsFunction? {
val returnExpr = (statement as? JsReturn)?.getExpression()
return returnExpr as? JsFunction
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,16 +14,13 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util
package org.jetbrains.kotlin.js.inline.util
import com.google.dart.compiler.backend.js.ast.JsStatement
import com.google.dart.compiler.backend.js.ast.JsInvocation
import com.google.dart.compiler.backend.js.ast.JsExpressionStatement
import com.google.dart.compiler.backend.js.ast.JsName
import com.google.dart.compiler.backend.js.ast.JsExpression
import com.google.dart.compiler.backend.js.ast.JsNameRef
import com.google.dart.compiler.backend.js.ast.JsFunction
import com.google.dart.compiler.backend.js.ast.JsReturn
import org.jetbrains.k2js.translate.context.Namer
import com.google.dart.compiler.backend.js.ast.HasName
import com.google.dart.compiler.backend.js.ast.JsNode
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,20 +14,13 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util
package org.jetbrains.kotlin.js.inline.util
import com.google.dart.compiler.backend.js.ast.*
import com.google.dart.compiler.backend.js.ast.JsVars.JsVar
import org.jetbrains.k2js.inline.util.collectLocalNames
import java.util.ArrayList
import java.util.HashMap
import java.util.IdentityHashMap
import kotlin.test.assertTrue
import org.jetbrains.k2js.inline.context.NamingContext
import org.jetbrains.k2js.inline.util.needToAlias
import org.jetbrains.k2js.inline.util.rewriters.LabelNameRefreshingVisitor
import org.jetbrains.kotlin.js.inline.context.NamingContext
import org.jetbrains.kotlin.js.inline.util.rewriters.LabelNameRefreshingVisitor
public fun aliasArgumentsIfNeeded(
context: NamingContext,
@@ -83,4 +76,4 @@ public fun refreshLabelNames(
val visitor = LabelNameRefreshingVisitor(context, scope)
visitor.accept(function.getBody())
context.applyRenameTo(function)
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,17 +14,15 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util
package org.jetbrains.kotlin.js.inline.util
import com.google.dart.compiler.backend.js.ast.JsExpression
import com.google.dart.compiler.backend.js.ast.JsLiteral
import com.google.dart.compiler.backend.js.ast.JsName
import com.google.dart.compiler.backend.js.ast.JsNameRef
import com.google.dart.compiler.backend.js.ast.JsNode
import com.google.dart.compiler.backend.js.ast.JsStatement
import org.jetbrains.k2js.inline.util.rewriters.NameReplacingVisitor
import org.jetbrains.k2js.inline.util.rewriters.ReturnReplacingVisitor
import org.jetbrains.k2js.inline.util.rewriters.ThisReplacingVisitor
import org.jetbrains.kotlin.js.inline.util.rewriters.NameReplacingVisitor
import org.jetbrains.kotlin.js.inline.util.rewriters.ReturnReplacingVisitor
import org.jetbrains.kotlin.js.inline.util.rewriters.ThisReplacingVisitor
import java.util.IdentityHashMap
@@ -38,4 +36,4 @@ public fun replaceReturns(scope: JsNode, resultRef: JsNameRef?, breakLabel: JsNa
public fun replaceThisReference<T : JsNode>(node: T, replacement: JsExpression) {
ThisReplacingVisitor(replacement).accept(node)
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,16 +14,14 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util.rewriters
package org.jetbrains.kotlin.js.inline.util.rewriters
import com.google.dart.compiler.backend.js.ast.JsVisitorWithContextImpl
import com.google.dart.compiler.backend.js.ast.JsFunctionScope
import org.jetbrains.k2js.inline.context.NamingContext
import org.jetbrains.kotlin.js.inline.context.NamingContext
import com.google.dart.compiler.backend.js.ast.JsFunction
import com.google.dart.compiler.backend.js.ast.JsContext
import com.google.dart.compiler.backend.js.ast.JsLabel
import com.google.dart.compiler.backend.js.ast.JsContinue
import com.google.dart.compiler.backend.js.ast.JsBreak
class LabelNameRefreshingVisitor(val context: NamingContext, val functionScope: JsFunctionScope) : JsVisitorWithContextImpl() {
override fun visit(x: JsFunction?, ctx: JsContext?): Boolean = false
@@ -43,4 +41,4 @@ class LabelNameRefreshingVisitor(val context: NamingContext, val functionScope:
super.endVisit(x, ctx)
functionScope.exitLabel()
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util.rewriters
package org.jetbrains.kotlin.js.inline.util.rewriters
import com.google.dart.compiler.backend.js.ast.JsVisitorWithContextImpl
import com.google.dart.compiler.backend.js.ast.JsName
@@ -55,4 +55,4 @@ class NameReplacingVisitor(private val replaceMap: Map<JsName, JsExpression>) :
ctx.replaceMe(replacementLabel)
}
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util.rewriters
package org.jetbrains.kotlin.js.inline.util.rewriters
import com.google.dart.compiler.backend.js.ast.JsBreak
import com.google.dart.compiler.backend.js.ast.JsContext
@@ -24,9 +24,8 @@ import com.google.dart.compiler.backend.js.ast.JsFunction
import com.google.dart.compiler.backend.js.ast.JsNameRef
import com.google.dart.compiler.backend.js.ast.JsObjectLiteral
import com.google.dart.compiler.backend.js.ast.JsReturn
import com.google.dart.compiler.backend.js.ast.JsStatement
import com.google.dart.compiler.backend.js.ast.JsVisitorWithContextImpl
import org.jetbrains.k2js.inline.util.canHaveSideEffect
import org.jetbrains.kotlin.js.inline.util.canHaveSideEffect
import org.jetbrains.k2js.translate.utils.JsAstUtils
class ReturnReplacingVisitor(private val resultRef: JsNameRef?, private val breakLabel: JsNameRef?) : JsVisitorWithContextImpl() {
@@ -67,4 +66,4 @@ class ReturnReplacingVisitor(private val resultRef: JsNameRef?, private val brea
return null
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util.rewriters
package org.jetbrains.kotlin.js.inline.util.rewriters
import com.google.dart.compiler.backend.js.ast.JsContext
import com.google.dart.compiler.backend.js.ast.JsExpression
@@ -31,4 +31,4 @@ class ThisReplacingVisitor(private val thisReplacement: JsExpression) : JsVisito
override fun visit(x: JsFunction?, ctx: JsContext?) = false
override fun visit(x: JsObjectLiteral?, ctx: JsContext?) = false
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 JetBrains s.r.o.
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.k2js.inline.util
package org.jetbrains.kotlin.js.inline.util
import com.google.dart.compiler.backend.js.ast.JsArrayAccess
import com.google.dart.compiler.backend.js.ast.JsArrayLiteral
@@ -22,17 +22,11 @@ import com.google.dart.compiler.backend.js.ast.JsBinaryOperation
import com.google.dart.compiler.backend.js.ast.JsConditional
import com.google.dart.compiler.backend.js.ast.JsExpression
import com.google.dart.compiler.backend.js.ast.JsInvocation
import com.google.dart.compiler.backend.js.ast.JsLiteral
import com.google.dart.compiler.backend.js.ast.JsLiteral.JsThisRef
import com.google.dart.compiler.backend.js.ast.JsLiteral.JsValueLiteral
import com.google.dart.compiler.backend.js.ast.JsNameRef
import com.google.dart.compiler.backend.js.ast.JsNew
import com.google.dart.compiler.backend.js.ast.JsNode
import com.google.dart.compiler.backend.js.ast.JsObjectLiteral
import com.google.dart.compiler.backend.js.ast.JsPostfixOperation
import com.google.dart.compiler.backend.js.ast.JsPrefixOperation
import com.google.dart.compiler.backend.js.ast.RecursiveJsVisitor
import com.google.dart.compiler.backend.js.ast.JsBinaryOperator
public fun canHaveSideEffect(x: JsExpression): Boolean {
return with(SideEffectVisitor()) {
@@ -85,4 +79,4 @@ private class NeedToAliasVisitor() : SideEffectVisitor() {
is JsInvocation -> isFunctionCreatorInvocation(node)
else -> super.isSideEffectFree(node)
}
}
}
@@ -16,8 +16,8 @@
package org.jetbrains.k2js.test.semantics;
import org.jetbrains.k2js.inline.exception.InlineRecursionException;
import org.jetbrains.k2js.test.SingleFileTranslationWithDirectivesTest;
import org.jetbrains.kotlin.js.inline.exception.InlineRecursionException;
public final class InlineTest extends SingleFileTranslationWithDirectivesTest {
public InlineTest() {
@@ -16,12 +16,14 @@
package org.jetbrains.k2js.test.utils;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.backend.js.ast.JsFunction;
import com.google.dart.compiler.backend.js.ast.JsName;
import com.google.dart.compiler.backend.js.ast.JsNode;
import org.jetbrains.annotations.NotNull;
import java.util.Map;
import static org.jetbrains.k2js.inline.util.UtilPackage.collectNamedFunctions;
import static org.jetbrains.kotlin.js.inline.util.UtilPackage.collectNamedFunctions;
public class AstSearchUtil {
@NotNull
@@ -22,13 +22,14 @@ import com.google.dart.compiler.backend.js.ast.JsNode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.jetbrains.jet.InTextDirectivesUtils.findLinesWithPrefixesRemoved;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.jetbrains.k2js.inline.util.UtilPackage.collectInstances;
import static org.jetbrains.kotlin.js.inline.util.UtilPackage.collectInstances;
import static org.junit.Assert.*;
public class DirectiveTestUtils {
@@ -46,8 +46,8 @@ import org.jetbrains.js.compiler.sourcemap.SourceMapBuilder;
import org.jetbrains.k2js.analyze.TopDownAnalyzerFacadeForJS;
import org.jetbrains.k2js.config.Config;
import org.jetbrains.k2js.facade.exceptions.TranslationException;
import org.jetbrains.k2js.inline.JsInliner;
import org.jetbrains.k2js.translate.general.Translation;
import org.jetbrains.kotlin.js.inline.JsInliner;
import java.io.File;
import java.io.IOException;
@@ -86,9 +86,6 @@ public final class K2JSTranslator {
String prefix = FileUtilsPackage.readTextOrEmpty(outputPrefixFile);
String postfix = FileUtilsPackage.readTextOrEmpty(outputPostfixFile);
StringBuilder outBuilder = new StringBuilder(programCode.length() + prefix.length() + postfix.length());
outBuilder.append(prefix).append(programCode).append(postfix);
List<File> sourceFiles = ContainerUtil.map(files, new Function<JetFile, File>() {
@Override
public File fun(JetFile file) {
@@ -98,13 +95,13 @@ public final class K2JSTranslator {
}
});
SimpleOutputFile jsFile = new SimpleOutputFile(sourceFiles, outputFile.getName(), outBuilder.toString());
SimpleOutputFile jsFile = new SimpleOutputFile(sourceFiles, outputFile.getName(), prefix + programCode + postfix);
List<SimpleOutputFile> outputFiles = new SmartList<SimpleOutputFile>(jsFile);
if (sourceMapBuilder != null) {
sourceMapBuilder.skipLinesAtBeginning(StringUtil.getLineBreakCount(prefix));
SimpleOutputFile sourcemapFile = new SimpleOutputFile(sourceFiles, sourceMapBuilder.getOutFile().getName(), sourceMapBuilder.build());
outputFiles.add(sourcemapFile);
SimpleOutputFile sourceMapFile = new SimpleOutputFile(sourceFiles, sourceMapBuilder.getOutFile().getName(), sourceMapBuilder.build());
outputFiles.add(sourceMapFile);
}
OutputFileCollection outputFileCollection = new SimpleOutputFileCollection(outputFiles);
@@ -28,13 +28,9 @@ import org.jetbrains.k2js.translate.utils.BindingUtils.getFunctionDescriptor
import org.jetbrains.k2js.translate.utils.FunctionBodyTranslator.translateFunctionBody
import org.jetbrains.k2js.translate.utils.TranslationUtils.simpleReturnFunction
import org.jetbrains.jet.lang.descriptors.MemberDescriptor
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor
import org.jetbrains.k2js.translate.utils.AnnotationsUtils
import org.jetbrains.jet.lang.descriptors.Visibilities
import com.google.dart.compiler.backend.js.ast.JsVars.JsVar
import org.jetbrains.k2js.translate.utils.JsAstUtils
import com.intellij.util.SmartList
import org.jetbrains.k2js.inline.util.getInnerFunction
import org.jetbrains.kotlin.js.inline.util.getInnerFunction
import org.jetbrains.jet.lang.types.lang.InlineUtil
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor
@@ -133,7 +129,7 @@ private fun moveCapturedLocalInside(capturingFunction: JsFunction, capturedName:
CapturedArgsParams()
}
is JsInvocation ->
moveCapturedLocalInside(capturingFunction, capturedName, localFunAlias as JsInvocation)
moveCapturedLocalInside(capturingFunction, capturedName, localFunAlias)
else ->
throw AssertionError("Local function reference has wrong alias $localFunAlias")
}