Rename JsAstUtils.fqn to fqnWithoutSideEffects. Move PropertyTranslator to appropriate package

This commit is contained in:
Alexey Andreev
2016-04-04 13:17:13 +03:00
parent 0caff1e504
commit b3698b1177
13 changed files with 47 additions and 41 deletions
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.js.translate.operation.OperatorTable
import org.jetbrains.kotlin.js.translate.reference.CallArgumentTranslator
import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.fqnWithoutSideEffects
import org.jetbrains.kotlin.js.translate.utils.PsiUtils
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.*
@@ -60,7 +61,7 @@ object DefaultFunctionCallCase : FunctionCallCase() {
if (isNative && hasSpreadOperator) {
return nativeSpreadFunWithDispatchOrExtensionReceiver(argumentsInfo, functionName)
}
return JsInvocation(JsAstUtils.fqn(functionName, dispatchReceiver), argumentsInfo.translateArguments)
return JsInvocation(fqnWithoutSideEffects(functionName, dispatchReceiver), argumentsInfo.translateArguments)
}
fun buildDefaultCallWithoutReceiver(context: TranslationContext,
@@ -79,7 +80,7 @@ object DefaultFunctionCallCase : FunctionCallCase() {
val functionRef = context.aliasOrValue(callableDescriptor) {
val qualifierForFunction = context.getQualifierForDescriptor(it)
JsAstUtils.fqn(functionName, qualifierForFunction)
fqnWithoutSideEffects(functionName, qualifierForFunction)
}
return JsInvocation(functionRef, argumentsInfo.translateArguments)
}
@@ -102,7 +103,7 @@ object DefaultFunctionCallCase : FunctionCallCase() {
val functionRef = context.aliasOrValue(callableDescriptor) {
val qualifierForFunction = context.getQualifierForDescriptor(it)
JsAstUtils.fqn(functionName, qualifierForFunction) // TODO: remake to call
fqnWithoutSideEffects(functionName, qualifierForFunction) // TODO: remake to call
}
val referenceToCall =
@@ -227,7 +228,7 @@ object SuperCallCase : FunctionCallCase() {
override fun FunctionCallInfo.dispatchReceiver(): JsExpression {
// TODO: spread operator
val prototypeClass = JsAstUtils.fqn(Namer.getPrototypeName(), calleeOwner)
val prototypeClass = fqnWithoutSideEffects(Namer.getPrototypeName(), calleeOwner)
val functionRef = Namer.getFunctionCallRef(JsNameRef(functionName, prototypeClass))
return JsInvocation(functionRef, argumentsInfo.argsWithReceiver(dispatchReceiver!!))
}
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils;
import java.util.Arrays;
import static com.google.dart.compiler.backend.js.ast.JsScopesKt.JsObjectScope;
import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.fqnWithoutSideEffects;
import static org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils.getModuleName;
import static org.jetbrains.kotlin.js.translate.utils.ManglingUtils.getStableMangledNameForDescriptor;
import static org.jetbrains.kotlin.js.translate.utils.ManglingUtils.getSuggestedName;
@@ -137,7 +138,7 @@ public final class Namer {
@NotNull
public static JsNameRef superMethodNameRef(@NotNull JsName superClassJsName) {
return JsAstUtils.fqn(SUPER_METHOD_NAME, superClassJsName.makeRef());
return fqnWithoutSideEffects(SUPER_METHOD_NAME, superClassJsName.makeRef());
}
@NotNull
@@ -171,7 +172,7 @@ public final class Namer {
@NotNull
public static JsExpression getCompanionObjectAccessor(@NotNull JsExpression referenceToClass) {
return JsAstUtils.fqn(COMPANION_OBJECT_GETTER, referenceToClass);
return fqnWithoutSideEffects(COMPANION_OBJECT_GETTER, referenceToClass);
}
@NotNull
@@ -186,7 +187,7 @@ public final class Namer {
@NotNull
public static JsNameRef getRefToPrototype(@NotNull JsExpression classOrTraitExpression) {
return JsAstUtils.fqn(getPrototypeName(), classOrTraitExpression);
return fqnWithoutSideEffects(getPrototypeName(), classOrTraitExpression);
}
@NotNull
@@ -211,12 +212,12 @@ public final class Namer {
@NotNull
public static JsNameRef getFunctionCallRef(@NotNull JsExpression functionExpression) {
return JsAstUtils.fqn(CALL_FUNCTION, functionExpression);
return fqnWithoutSideEffects(CALL_FUNCTION, functionExpression);
}
@NotNull
public static JsNameRef getFunctionApplyRef(@NotNull JsExpression functionExpression) {
return JsAstUtils.fqn(APPLY_FUNCTION, functionExpression);
return fqnWithoutSideEffects(APPLY_FUNCTION, functionExpression);
}
@NotNull
@@ -226,7 +227,7 @@ public final class Namer {
@NotNull
public static JsNameRef getCapturedVarAccessor(@NotNull JsExpression ref) {
return JsAstUtils.fqn(CAPTURED_VAR_FIELD, ref);
return fqnWithoutSideEffects(CAPTURED_VAR_FIELD, ref);
}
@NotNull
@@ -379,7 +380,7 @@ public final class Namer {
@NotNull
public static JsNameRef kotlin(@NotNull JsName name) {
return JsAstUtils.fqn(name, kotlinObject());
return fqnWithoutSideEffects(name, kotlinObject());
}
@NotNull
@@ -389,7 +390,7 @@ public final class Namer {
@NotNull
public static JsNameRef kotlinObject() {
return JsAstUtils.fqn(KOTLIN_NAME, null);
return fqnWithoutSideEffects(KOTLIN_NAME, null);
}
@NotNull
@@ -468,11 +469,11 @@ public final class Namer {
}
public static JsNameRef kotlinLong() {
return JsAstUtils.fqn("Long", kotlinObject());
return fqnWithoutSideEffects("Long", kotlinObject());
}
@NotNull
public static JsNameRef createInlineFunction() {
return JsAstUtils.fqn(DEFINE_INLINE_FUNCTION, kotlinObject());
return fqnWithoutSideEffects(DEFINE_INLINE_FUNCTION, kotlinObject());
}
}
@@ -41,6 +41,7 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils;
import java.util.Map;
import static org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils.*;
import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.fqnWithoutSideEffects;
import static org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils.*;
import static org.jetbrains.kotlin.js.translate.utils.ManglingUtils.getMangledName;
import static org.jetbrains.kotlin.js.translate.utils.ManglingUtils.getSuggestedName;
@@ -186,7 +187,7 @@ public final class StaticContext {
@NotNull
public JsNameRef getQualifiedReference(@NotNull FqName packageFqName) {
JsName packageName = getNameForPackage(packageFqName);
return JsAstUtils.fqn(packageName, packageFqName.isRoot() ? null : getQualifierForParentPackage(packageFqName.parent()));
return fqnWithoutSideEffects(packageName, packageFqName.isRoot() ? null : getQualifierForParentPackage(packageFqName.parent()));
}
@NotNull
@@ -215,7 +216,7 @@ public final class StaticContext {
FqName fqName = packageFqName;
while (true) {
JsNameRef ref = JsAstUtils.fqn(getNameForPackage(fqName), null);
JsNameRef ref = fqnWithoutSideEffects(getNameForPackage(fqName), null);
if (qualifier == null) {
result = ref;
@@ -471,7 +472,7 @@ public final class StaticContext {
if (!standardClasses.isStandardObject(descriptor)) {
return null;
}
return namer.kotlinObject();
return Namer.kotlinObject();
}
};
//TODO: review and refactor
@@ -514,7 +515,7 @@ public final class StaticContext {
@Override
public JsExpression apply(@NotNull DeclarationDescriptor descriptor) {
if (isLibraryObject(descriptor)) {
return namer.kotlinObject();
return Namer.kotlinObject();
}
return null;
}
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.js.translate.callTranslator.CallTranslator
import org.jetbrains.kotlin.js.translate.context.DefinitionPlace
import org.jetbrains.kotlin.js.translate.context.Namer
import org.jetbrains.kotlin.js.translate.context.TranslationContext
import org.jetbrains.kotlin.js.translate.declaration.propertyTranslator.translateAccessors
import org.jetbrains.kotlin.js.translate.expression.FunctionTranslator
import org.jetbrains.kotlin.js.translate.expression.withCapturedParameters
import org.jetbrains.kotlin.js.translate.general.AbstractTranslator
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
import org.jetbrains.kotlin.descriptors.Modality;
import org.jetbrains.kotlin.descriptors.PropertyDescriptor;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
import org.jetbrains.kotlin.js.translate.declaration.propertyTranslator.PropertyTranslatorKt;
import org.jetbrains.kotlin.js.translate.general.Translation;
import org.jetbrains.kotlin.js.translate.general.TranslatorVisitor;
import org.jetbrains.kotlin.js.translate.initializer.ClassInitializerTranslator;
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.backend.common.CodegenUtilKt
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.js.translate.context.Namer
import org.jetbrains.kotlin.js.translate.context.TranslationContext
import org.jetbrains.kotlin.js.translate.declaration.propertyTranslator.addGetterAndSetter
import org.jetbrains.kotlin.js.translate.general.AbstractTranslator
import org.jetbrains.kotlin.js.translate.general.Translation
import org.jetbrains.kotlin.js.translate.utils.BindingUtils
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.kotlin.js.translate.declaration.propertyTranslator
package org.jetbrains.kotlin.js.translate.declaration
import com.google.dart.compiler.backend.js.ast.*
import com.intellij.util.SmartList
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.js.translate.context.Namer.getReceiverParameterName
import org.jetbrains.kotlin.js.translate.context.TranslationContext
import org.jetbrains.kotlin.js.translate.general.AbstractTranslator
import org.jetbrains.kotlin.js.translate.general.Translation
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.fqnWithoutSideEffects
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils
import org.jetbrains.kotlin.js.translate.utils.TranslationUtils.assignmentToBackingField
import org.jetbrains.kotlin.js.translate.utils.TranslationUtils.backingFieldReference
@@ -135,8 +135,8 @@ private class PropertyTranslator(
}
private fun generateDelegatedGetterFunction(
getterDescriptor: PropertyGetterDescriptor,
delegatedCall: ResolvedCall<FunctionDescriptor>
getterDescriptor: PropertyGetterDescriptor,
delegatedCall: ResolvedCall<FunctionDescriptor>
): JsFunction {
val scope = context().getScopeForDescriptor(getterDescriptor.containingDeclaration)
val function = JsFunction(scope, JsBlock(), accessorDescription(getterDescriptor))
@@ -165,7 +165,8 @@ private class PropertyTranslator(
val fakeArgumentExpression =
(delegatedCall.valueArgumentsByIndex!![1] as ExpressionValueArgument).valueArgument!!.getArgumentExpression()
return context.innerContextWithAliasesForExpressions(mapOf(
fakeArgumentExpression to JsNew(JsAstUtils.fqn("PropertyMetadata", Namer.kotlinObject()), listOf(propertyNameLiteral))
fakeArgumentExpression to JsNew(fqnWithoutSideEffects("PropertyMetadata", Namer.kotlinObject()),
listOf(propertyNameLiteral))
))
}
@@ -43,6 +43,7 @@ import java.util.List;
import static org.jetbrains.kotlin.js.translate.utils.BindingUtils.*;
import static org.jetbrains.kotlin.js.translate.utils.FunctionBodyTranslator.setDefaultValueForArguments;
import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.fqnWithoutSideEffects;
import static org.jetbrains.kotlin.js.translate.utils.PsiUtils.getPrimaryConstructorParameters;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.getClassDescriptorForType;
@@ -127,8 +128,8 @@ public final class ClassInitializerTranslator extends AbstractTranslator {
JsName outerName = initFunction.getScope().declareName(Namer.OUTER_FIELD_NAME);
initFunction.getParameters().add(0, new JsParameter(outerName));
JsExpression paramRef = JsAstUtils.fqn(outerName, null);
JsExpression assignment = JsAstUtils.assignment(JsAstUtils.fqn(outerName, JsLiteral.THIS), paramRef);
JsExpression paramRef = fqnWithoutSideEffects(outerName, null);
JsExpression assignment = JsAstUtils.assignment(fqnWithoutSideEffects(outerName, JsLiteral.THIS), paramRef);
initFunction.getBody().getStatements().add(new JsExpressionStatement(assignment));
}
@@ -165,7 +166,7 @@ public final class ClassInitializerTranslator extends AbstractTranslator {
assert superDescriptor != null : "This class is expected to have super class: "
+ PsiUtilsKt.getTextWithLocation(classDeclaration);
if (superDescriptor.isInner() && descriptor.isInner()) {
arguments.add(0, JsAstUtils.fqn(Namer.OUTER_FIELD_NAME, JsLiteral.THIS));
arguments.add(0, fqnWithoutSideEffects(Namer.OUTER_FIELD_NAME, JsLiteral.THIS));
}
addCallToSuperMethod(arguments, initializer);
}
@@ -25,6 +25,8 @@ import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
import java.util.List;
import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.fqnWithoutSideEffects;
public final class BuiltInFunctionIntrinsic extends FunctionIntrinsic {
@NotNull
@@ -42,6 +44,6 @@ public final class BuiltInFunctionIntrinsic extends FunctionIntrinsic {
@NotNull TranslationContext context
) {
assert receiver != null;
return new JsInvocation(JsAstUtils.fqn(functionName, receiver), arguments);
return new JsInvocation(fqnWithoutSideEffects(functionName, receiver), arguments);
}
}
@@ -24,6 +24,8 @@ import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
import java.util.List;
import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.fqnWithoutSideEffects;
//TODO: find should be usages
public final class BuiltInPropertyIntrinsic extends FunctionIntrinsic {
@@ -40,6 +42,6 @@ public final class BuiltInPropertyIntrinsic extends FunctionIntrinsic {
@NotNull TranslationContext context) {
assert receiver != null;
assert arguments.isEmpty() : "Properties can't have arguments.";
return JsAstUtils.fqn(propertyName, receiver);
return fqnWithoutSideEffects(propertyName, receiver);
}
}
@@ -34,7 +34,7 @@ public class KotlinFunctionIntrinsic extends FunctionIntrinsic {
private final JsNameRef function;
public KotlinFunctionIntrinsic(@NotNull String functionName) {
function = JsAstUtils.fqn(functionName, Namer.kotlinObject());
function = JsAstUtils.fqnWithoutSideEffects(functionName, Namer.kotlinObject());
}
@NotNull
@@ -212,7 +212,7 @@ public final class TopLevelFIF extends CompositeFIF {
String mangledName = getStableMangledNameForDescriptor(JsPlatform.INSTANCE.getBuiltIns().getMutableMap(), operationName());
return new JsInvocation(JsAstUtils.fqn(mangledName, thisOrReceiver), arguments);
return new JsInvocation(JsAstUtils.fqnWithoutSideEffects(mangledName, thisOrReceiver), arguments);
}
}
@@ -32,12 +32,12 @@ import java.util.Collections;
import java.util.List;
public final class JsAstUtils {
private static final JsNameRef DEFINE_PROPERTY = fqn("defineProperty", null);
public static final JsNameRef CREATE_OBJECT = fqn("create", null);
private static final JsNameRef DEFINE_PROPERTY = fqnWithoutSideEffects("defineProperty", null);
public static final JsNameRef CREATE_OBJECT = fqnWithoutSideEffects("create", null);
private static final JsNameRef VALUE = new JsNameRef("value");
private static final JsPropertyInitializer WRITABLE = new JsPropertyInitializer(fqn("writable", null), JsLiteral.TRUE);
private static final JsPropertyInitializer ENUMERABLE = new JsPropertyInitializer(fqn("enumerable", null), JsLiteral.TRUE);
private static final JsPropertyInitializer WRITABLE = new JsPropertyInitializer(fqnWithoutSideEffects("writable", null), JsLiteral.TRUE);
private static final JsPropertyInitializer ENUMERABLE = new JsPropertyInitializer(fqnWithoutSideEffects("enumerable", null), JsLiteral.TRUE);
public static final String LENDS_JS_DOC_TAG = "lends";
@@ -128,7 +128,7 @@ public final class JsAstUtils {
@NotNull
public static JsInvocation invokeMethod(@NotNull JsExpression thisObject, @NotNull String name, @NotNull JsExpression... arguments) {
return new JsInvocation(fqn(name, thisObject), arguments);
return new JsInvocation(fqnWithoutSideEffects(name, thisObject), arguments);
}
@NotNull
@@ -173,7 +173,7 @@ public final class JsAstUtils {
@NotNull
private static JsExpression rangeTo(@NotNull String rangeClassName, @NotNull JsExpression rangeStart, @NotNull JsExpression rangeEnd) {
JsNameRef expr = fqn(rangeClassName, Namer.kotlinObject());
JsNameRef expr = fqnWithoutSideEffects(rangeClassName, Namer.kotlinObject());
JsNew numberRangeConstructorInvocation = new JsNew(expr);
setArguments(numberRangeConstructorInvocation, rangeStart, rangeEnd);
return numberRangeConstructorInvocation;
@@ -488,14 +488,14 @@ public final class JsAstUtils {
}
@NotNull
public static JsNameRef fqn(@NotNull String identifier, @Nullable JsExpression qualifier) {
public static JsNameRef fqnWithoutSideEffects(@NotNull String identifier, @Nullable JsExpression qualifier) {
JsNameRef result = new JsNameRef(identifier, qualifier);
MetadataProperties.setSideEffects(result, false);
return result;
}
@NotNull
public static JsNameRef fqn(@NotNull JsName identifier, @Nullable JsExpression qualifier) {
public static JsNameRef fqnWithoutSideEffects(@NotNull JsName identifier, @Nullable JsExpression qualifier) {
JsNameRef result = new JsNameRef(identifier, qualifier);
MetadataProperties.setSideEffects(result, false);
return result;