diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java index d583faf0bfd..e796d82f98d 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java @@ -289,11 +289,11 @@ public class AsmUtil { public static int getDeprecatedAccessFlag(@NotNull MemberDescriptor descriptor) { if (descriptor instanceof PropertyAccessorDescriptor) { - return KotlinBuiltIns.getInstance().isDeprecated(descriptor) + return KotlinBuiltIns.isDeprecated(descriptor) ? ACC_DEPRECATED : getDeprecatedAccessFlag(((PropertyAccessorDescriptor) descriptor).getCorrespondingProperty()); } - else if (KotlinBuiltIns.getInstance().isDeprecated(descriptor)) { + else if (KotlinBuiltIns.isDeprecated(descriptor)) { return ACC_DEPRECATED; } return 0; diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 6e27bd50d04..73b9b7b7bff 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -183,7 +183,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { if (isAnnotation) { access |= ACC_ANNOTATION; } - if (KotlinBuiltIns.getInstance().isDeprecated(descriptor)) { + if (KotlinBuiltIns.isDeprecated(descriptor)) { access |= ACC_DEPRECATED; } if (isEnum) { @@ -514,7 +514,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } private void generateFunctionsForDataClasses() { - if (!KotlinBuiltIns.getInstance().isData(descriptor)) return; + if (!KotlinBuiltIns.isData(descriptor)) return; new DataClassMethodGeneratorImpl(myClass, bindingContext).generate(); } @@ -797,7 +797,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { new DefaultParameterValueLoader() { @Override public StackValue genValue(ValueParameterDescriptor valueParameter, ExpressionCodegen codegen) { - assert KotlinBuiltIns.getInstance().isData((ClassDescriptor) function.getContainingDeclaration()) + assert KotlinBuiltIns.isData((ClassDescriptor) function.getContainingDeclaration()) : "Function container should be annotated with [data]: " + function; PropertyDescriptor property = bindingContext.get(BindingContext.VALUE_PARAMETER_AS_PROPERTY, valueParameter); assert property != null : "Copy function doesn't correspond to any property: " + function; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java index d005f2d31ea..e3480eae989 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java @@ -745,7 +745,7 @@ public class JetFlowInformationProvider { public void markTailCalls() { final DeclarationDescriptor subroutineDescriptor = trace.get(BindingContext.DECLARATION_TO_DESCRIPTOR, subroutine); if (!(subroutineDescriptor instanceof FunctionDescriptor)) return; - if (!KotlinBuiltIns.getInstance().isTailRecursive(subroutineDescriptor)) return; + if (!KotlinBuiltIns.isTailRecursive(subroutineDescriptor)) return; // finally blocks are copied which leads to multiple diagnostics reported on one instruction class KindAndCall { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java index 5b26d9db4af..5bb33de5a45 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java @@ -227,7 +227,7 @@ public class DeclarationResolver { JetClassOrObject klass = entry.getKey(); MutableClassDescriptor classDescriptor = (MutableClassDescriptor) entry.getValue(); - if (klass instanceof JetClass && KotlinBuiltIns.getInstance().isData(classDescriptor)) { + if (klass instanceof JetClass && KotlinBuiltIns.isData(classDescriptor)) { List parameters = klass.hasPrimaryConstructor() ? getConstructorOfDataClass(classDescriptor).getValueParameters() : diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.kt index afd8edc4428..99bb1ffc9b8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.kt @@ -130,7 +130,7 @@ public open class LazyClassMemberScope(resolveSession: ResolveSession, } private fun generateDataClassMethods(result: MutableCollection, name: Name) { - if (!KotlinBuiltIns.getInstance().isData(thisDescriptor)) return + if (!KotlinBuiltIns.isData(thisDescriptor)) return val constructor = getPrimaryConstructor() if (constructor == null) return @@ -240,7 +240,7 @@ public open class LazyClassMemberScope(resolveSession: ResolveSession, } private fun addDataClassMethods(result: MutableCollection) { - if (!KotlinBuiltIns.getInstance().isData(thisDescriptor)) return + if (!KotlinBuiltIns.isData(thisDescriptor)) return if (getPrimaryConstructor() == null) return diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/InlineUtil.java b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/InlineUtil.java index 23d65e1e32f..2dbb9b20a3d 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/InlineUtil.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/InlineUtil.java @@ -35,7 +35,7 @@ import java.util.List; public class InlineUtil { public static boolean hasNoinlineAnnotation(@NotNull CallableDescriptor valueParameterDescriptor) { - return KotlinBuiltIns.containsAnnotation(valueParameterDescriptor, KotlinBuiltIns.getInstance().getNoinlineClassAnnotation()); + return KotlinBuiltIns.containsAnnotation(valueParameterDescriptor, KotlinBuiltIns.getNoinlineClassAnnotationFqName()); } @NotNull diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java index c7a4a2e8fe1..b465535392f 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java @@ -149,26 +149,34 @@ public class KotlinBuiltIns { } private static class FqNames { - public final FqNameUnsafe any = fqName("Any"); - public final FqNameUnsafe nothing = fqName("Nothing"); - public final FqNameUnsafe cloneable = fqName("Cloneable"); - public final FqNameUnsafe suppress = fqName("suppress"); - public final FqNameUnsafe unit = fqName("Unit"); - public final FqNameUnsafe string = fqName("String"); + public final FqNameUnsafe any = fqNameUnsafe("Any"); + public final FqNameUnsafe nothing = fqNameUnsafe("Nothing"); + public final FqNameUnsafe cloneable = fqNameUnsafe("Cloneable"); + public final FqNameUnsafe suppress = fqNameUnsafe("suppress"); + public final FqNameUnsafe unit = fqNameUnsafe("Unit"); + public final FqNameUnsafe string = fqNameUnsafe("String"); + public final FqName data = fqName("data"); + public final FqName deprecated = fqName("deprecated"); + public final FqName tailRecursive = fqName("tailRecursive"); + public final FqName noinline = fqName("noinline"); public final Set functionClasses = computeIndexedFqNames("Function", FUNCTION_TRAIT_COUNT); public final Set extensionFunctionClasses = computeIndexedFqNames("ExtensionFunction", FUNCTION_TRAIT_COUNT); @NotNull - private static FqNameUnsafe fqName(@NotNull String simpleName) { - return BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier(simpleName)).toUnsafe(); + private static FqNameUnsafe fqNameUnsafe(@NotNull String simpleName) { + return fqName(simpleName).toUnsafe(); + } + + private static FqName fqName(String simpleName) { + return BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier(simpleName)); } @NotNull private static Set computeIndexedFqNames(@NotNull String prefix, int count) { Set result = new HashSet(); for (int i = 0; i < count; i++) { - result.add(fqName(prefix + i)); + result.add(fqNameUnsafe(prefix + i)); } return result; } @@ -326,8 +334,8 @@ public class KotlinBuiltIns { } @NotNull - public ClassDescriptor getNoinlineClassAnnotation() { - return getBuiltInClassByName("noinline"); + public static FqName getNoinlineClassAnnotationFqName() { + return FQ_NAMES.noinline; } @NotNull @@ -340,11 +348,6 @@ public class KotlinBuiltIns { return getBuiltInClassByName("inlineOptions"); } - @NotNull - public ClassDescriptor getTailRecursiveAnnotationClass() { - return getBuiltInClassByName("tailRecursive"); - } - @NotNull public ClassDescriptor getDeprecatedAnnotation() { return getBuiltInClassByName("deprecated"); @@ -876,25 +879,24 @@ public class KotlinBuiltIns { return FQ_NAMES.cloneable.equals(DescriptorUtils.getFqName(descriptor)); } - public boolean isData(@NotNull ClassDescriptor classDescriptor) { - return containsAnnotation(classDescriptor, getDataClassAnnotation()); + public static boolean isData(@NotNull ClassDescriptor classDescriptor) { + return containsAnnotation(classDescriptor, FQ_NAMES.data); } - public boolean isDeprecated(@NotNull DeclarationDescriptor declarationDescriptor) { - return containsAnnotation(declarationDescriptor, getDeprecatedAnnotation()); + public static boolean isDeprecated(@NotNull DeclarationDescriptor declarationDescriptor) { + return containsAnnotation(declarationDescriptor, FQ_NAMES.deprecated); } - public boolean isTailRecursive(@NotNull DeclarationDescriptor declarationDescriptor) { - return containsAnnotation(declarationDescriptor, getTailRecursiveAnnotationClass()); + public static boolean isTailRecursive(@NotNull DeclarationDescriptor declarationDescriptor) { + return containsAnnotation(declarationDescriptor, FQ_NAMES.tailRecursive); } public static boolean isSuppressAnnotation(@NotNull AnnotationDescriptor annotationDescriptor) { return isConstructedFromGivenClass(annotationDescriptor.getType(), FQ_NAMES.suppress); } - static boolean containsAnnotation(DeclarationDescriptor descriptor, ClassDescriptor annotationClass) { - FqName fqName = DescriptorUtils.getFqName(annotationClass).toSafe(); - return descriptor.getOriginal().getAnnotations().findAnnotation(fqName) != null; + static boolean containsAnnotation(DeclarationDescriptor descriptor, FqName annotationClassFqName) { + return descriptor.getOriginal().getAnnotations().findAnnotation(annotationClassFqName) != null; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSorting.kt b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSorting.kt index 83b04916fef..f6b6420c00b 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSorting.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSorting.kt @@ -96,7 +96,7 @@ private object KindWeigher : LookupElementWeigher("kotlin.kind") { private object DeprecatedWeigher : LookupElementWeigher("kotlin.deprecated") { override fun weigh(element: LookupElement): Int { val o = element.getObject() - return if (o is DeclarationDescriptorLookupObject && KotlinBuiltIns.getInstance().isDeprecated(o.descriptor)) 1 else 0 + return if (o is DeclarationDescriptorLookupObject && KotlinBuiltIns.isDeprecated(o.descriptor)) 1 else 0 } } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/LookupElementFactory.kt b/idea/src/org/jetbrains/jet/plugin/completion/LookupElementFactory.kt index 83f1e61785a..3fbb83f19ef 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/LookupElementFactory.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/LookupElementFactory.kt @@ -107,7 +107,7 @@ public open class LookupElementFactory protected() { } } - if (KotlinBuiltIns.getInstance().isDeprecated(descriptor)) { + if (KotlinBuiltIns.isDeprecated(descriptor)) { element = element.withStrikeoutness(true) } diff --git a/idea/src/org/jetbrains/jet/plugin/parameterInfo/JetFunctionParameterInfoHandler.java b/idea/src/org/jetbrains/jet/plugin/parameterInfo/JetFunctionParameterInfoHandler.java index 1732c8acb92..c77818b7ffb 100644 --- a/idea/src/org/jetbrains/jet/plugin/parameterInfo/JetFunctionParameterInfoHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/parameterInfo/JetFunctionParameterInfoHandler.java @@ -225,7 +225,7 @@ public class JetFunctionParameterInfoHandler implements ParameterInfoHandlerWith int boldStartOffset = -1; int boldEndOffset = -1; boolean isGrey = false; - boolean isDeprecated = KotlinBuiltIns.getInstance().isDeprecated(functionDescriptor); + boolean isDeprecated = KotlinBuiltIns.isDeprecated(functionDescriptor); boolean[] usedIndexes = new boolean[valueParameters.size()]; Arrays.fill(usedIndexes, false); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java index daa11a9ec9d..0c8a53a3598 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java @@ -137,7 +137,7 @@ public final class ClassTranslator extends AbstractTranslator { bodyVisitor.traverseContainer(classDeclaration, declarationContext); delegationTranslator.generateDelegated(properties); - if (KotlinBuiltIns.getInstance().isData(descriptor)) { + if (KotlinBuiltIns.isData(descriptor)) { new JsDataClassGenerator(classDeclaration, declarationContext, properties).generate(); }