Remove some usages of KotlinBuiltIns.getInstance()
Introduce DeclarationDescriptor.builtIns extension to get builtins where descriptors are available Introduce various utilities in KotlinBuiltIns to check for primitive types and get fq names of builtins
This commit is contained in:
+8
-7
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.js.translate.callTranslator
|
||||
|
||||
import com.google.dart.compiler.backend.js.ast.*
|
||||
import com.intellij.util.SmartList
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
@@ -33,6 +32,7 @@ import org.jetbrains.kotlin.js.translate.utils.PsiUtils
|
||||
import org.jetbrains.kotlin.lexer.JetTokens
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.resolve.calls.tasks.isDynamic
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
||||
import java.util.ArrayList
|
||||
|
||||
@@ -166,17 +166,18 @@ object NativeSetterCallCase : AnnotatedAsNativeXCallCase(PredefinedAnnotation.NA
|
||||
|
||||
object InvokeIntrinsic : FunctionCallCase {
|
||||
fun canApply(callInfo: FunctionCallInfo): Boolean {
|
||||
if (callInfo.callableDescriptor.getName() != OperatorConventions.INVOKE)
|
||||
val callableDescriptor = callInfo.callableDescriptor
|
||||
if (callableDescriptor.getName() != OperatorConventions.INVOKE)
|
||||
return false
|
||||
val parameterCount = callInfo.callableDescriptor.getValueParameters().size()
|
||||
val funDeclaration = callInfo.callableDescriptor.getContainingDeclaration()
|
||||
val parameterCount = callableDescriptor.getValueParameters().size()
|
||||
val funDeclaration = callableDescriptor.getContainingDeclaration()
|
||||
|
||||
val reflectionTypes = callInfo.context.getReflectionTypes()
|
||||
return if (callInfo.callableDescriptor.getExtensionReceiverParameter() == null)
|
||||
funDeclaration == KotlinBuiltIns.getInstance().getFunction(parameterCount) ||
|
||||
return if (callableDescriptor.getExtensionReceiverParameter() == null)
|
||||
funDeclaration == callableDescriptor.builtIns.getFunction(parameterCount) ||
|
||||
funDeclaration == reflectionTypes.getKFunction(parameterCount)
|
||||
else
|
||||
funDeclaration == KotlinBuiltIns.getInstance().getExtensionFunction(parameterCount) ||
|
||||
funDeclaration == callableDescriptor.builtIns.getExtensionFunction(parameterCount) ||
|
||||
funDeclaration == reflectionTypes.getKExtensionFunction(parameterCount) ||
|
||||
funDeclaration == reflectionTypes.getKMemberFunction(parameterCount)
|
||||
}
|
||||
|
||||
+6
-3
@@ -30,6 +30,9 @@ import org.jetbrains.kotlin.psi.JetParameter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static kotlin.KotlinPackage.first;
|
||||
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.getBuiltIns;
|
||||
|
||||
class JsDataClassGenerator extends DataClassMethodGenerator {
|
||||
private final TranslationContext context;
|
||||
private final List<? super JsPropertyInitializer> output;
|
||||
@@ -90,7 +93,7 @@ class JsDataClassGenerator extends DataClassMethodGenerator {
|
||||
public void generateToStringMethod(@NotNull List<PropertyDescriptor> classProperties) {
|
||||
// TODO: relax this limitation, with the data generation logic fixed.
|
||||
assert !classProperties.isEmpty();
|
||||
FunctionDescriptor prototypeFun = CodegenUtil.getAnyToStringMethod();
|
||||
FunctionDescriptor prototypeFun = CodegenUtil.getAnyToStringMethod(getBuiltIns(first(classProperties)));
|
||||
JsFunction functionObj = generateJsMethod(prototypeFun);
|
||||
|
||||
JsProgram jsProgram = context.program();
|
||||
@@ -115,7 +118,7 @@ class JsDataClassGenerator extends DataClassMethodGenerator {
|
||||
|
||||
@Override
|
||||
public void generateHashCodeMethod(@NotNull List<PropertyDescriptor> classProperties) {
|
||||
FunctionDescriptor prototypeFun = CodegenUtil.getAnyHashCodeMethod();
|
||||
FunctionDescriptor prototypeFun = CodegenUtil.getAnyHashCodeMethod(getBuiltIns(first(classProperties)));
|
||||
JsFunction functionObj = generateJsMethod(prototypeFun);
|
||||
|
||||
JsProgram jsProgram = context.program();
|
||||
@@ -142,7 +145,7 @@ class JsDataClassGenerator extends DataClassMethodGenerator {
|
||||
@Override
|
||||
public void generateEqualsMethod(@NotNull List<PropertyDescriptor> classProperties) {
|
||||
assert !classProperties.isEmpty();
|
||||
FunctionDescriptor prototypeFun = CodegenUtil.getAnyEqualsMethod();
|
||||
FunctionDescriptor prototypeFun = CodegenUtil.getAnyEqualsMethod(getBuiltIns(first(classProperties)));
|
||||
JsFunction functionObj = generateJsMethod(prototypeFun);
|
||||
JsFunctionScope funScope = functionObj.getScope();
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.js.descriptorUtils.DescriptorUtilsPackage;
|
||||
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.psi.JetExpression;
|
||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver;
|
||||
@@ -43,11 +42,12 @@ import static org.jetbrains.kotlin.js.config.LibrarySourcesConfig.BUILTINS_JS_MO
|
||||
import static org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils.isNativeObject;
|
||||
import static org.jetbrains.kotlin.resolve.DescriptorToSourceUtils.descriptorToDeclaration;
|
||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
|
||||
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.getBuiltIns;
|
||||
|
||||
public final class JsDescriptorUtils {
|
||||
// TODO: maybe we should use external annotations or something else.
|
||||
private static final Set<String> FAKE_CLASSES = ContainerUtil.immutableSet(
|
||||
getFqNameSafe(KotlinBuiltIns.getInstance().getAny()).asString()
|
||||
KotlinBuiltIns.FQ_NAMES.any.asString()
|
||||
);
|
||||
|
||||
private JsDescriptorUtils() {
|
||||
@@ -157,7 +157,7 @@ public final class JsDescriptorUtils {
|
||||
|
||||
public static boolean isBuiltin(@NotNull DeclarationDescriptor descriptor) {
|
||||
PackageFragmentDescriptor containingPackageFragment = DescriptorUtils.getParentOfType(descriptor, PackageFragmentDescriptor.class);
|
||||
return containingPackageFragment == KotlinBuiltIns.getInstance().getBuiltInsPackageFragment();
|
||||
return containingPackageFragment == getBuiltIns(descriptor).getBuiltInsPackageFragment();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -215,8 +215,7 @@ public final class TranslationUtils {
|
||||
if (operationDescriptor == null || !(operationDescriptor instanceof FunctionDescriptor)) return true;
|
||||
|
||||
JetType returnType = operationDescriptor.getReturnType();
|
||||
if (returnType != null &&
|
||||
KotlinBuiltIns.getInstance().getCharType().equals(returnType) || (KotlinBuiltIns.getInstance().getLongType().equals(returnType))) return false;
|
||||
if (returnType != null && (KotlinBuiltIns.isChar(returnType) || KotlinBuiltIns.isLong(returnType))) return false;
|
||||
|
||||
if (context.intrinsics().getFunctionIntrinsic((FunctionDescriptor) operationDescriptor).exists()) return true;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user