Merge remote-tracking branch 'origin/master'

This commit is contained in:
Dmitry Jemerov
2015-10-19 21:01:38 +02:00
623 changed files with 2021 additions and 1473 deletions
@@ -48,8 +48,6 @@ public class AccessorForFunctionDescriptor extends AbstractAccessorForFunctionDe
descriptor.getReturnType(),
Modality.FINAL,
Visibilities.LOCAL);
setOperator(descriptor.isOperator());
setInfix(descriptor.isInfix());
}
@NotNull
@@ -69,7 +69,9 @@ public class AccessorForPropertyDescriptor extends PropertyDescriptorImpl implem
public static class Getter extends PropertyGetterDescriptorImpl implements AccessorForCallableDescriptor<PropertyGetterDescriptor> {
public Getter(AccessorForPropertyDescriptor property) {
super(property, Annotations.Companion.getEMPTY(), Modality.FINAL, Visibilities.LOCAL,
false, false, Kind.DECLARATION, null, SourceElement.NO_SOURCE);
false, false,
/* isExternal = */ false,
Kind.DECLARATION, null, SourceElement.NO_SOURCE);
initialize(property.getType());
}
@@ -91,7 +93,9 @@ public class AccessorForPropertyDescriptor extends PropertyDescriptorImpl implem
public static class Setter extends PropertySetterDescriptorImpl implements AccessorForCallableDescriptor<PropertySetterDescriptor>{
public Setter(AccessorForPropertyDescriptor property) {
super(property, Annotations.Companion.getEMPTY(), Modality.FINAL, Visibilities.LOCAL,
false, false, Kind.DECLARATION, null, SourceElement.NO_SOURCE);
false, false,
/* isExternal = */ false,
Kind.DECLARATION, null, SourceElement.NO_SOURCE);
initializeDefault();
}
@@ -62,9 +62,7 @@ public abstract class AnnotationCodegen {
public static final List<JvmFlagAnnotation> METHOD_FLAGS = Arrays.asList(
new JvmFlagAnnotation("kotlin.jvm.Strictfp", Opcodes.ACC_STRICT),
new JvmFlagAnnotation("kotlin.jvm.Synchronized", Opcodes.ACC_SYNCHRONIZED),
new JvmFlagAnnotation("kotlin.jvm.native", Opcodes.ACC_NATIVE),
new JvmFlagAnnotation("kotlin.external", Opcodes.ACC_NATIVE)
new JvmFlagAnnotation("kotlin.jvm.Synchronized", Opcodes.ACC_SYNCHRONIZED)
);
private static final AnnotationVisitor NO_ANNOTATION_VISITOR = new AnnotationVisitor(Opcodes.ASM5) {};
@@ -192,6 +192,10 @@ public class AsmUtil {
}
}
if (functionDescriptor.getOriginal().isExternal()) {
flags |= Opcodes.ACC_NATIVE;
}
if (AnnotationUtilKt.isPlatformStaticInCompanionObject(functionDescriptor)) {
// Native method will be a member of the class, the companion object method will be delegated to it
flags &= ~Opcodes.ACC_NATIVE;
@@ -479,7 +479,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
private void generateFunctionsForDataClasses() {
if (!KotlinBuiltIns.isData(descriptor)) return;
if (!descriptor.isData()) return;
new DataClassMethodGeneratorImpl(myClass, bindingContext).generate();
}
@@ -763,8 +763,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
new DefaultParameterValueLoader() {
@Override
public StackValue genValue(ValueParameterDescriptor valueParameter, ExpressionCodegen codegen) {
assert KotlinBuiltIns.isData((ClassDescriptor) function.getContainingDeclaration())
: "Function container should be annotated with [data]: " + function;
assert ((ClassDescriptor) function.getContainingDeclaration()).isData()
: "Function container must have [data] modifier: " + function;
PropertyDescriptor property = bindingContext.get(BindingContext.VALUE_PARAMETER_AS_PROPERTY, valueParameter);
assert property != null : "Copy function doesn't correspond to any property: " + function;
return codegen.intermediateValueForProperty(property, false, null, StackValue.LOCAL_0);
@@ -100,6 +100,11 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class
return isInner;
}
@Override
public boolean isData() {
return false;
}
@Override
public boolean isCompanionObject() {
return false;
@@ -20,7 +20,6 @@ import com.google.protobuf.MessageLite;
import com.intellij.openapi.util.Pair;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
@@ -62,14 +61,6 @@ public class JvmSerializerExtension extends SerializerExtension {
return useTypeTable;
}
@Override
public void serializeClass(@NotNull ClassDescriptor descriptor, @NotNull ProtoBuf.Class.Builder proto) {
AnnotationDescriptor annotation = descriptor.getAnnotations().findAnnotation(KotlinBuiltIns.FQ_NAMES.annotation);
if (annotation != null) {
proto.addExtension(JvmProtoBuf.classAnnotation, annotationSerializer.serializeAnnotation(annotation));
}
}
@Override
public void serializeValueParameter(@NotNull ValueParameterDescriptor descriptor, @NotNull ProtoBuf.ValueParameter.Builder proto) {
Integer index = bindings.get(INDEX_FOR_VALUE_PARAMETER, descriptor);
@@ -0,0 +1,69 @@
/*
* 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.inline
import org.jetbrains.kotlin.load.kotlin.FileBasedKotlinClass
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
import org.jetbrains.kotlin.serialization.Flags
import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.deserialization.NameResolver
import org.jetbrains.kotlin.serialization.deserialization.TypeTable
import org.jetbrains.kotlin.serialization.jvm.BitEncoding
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
public fun inlineFunctionsJvmNames(bytes: ByteArray): Set<String> {
val header = readKotlinHeader(bytes)
val annotationData = header.annotationData
val strings = header.strings
if (annotationData == null || strings == null) return emptySet()
return when (header.kind) {
KotlinClassHeader.Kind.CLASS -> {
val classData = JvmProtoBufUtil.readClassDataFrom(BitEncoding.decodeBytes(annotationData), strings)
inlineFunctionsJvmNames(classData.classProto.functionList, classData.nameResolver, classData.classProto.typeTable)
}
KotlinClassHeader.Kind.FILE_FACADE,
KotlinClassHeader.Kind.MULTIFILE_CLASS_PART -> {
val packageData = JvmProtoBufUtil.readPackageDataFrom(BitEncoding.decodeBytes(annotationData), strings)
inlineFunctionsJvmNames(packageData.packageProto.functionList, packageData.nameResolver, packageData.packageProto.typeTable)
}
else -> emptySet<String>()
}
}
private fun inlineFunctionsJvmNames(functions: List<ProtoBuf.Function>, nameResolver: NameResolver, protoTypeTable: ProtoBuf.TypeTable): Set<String> {
val typeTable = TypeTable(protoTypeTable)
val inlineFunctions = functions.filter { Flags.IS_INLINE.get(it.flags) }
val jvmNames = inlineFunctions.map {
JvmProtoBufUtil.getJvmMethodSignature(it, nameResolver, typeTable)
}
return jvmNames.filterNotNull().toSet()
}
private fun readKotlinHeader(bytes: ByteArray): KotlinClassHeader {
var header: KotlinClassHeader? = null
FileBasedKotlinClass.create(bytes) { className, classHeader, innerClasses ->
header = classHeader
null
}
if (header == null) throw AssertionError("Could not read kotlin header from byte array")
return header!!
}
@@ -157,7 +157,11 @@ public class SingleAbstractMethodUtils {
assert parameterType != null : "couldn't substitute type: " + parameterTypeUnsubstituted +
", substitutor = " + typeParameters.substitutor;
ValueParameterDescriptor parameter = new ValueParameterDescriptorImpl(
result, null, 0, Annotations.Companion.getEMPTY(), Name.identifier("function"), parameterType, false, null, SourceElement.NO_SOURCE);
result, null, 0, Annotations.Companion.getEMPTY(), Name.identifier("function"), parameterType,
/* declaresDefaultValue = */ false,
/* isCrossinline = */ false,
/* isNoinline = */ false,
null, SourceElement.NO_SOURCE);
JetType returnType = typeParameters.substitutor.substitute(samInterface.getDefaultType(), Variance.OUT_VARIANCE);
assert returnType != null : "couldn't substitute type: " + samInterface.getDefaultType() +
@@ -268,7 +272,11 @@ public class SingleAbstractMethodUtils {
ValueParameterDescriptor newParam = new ValueParameterDescriptorImpl(
samAdapter, null, originalParam.getIndex(), originalParam.getAnnotations(),
originalParam.getName(), newType, false, null, SourceElement.NO_SOURCE
originalParam.getName(), newType,
/* declaresDefaultValue = */ false,
/* isCrossinline = */ false,
/* isNoinline = */ false,
null, SourceElement.NO_SOURCE
);
valueParameters.add(newParam);
}
@@ -16,35 +16,23 @@
package org.jetbrains.kotlin.load.kotlin.nativeDeclarations
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.DeclarationChecker
import org.jetbrains.kotlin.psi.JetDeclaration
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
import org.jetbrains.kotlin.psi.JetDeclaration
import org.jetbrains.kotlin.psi.JetDeclarationWithBody
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.annotations.hasInlineAnnotation
import org.jetbrains.kotlin.resolve.diagnostics.SuppressDiagnosticsByAnnotations
import org.jetbrains.kotlin.resolve.DeclarationChecker
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.diagnostics.FUNCTION_NO_BODY_ERRORS
private val NATIVE_ANNOTATION_CLASS_NAME = FqName("kotlin.jvm.native")
private val EXTERNAL_ANNOTATION_CLASS_NAME = FqName("kotlin.external")
import org.jetbrains.kotlin.resolve.diagnostics.SuppressDiagnosticsByAnnotations
import org.jetbrains.kotlin.resolve.inline.InlineUtil
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
public fun DeclarationDescriptor.hasNativeAnnotation(): Boolean {
return getAnnotations().findAnnotation(EXTERNAL_ANNOTATION_CLASS_NAME) != null
|| annotations.findAnnotation(NATIVE_ANNOTATION_CLASS_NAME) != null
return this is FunctionDescriptor && this.isExternal
}
public class SuppressNoBodyErrorsForExternalDeclarations : SuppressDiagnosticsByAnnotations(FUNCTION_NO_BODY_ERRORS, EXTERNAL_ANNOTATION_CLASS_NAME)
public class SuppressNoBodyErrorsForNativeDeclarations : SuppressDiagnosticsByAnnotations(FUNCTION_NO_BODY_ERRORS, NATIVE_ANNOTATION_CLASS_NAME)
public class NativeFunChecker : DeclarationChecker {
override fun check(
declaration: JetDeclaration,
@@ -66,7 +54,7 @@ public class NativeFunChecker : DeclarationChecker {
diagnosticHolder.report(ErrorsJvm.EXTERNAL_DECLARATION_CANNOT_HAVE_BODY.on(declaration))
}
if (descriptor.hasInlineAnnotation()) {
if (InlineUtil.isInline(descriptor)) {
diagnosticHolder.report(ErrorsJvm.EXTERNAL_DECLARATION_CANNOT_BE_INLINED.on(declaration))
}
@@ -28,9 +28,9 @@ import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DeclarationChecker
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.annotations.hasInlineAnnotation
import org.jetbrains.kotlin.resolve.annotations.hasIntrinsicAnnotation
import org.jetbrains.kotlin.resolve.annotations.hasPlatformStaticAnnotation
import org.jetbrains.kotlin.resolve.inline.InlineUtil
import org.jetbrains.kotlin.resolve.jvm.annotations.hasJvmOverloadsAnnotation
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
@@ -41,7 +41,7 @@ public class LocalFunInlineChecker : DeclarationChecker {
descriptor: DeclarationDescriptor,
diagnosticHolder: DiagnosticSink,
bindingContext: BindingContext) {
if (descriptor.hasInlineAnnotation() &&
if (InlineUtil.isInline(descriptor) &&
declaration is JetNamedFunction &&
descriptor is FunctionDescriptor &&
descriptor.getVisibility() == Visibilities.LOCAL) {
@@ -217,9 +217,10 @@ public class ReifiedTypeParameterAnnotationChecker : DeclarationChecker {
) {
if (descriptor.hasIntrinsicAnnotation()) return
if (descriptor is CallableDescriptor && !descriptor.hasInlineAnnotation()) {
if (descriptor is CallableDescriptor && !InlineUtil.isInline(descriptor)) {
checkTypeParameterDescriptorsAreNotReified(descriptor.getTypeParameters(), diagnosticHolder)
}
if (descriptor is ClassDescriptor) {
checkTypeParameterDescriptorsAreNotReified(descriptor.getTypeConstructor().getParameters(), diagnosticHolder)
}
@@ -229,6 +229,8 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
altName != null ? altName : originalParameterDescriptor.getName(),
alternativeType,
originalParameterDescriptor.declaresDefaultValue(),
originalParameterDescriptor.isCrossinline(),
originalParameterDescriptor.isNoinline(),
alternativeVarargElementType,
SourceElement.NO_SOURCE
));
@@ -266,6 +266,8 @@ public class SignaturesPropagationData {
stableName != null ? stableName : originalParam.getName(),
altType,
originalParam.declaresDefaultValue(),
originalParam.isCrossinline(),
originalParam.isNoinline(),
varargCheckResult.isVararg ? DescriptorUtilsKt.getBuiltIns(originalParam).getArrayElementType(altType) : null,
SourceElement.NO_SOURCE
));
@@ -281,6 +281,7 @@ class JavaSyntheticPropertiesScope(storageManager: StorageManager) : JetScopeImp
visibility,
false,
false,
getMethod.isExternal,
CallableMemberDescriptor.Kind.SYNTHESIZED,
null,
SourceElement.NO_SOURCE)
@@ -293,6 +294,7 @@ class JavaSyntheticPropertiesScope(storageManager: StorageManager) : JetScopeImp
syntheticExtensionVisibility(setMethod),
false,
false,
setMethod.isExternal,
CallableMemberDescriptor.Kind.SYNTHESIZED,
null,
SourceElement.NO_SOURCE)
@@ -30,9 +30,7 @@ import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.JetScope
import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.types.*
import java.util.ArrayList
import java.util.HashMap
import java.util.LinkedHashSet
import java.util.*
import kotlin.properties.Delegates
interface SamAdapterExtensionFunctionDescriptor : FunctionDescriptor {
@@ -151,6 +149,9 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : JetScope by Jet
newVisibility: Visibility,
newIsOperator: Boolean,
newIsInfix: Boolean,
newIsExternal: Boolean,
newIsInline: Boolean,
newIsTailrec: Boolean,
original: FunctionDescriptor?,
copyOverrides: Boolean,
kind: CallableMemberDescriptor.Kind,
@@ -159,7 +160,8 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : JetScope by Jet
newReturnType: JetType
): FunctionDescriptor? {
val descriptor = super<SimpleFunctionDescriptorImpl>.doSubstitute(
originalSubstitutor, newOwner, newModality, newVisibility, newIsOperator, newIsInfix, original,
originalSubstitutor, newOwner, newModality, newVisibility,
newIsOperator, newIsInfix, newIsExternal, newIsInline, newIsTailrec, original,
copyOverrides, kind, newValueParameterDescriptors, newExtensionReceiverParameterType, newReturnType)
as MyFunctionDescriptor? ?: return null
@@ -795,7 +795,7 @@ public class JetFlowInformationProvider {
public void markTailCalls() {
final DeclarationDescriptor subroutineDescriptor = trace.get(BindingContext.DECLARATION_TO_DESCRIPTOR, subroutine);
if (!(subroutineDescriptor instanceof FunctionDescriptor)) return;
if (!KotlinBuiltIns.isTailRecursive(subroutineDescriptor)) return;
if (!((FunctionDescriptor) subroutineDescriptor).isTailrec()) return;
// finally blocks are copied which leads to multiple diagnostics reported on one instruction
class KindAndCall {
@@ -216,11 +216,6 @@ public interface JetTokens {
CONST_KEYWORD, OPERATOR_KEYWORD, INFIX_KEYWORD
};
// Please synchronize this array with org.jetbrains.kotlin.descriptors.annotations.ANNOTATION_MODIFIERS_FQ_NAMES
JetModifierKeywordToken[] ANNOTATION_MODIFIERS_KEYWORDS_ARRAY = new JetModifierKeywordToken[] {
DATA_KEYWORD, INLINE_KEYWORD, NOINLINE_KEYWORD, TAILREC_KEYWORD, EXTERNAL_KEYWORD, ANNOTATION_KEYWORD, CROSSINLINE_KEYWORD
};
TokenSet MODIFIER_KEYWORDS = TokenSet.create(MODIFIER_KEYWORDS_ARRAY);
TokenSet VISIBILITY_MODIFIERS = TokenSet.create(PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD);
@@ -26,7 +26,6 @@ import com.intellij.psi.impl.source.codeStyle.CodeEditUtil
import com.intellij.psi.stubs.IStubElementType
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.JetNodeTypes
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub
import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes
@@ -108,17 +107,7 @@ abstract public class JetClassOrObject :
public fun getSecondaryConstructors(): List<JetSecondaryConstructor> = getBody()?.getSecondaryConstructors().orEmpty()
public fun isAnnotation(): Boolean =
getAnnotation(KotlinBuiltIns.FQ_NAMES.annotation.shortName().asString()) != null || hasModifier(JetTokens.ANNOTATION_KEYWORD)
private fun getAnnotation(name: String): JetAnnotationEntry? {
return getAnnotationEntries().firstOrNull() { entry ->
val typeReference = entry.getTypeReference()
val userType = typeReference?.getStubOrPsiChild(JetStubElementTypes.USER_TYPE)
name == userType?.getReferencedName()
}
}
public fun isAnnotation(): Boolean = hasModifier(JetTokens.ANNOTATION_KEYWORD)
public override fun delete() {
CheckUtil.checkWritable(this);
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.psi.stubs.KotlinFileStub;
import java.io.IOException;
public class JetFileElementType extends IStubFileElementType<KotlinFileStub> {
public static final int STUB_VERSION = 61;
public static final int STUB_VERSION = 62;
private static final String NAME = "kotlin.FILE";
@@ -18,14 +18,10 @@ package org.jetbrains.kotlin.resolve;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.*;
import org.jetbrains.kotlin.diagnostics.Errors;
import org.jetbrains.kotlin.lexer.JetModifierKeywordToken;
import org.jetbrains.kotlin.lexer.JetTokens;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt;
import org.jetbrains.kotlin.resolve.calls.CallResolver;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument;
import org.jetbrains.kotlin.resolve.calls.results.OverloadResolutionResults;
@@ -55,19 +51,14 @@ public class AnnotationResolver {
@NotNull private TypeResolver typeResolver;
@NotNull private final ConstantExpressionEvaluator constantExpressionEvaluator;
@NotNull private final List<AnnotationDescriptor> modifiersAnnotations;
public AnnotationResolver(
@NotNull CallResolver callResolver,
@NotNull ConstantExpressionEvaluator constantExpressionEvaluator,
@NotNull StorageManager storageManager,
@NotNull KotlinBuiltIns kotlinBuiltIns
@NotNull StorageManager storageManager
) {
this.callResolver = callResolver;
this.constantExpressionEvaluator = constantExpressionEvaluator;
this.storageManager = storageManager;
modifiersAnnotations = AnnotationUtilKt.buildMigrationAnnotationDescriptors(kotlinBuiltIns);
}
@@ -123,31 +114,7 @@ public class AnnotationResolver {
return Annotations.Companion.getEMPTY();
}
List<JetAnnotationEntry> annotationEntryElements = modifierList.getAnnotationEntries();
return resolveAndAppendAnnotationsFromModifiers(
resolveAnnotationEntries(scope, annotationEntryElements, trace, shouldResolveArguments),
modifierList
);
}
@NotNull
public Annotations resolveAndAppendAnnotationsFromModifiers(
@NotNull Annotations annotations,
@NotNull JetModifierList modifierList
) {
List<AnnotationDescriptor> annotationFromModifiers = new ArrayList<AnnotationDescriptor>();
for (int i = 0; i < JetTokens.ANNOTATION_MODIFIERS_KEYWORDS_ARRAY.length; i++) {
JetModifierKeywordToken modifier = JetTokens.ANNOTATION_MODIFIERS_KEYWORDS_ARRAY[i];
if (modifierList.hasModifier(modifier)) {
annotationFromModifiers.add(modifiersAnnotations.get(i));
}
}
if (annotationFromModifiers.isEmpty()) return annotations;
return new CompositeAnnotations(annotations, new AnnotationsImpl(annotationFromModifiers));
return resolveAnnotationEntries(scope, modifierList.getAnnotationEntries(), trace, shouldResolveArguments);
}
private Annotations resolveAnnotationEntries(
@@ -16,21 +16,14 @@
package org.jetbrains.kotlin.resolve.annotations
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptorImpl
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.types.JetTypeImpl
public fun DeclarationDescriptor.hasInlineAnnotation(): Boolean {
return getAnnotations().findAnnotation(FqName("kotlin.inline")) != null
}
public fun DeclarationDescriptor.hasPlatformStaticAnnotation(): Boolean {
return getAnnotations().findAnnotation(FqName("kotlin.platform.platformStatic")) != null ||
@@ -67,21 +60,4 @@ public fun AnnotationDescriptor.argumentValue(parameterName: String): Any? {
return getAllValueArguments().entrySet()
.singleOrNull { it.key.getName().asString() == parameterName }
?.value?.value
}
public fun KotlinBuiltIns.buildMigrationAnnotationDescriptors(): List<AnnotationDescriptor> =
JetTokens.ANNOTATION_MODIFIERS_KEYWORDS_ARRAY.map {
modifierKeyword ->
val name = Name.identifier(modifierKeyword.value)
val type = JetTypeImpl.create(
Annotations.EMPTY,
getBuiltInClassByNameNullable(name) ?: getAnnotationClassByName(name),
/* nullable = */false, /* arguments = */emptyList()
)
AnnotationDescriptorImpl(
type,
emptyMap(), SourceElement.NO_SOURCE
)
}
}
@@ -16,10 +16,12 @@
package org.jetbrains.kotlin.resolve
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.diagnostics.*
import org.jetbrains.kotlin.builtins.*
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.psi.JetClassOrObject
import org.jetbrains.kotlin.psi.JetDeclaration
public class DataClassAnnotationChecker : DeclarationChecker {
@@ -32,7 +34,7 @@ public class DataClassAnnotationChecker : DeclarationChecker {
if (descriptor !is ClassDescriptor) return
if (declaration !is JetClassOrObject) return
if (KotlinBuiltIns.isData(descriptor)) {
if (descriptor.isData) {
if (descriptor.unsubstitutedPrimaryConstructor == null && descriptor.constructors.isNotEmpty()) {
declaration.nameIdentifier?.let { diagnosticHolder.report(Errors.PRIMARY_CONSTRUCTOR_REQUIRED_FOR_DATA_CLASS.on(it)) }
}
@@ -25,7 +25,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory1;
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory0;
import org.jetbrains.kotlin.diagnostics.Errors;
import org.jetbrains.kotlin.lexer.JetModifierKeywordToken;
@@ -714,6 +713,8 @@ public class DeclarationsChecker {
DeclarationDescriptor containingDescriptor = functionDescriptor.getContainingDeclaration();
boolean hasAbstractModifier = function.hasModifier(JetTokens.ABSTRACT_KEYWORD);
boolean hasExternalModifier = function.hasModifier(JetTokens.EXTERNAL_KEYWORD);
if (containingDescriptor instanceof ClassDescriptor) {
ClassDescriptor classDescriptor = (ClassDescriptor) containingDescriptor;
boolean inTrait = classDescriptor.getKind() == ClassKind.INTERFACE;
@@ -728,19 +729,19 @@ public class DeclarationsChecker {
trace.report(ABSTRACT_FUNCTION_WITH_BODY.on(function, functionDescriptor));
}
if (!hasBody && inTrait) {
if (function.hasModifier(JetTokens.FINAL_KEYWORD)) {
if (function.hasModifier(JetTokens.FINAL_KEYWORD) && !hasExternalModifier) {
trace.report(FINAL_FUNCTION_WITH_NO_BODY.on(function, functionDescriptor));
}
if (function.hasModifier(JetTokens.PRIVATE_KEYWORD)) {
trace.report(PRIVATE_FUNCTION_WITH_NO_BODY.on(function, functionDescriptor));
}
}
if (!hasBody && !hasAbstractModifier && !inTrait) {
if (!hasBody && !hasAbstractModifier && !hasExternalModifier && !inTrait) {
trace.report(NON_ABSTRACT_FUNCTION_WITH_NO_BODY.on(function, functionDescriptor));
}
return;
}
if (!function.hasBody() && !hasAbstractModifier) {
if (!function.hasBody() && !hasAbstractModifier && !hasExternalModifier) {
trace.report(NON_MEMBER_FUNCTION_NO_BODY.on(function, functionDescriptor));
}
if (TypeUtilsKt.isNothing(functionDescriptor.getReturnType()) && !function.hasDeclaredReturnType()) {
@@ -61,8 +61,7 @@ import java.util.*;
import static org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget.*;
import static org.jetbrains.kotlin.diagnostics.Errors.*;
import static org.jetbrains.kotlin.lexer.JetTokens.OVERRIDE_KEYWORD;
import static org.jetbrains.kotlin.lexer.JetTokens.VARARG_KEYWORD;
import static org.jetbrains.kotlin.lexer.JetTokens.*;
import static org.jetbrains.kotlin.resolve.BindingContext.*;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
import static org.jetbrains.kotlin.resolve.ModifiersChecker.resolveModalityFromModifiers;
@@ -278,6 +277,8 @@ public class DescriptorResolver {
new ValueParameterDescriptorImpl(functionDescriptor, null, parameter.getIndex(), parameter.getAnnotations(),
parameter.getName(), parameter.getType(),
declaresDefaultValue,
parameter.isCrossinline(),
parameter.isNoinline(),
parameter.getVarargElementType(), parameter.getSource());
parameterDescriptors.add(parameterDescriptor);
if (declaresDefaultValue) {
@@ -366,6 +367,8 @@ public class DescriptorResolver {
JetPsiUtil.safeName(valueParameter.getName()),
variableType,
valueParameter.hasDefaultValue(),
valueParameter.hasModifier(CROSSINLINE_KEYWORD),
valueParameter.hasModifier(NOINLINE_KEYWORD),
varargElementType,
KotlinSourceElementKt.toSourceElement(valueParameter)
);
@@ -1002,7 +1005,7 @@ public class DescriptorResolver {
setterDescriptor = new PropertySetterDescriptorImpl(propertyDescriptor, annotations,
resolveModalityFromModifiers(setter, propertyDescriptor.getModality()),
resolveVisibilityFromModifiers(setter, propertyDescriptor.getVisibility()),
setter.hasBody(), false,
setter.hasBody(), false, setter.hasModifier(EXTERNAL_KEYWORD),
CallableMemberDescriptor.Kind.DECLARATION, null, KotlinSourceElementKt
.toSourceElement(setter));
if (parameter != null) {
@@ -1042,7 +1045,8 @@ public class DescriptorResolver {
}
else if (property.isVar()) {
Annotations setterAnnotations = annotationSplitter.getAnnotationsForTarget(PROPERTY_SETTER);
setterDescriptor = DescriptorFactory.createSetter(propertyDescriptor, setterAnnotations, !property.hasDelegate());
setterDescriptor = DescriptorFactory.createSetter(propertyDescriptor, setterAnnotations, !property.hasDelegate(),
/* isExternal = */ false);
}
if (!property.isVar()) {
@@ -1082,7 +1086,7 @@ public class DescriptorResolver {
getterDescriptor = new PropertyGetterDescriptorImpl(propertyDescriptor, getterAnnotations,
resolveModalityFromModifiers(getter, propertyDescriptor.getModality()),
resolveVisibilityFromModifiers(getter, propertyDescriptor.getVisibility()),
getter.hasBody(), false,
getter.hasBody(), false, getter.hasModifier(EXTERNAL_KEYWORD),
CallableMemberDescriptor.Kind.DECLARATION, null, KotlinSourceElementKt
.toSourceElement(getter));
getterDescriptor.initialize(returnType);
@@ -1090,7 +1094,8 @@ public class DescriptorResolver {
}
else {
Annotations getterAnnotations = annotationSplitter.getAnnotationsForTarget(PROPERTY_GETTER);
getterDescriptor = DescriptorFactory.createGetter(propertyDescriptor, getterAnnotations, !property.hasDelegate());
getterDescriptor = DescriptorFactory.createGetter(propertyDescriptor, getterAnnotations, !property.hasDelegate(),
/* isExternal = */ false);
getterDescriptor.initialize(propertyDescriptor.getType());
}
return getterDescriptor;
@@ -29,7 +29,9 @@ import org.jetbrains.kotlin.diagnostics.Errors.*
import org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.DescriptorResolver.*
import org.jetbrains.kotlin.resolve.DescriptorResolver.getDefaultModality
import org.jetbrains.kotlin.resolve.DescriptorResolver.getDefaultVisibility
import org.jetbrains.kotlin.resolve.DescriptorResolver.transformAnonymousTypeIfNeeded
import org.jetbrains.kotlin.resolve.DescriptorUtils.getDispatchReceiverParameterIfNeeded
import org.jetbrains.kotlin.resolve.DescriptorUtils.isFunctionExpression
import org.jetbrains.kotlin.resolve.DescriptorUtils.isFunctionLiteral
@@ -178,6 +180,9 @@ class FunctionDescriptorResolver(
)
functionDescriptor.isOperator = function.hasModifier(JetTokens.OPERATOR_KEYWORD)
functionDescriptor.isInfix = function.hasModifier(JetTokens.INFIX_KEYWORD)
functionDescriptor.isExternal = function.hasModifier(JetTokens.EXTERNAL_KEYWORD)
functionDescriptor.isInline = function.hasModifier(JetTokens.INLINE_KEYWORD)
functionDescriptor.isTailrec = function.hasModifier(JetTokens.TAILREC_KEYWORD)
receiverType?.let { ForceResolveUtil.forceResolveAllContents(it.getAnnotations()) }
for (valueParameterDescriptor in valueParameterDescriptors) {
ForceResolveUtil.forceResolveAllContents(valueParameterDescriptor.getType().getAnnotations())
@@ -198,6 +203,7 @@ class FunctionDescriptorResolver(
val valueParameterDescriptor = expectedValueParameters.first()
val it = ValueParameterDescriptorImpl(functionDescriptor, null, 0, Annotations.EMPTY, Name.identifier("it"),
valueParameterDescriptor.getType(), valueParameterDescriptor.declaresDefaultValue(),
valueParameterDescriptor.isCrossinline, valueParameterDescriptor.isNoinline,
valueParameterDescriptor.getVarargElementType(), SourceElement.NO_SOURCE)
trace.record(BindingContext.AUTO_CREATED_IT, it)
return listOf(it)
@@ -141,6 +141,8 @@ public class FunctionDescriptorUtil {
parameter.getName(),
returnType,
parameter.declaresDefaultValue(),
parameter.isCrossinline(),
parameter.isNoinline(),
parameter.getVarargElementType(),
SourceElement.NO_SOURCE
)
@@ -158,6 +160,9 @@ public class FunctionDescriptorUtil {
function.getVisibility());
descriptor.setOperator(function.isOperator());
descriptor.setInfix(function.isInfix());
descriptor.setExternal(function.isExternal());
descriptor.setInline(function.isInline());
descriptor.setTailrec(function.isTailrec());
return descriptor;
}
}
@@ -77,7 +77,7 @@ public object ModifierCheckerCore {
COMPANION_KEYWORD to EnumSet.of(OBJECT),
LATEINIT_KEYWORD to EnumSet.of(MEMBER_PROPERTY),
DATA_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS, LOCAL_CLASS),
INLINE_KEYWORD to EnumSet.of(FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, PROPERTY),
INLINE_KEYWORD to EnumSet.of(FUNCTION),
NOINLINE_KEYWORD to EnumSet.of(VALUE_PARAMETER),
TAILREC_KEYWORD to EnumSet.of(FUNCTION),
EXTERNAL_KEYWORD to EnumSet.of(FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER),
@@ -31,9 +31,7 @@ import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.ReadOnly;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
import org.jetbrains.kotlin.lexer.JetTokens;
import org.jetbrains.kotlin.name.Name;
@@ -733,7 +731,7 @@ public class OverrideResolver {
}
private void checkOverrideForComponentFunction(@NotNull final CallableMemberDescriptor componentFunction) {
final PsiElement dataAnnotation = findDataAnnotationForDataClass(componentFunction.getContainingDeclaration());
final PsiElement dataModifier = findDataModifierForDataClass(componentFunction.getContainingDeclaration());
checkOverridesForMemberMarkedOverride(componentFunction, false, new CheckOverrideReportStrategy() {
private boolean overrideConflict = false;
@@ -742,7 +740,7 @@ public class OverrideResolver {
public void overridingFinalMember(@NotNull CallableMemberDescriptor overridden) {
if (!overrideConflict) {
overrideConflict = true;
trace.report(DATA_CLASS_OVERRIDE_CONFLICT.on(dataAnnotation, componentFunction, overridden.getContainingDeclaration()));
trace.report(DATA_CLASS_OVERRIDE_CONFLICT.on(dataModifier, componentFunction, overridden.getContainingDeclaration()));
}
}
@@ -750,7 +748,7 @@ public class OverrideResolver {
public void returnTypeMismatchOnOverride(@NotNull CallableMemberDescriptor overridden) {
if (!overrideConflict) {
overrideConflict = true;
trace.report(DATA_CLASS_OVERRIDE_CONFLICT.on(dataAnnotation, componentFunction, overridden.getContainingDeclaration()));
trace.report(DATA_CLASS_OVERRIDE_CONFLICT.on(dataModifier, componentFunction, overridden.getContainingDeclaration()));
}
}
@@ -777,16 +775,7 @@ public class OverrideResolver {
}
@NotNull
private static PsiElement findDataAnnotationForDataClass(@NotNull DeclarationDescriptor dataClass) {
AnnotationDescriptor annotation = dataClass.getAnnotations().findAnnotation(KotlinBuiltIns.FQ_NAMES.data);
if (annotation != null) {
JetAnnotationEntry entry = DescriptorToSourceUtils.getSourceFromAnnotation(annotation);
if (entry != null) {
return entry;
}
}
private static PsiElement findDataModifierForDataClass(@NotNull DeclarationDescriptor dataClass) {
JetClass classDeclaration = (JetClass) DescriptorToSourceUtils.getSourceFromDescriptor(dataClass);
if (classDeclaration != null && classDeclaration.getModifierList() != null) {
PsiElement modifier = classDeclaration.getModifierList().getModifier(JetTokens.DATA_KEYWORD);
@@ -795,7 +784,7 @@ public class OverrideResolver {
}
}
throw new IllegalStateException("No data annotation is found for data class " + dataClass);
throw new IllegalStateException("No data modifier is found for data class " + dataClass);
}
@Nullable
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.incremental.components.LookupLocation
import org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.DescriptorFactory
import org.jetbrains.kotlin.resolve.calls.tasks.collectors.CallableDescriptorCollector
import org.jetbrains.kotlin.resolve.calls.tasks.collectors.CallableDescriptorCollectors
@@ -166,7 +165,9 @@ class DynamicCallableDescriptors(private val builtIns: KotlinBuiltIns) {
Annotations.EMPTY,
arg.getArgumentName()?.asName ?: Name.identifier("p$index"),
outType,
false,
/* declaresDefaultValue = */ false,
/* isCrossinline = */ false,
/* isNoinline = */ false,
varargElementType,
SourceElement.NO_SOURCE
))
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.TypeSubstitutor
import org.jetbrains.kotlin.util.OperatorNameConventions
import java.util.ArrayList
import java.util.*
fun createSynthesizedInvokes(functions: Collection<FunctionDescriptor>): Collection<FunctionDescriptor> {
val result = ArrayList<FunctionDescriptor>(1)
@@ -75,7 +75,7 @@ private fun createSynthesizedFunctionWithFirstParameterAsReceiver(descriptor: Fu
original.getValueParameters().drop(1).map { p ->
ValueParameterDescriptorImpl(
result, null, p.getIndex() - 1, p.getAnnotations(), Name.identifier("p${p.getIndex() + 1}"), p.getType(),
p.declaresDefaultValue(), p.getVarargElementType(), p.getSource()
p.declaresDefaultValue(), p.isCrossinline, p.isNoinline, p.getVarargElementType(), p.getSource()
)
},
original.getReturnType(),
@@ -84,6 +84,9 @@ private fun createSynthesizedFunctionWithFirstParameterAsReceiver(descriptor: Fu
)
result.isOperator = original.isOperator
result.isInfix = original.isInfix
result.isExternal = original.isExternal
result.isInline = original.isInline
result.isTailrec = original.isTailrec
return result
}
@@ -22,7 +22,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.BindingTrace;
@@ -31,14 +30,11 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilKt;
import org.jetbrains.kotlin.resolve.calls.model.ArgumentMapping;
import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
import org.jetbrains.kotlin.resolve.constants.ConstantValue;
import org.jetbrains.kotlin.resolve.constants.EnumValue;
import static kotlin.CollectionsKt.firstOrNull;
public class InlineUtil {
public static boolean isInlineLambdaParameter(@NotNull ParameterDescriptor valueParameterOrReceiver) {
return !KotlinBuiltIns.isNoinline(valueParameterOrReceiver) &&
return !(valueParameterOrReceiver instanceof ValueParameterDescriptor
&& ((ValueParameterDescriptor) valueParameterOrReceiver).isNoinline()) &&
KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(valueParameterOrReceiver.getOriginal().getType());
}
@@ -48,20 +44,12 @@ public class InlineUtil {
@NotNull
public static InlineStrategy getInlineStrategy(@NotNull DeclarationDescriptor descriptor) {
AnnotationDescriptor annotation = descriptor.getAnnotations().findAnnotation(KotlinBuiltIns.FQ_NAMES.inline);
if (annotation == null) {
return InlineStrategy.NOT_INLINE;
}
ConstantValue<?> argument = firstOrNull(annotation.getAllValueArguments().values());
if (argument == null) {
if (descriptor instanceof FunctionDescriptor &&
((FunctionDescriptor) descriptor).isInline()) {
return InlineStrategy.AS_FUNCTION;
}
assert argument instanceof EnumValue : "Inline annotation parameter should be enum entry but was: " + argument;
return InlineStrategy.valueOf(((EnumValue) argument).getValue().getName().asString());
}
public static boolean hasOnlyLocalReturn(@NotNull ValueParameterDescriptor descriptor) {
return descriptor.getAnnotations().findAnnotation(KotlinBuiltIns.FQ_NAMES.crossinline) != null;
return InlineStrategy.NOT_INLINE;
}
public static boolean checkNonLocalReturnUsage(
@@ -141,7 +129,7 @@ public class InlineUtil {
public static boolean allowsNonLocalReturns(@NotNull CallableDescriptor lambda) {
if (lambda instanceof ValueParameterDescriptor) {
if (hasOnlyLocalReturn((ValueParameterDescriptor) lambda)) {
if (((ValueParameterDescriptor) lambda).isCrossinline()) {
//annotated
return false;
}
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorBase;
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
import org.jetbrains.kotlin.lexer.JetTokens;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.*;
@@ -83,6 +84,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
private final Visibility visibility;
private final NotNullLazyValue<ClassKind> kind;
private final NotNullLazyValue<Boolean> isInner;
private final NotNullLazyValue<Boolean> isData;
private final Annotations annotations;
private final Annotations danglingAnnotations;
@@ -153,15 +155,22 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
}
});
this.isData = storageManager.createLazyValue(new Function0<Boolean>() {
@Override
public Boolean invoke() {
return modifierList != null && modifierList.hasModifier(JetTokens.DATA_KEYWORD);
}
});
this.kind = storageManager.createLazyValue(new Function0<ClassKind>() {
@Override
public ClassKind invoke() {
return (syntaxKind == ClassKind.CLASS && KotlinBuiltIns.isAnnotation(descriptor)) ? ClassKind.ANNOTATION_CLASS : syntaxKind;
return (syntaxKind == ClassKind.CLASS && modifierList != null && modifierList.hasModifier(JetTokens.ANNOTATION_KEYWORD)) ? ClassKind.ANNOTATION_CLASS : syntaxKind;
}
});
if (modifierList != null) {
LazyAnnotations classAnnotations = new LazyAnnotations(
this.annotations = new LazyAnnotations(
new LazyAnnotationsContext(
c.getAnnotationResolver(),
storageManager,
@@ -175,9 +184,6 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
},
modifierList.getAnnotationEntries()
);
this.annotations = c.getAnnotationResolver().resolveAndAppendAnnotationsFromModifiers(
classAnnotations, modifierList
);
}
else {
this.annotations = Annotations.Companion.getEMPTY();
@@ -405,6 +411,11 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
return isInner.invoke();
}
@Override
public boolean isData() {
return isData.invoke();
}
@Override
public boolean isCompanionObject() {
return isCompanionObject;
@@ -17,7 +17,6 @@
package org.jetbrains.kotlin.resolve.lazy.descriptors
import com.google.common.collect.Lists
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DELEGATION
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE
@@ -136,7 +135,7 @@ public open class LazyClassMemberScope(
}
private fun generateDataClassMethods(result: MutableCollection<FunctionDescriptor>, name: Name, location: LookupLocation) {
if (!KotlinBuiltIns.isData(thisDescriptor)) return
if (!thisDescriptor.isData) return
val constructor = getPrimaryConstructor() ?: return
@@ -243,7 +242,7 @@ public open class LazyClassMemberScope(
}
private fun addDataClassMethods(result: MutableCollection<DeclarationDescriptor>, location: LookupLocation) {
if (!KotlinBuiltIns.isData(thisDescriptor)) return
if (!thisDescriptor.isData) return
if (getPrimaryConstructor() == null) return
@@ -32,7 +32,8 @@ import org.jetbrains.kotlin.resolve.ScriptBodyResolver
import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil
import org.jetbrains.kotlin.resolve.lazy.LazyEntity
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.resolve.scopes.*
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
import org.jetbrains.kotlin.resolve.scopes.LexicalScopeImpl
import org.jetbrains.kotlin.resolve.scopes.receivers.ScriptReceiver
import org.jetbrains.kotlin.resolve.source.toSourceElement
import org.jetbrains.kotlin.types.DeferredType
@@ -78,7 +79,10 @@ public class LazyScriptDescriptor(
scriptDefinition.getScriptParameters().mapIndexed { index, scriptParameter ->
ValueParameterDescriptorImpl(
result, null, index, Annotations.EMPTY, scriptParameter.getName(), scriptParameter.getType(),
false, null, SourceElement.NO_SOURCE
/* declaresDefaultValue = */ false,
/* isCrossinline = */ false,
/* isNoinline = */ false,
null, SourceElement.NO_SOURCE
)
},
DeferredType.create(resolveSession.storageManager, resolveSession.trace) {
@@ -118,7 +118,11 @@ public class ControlStructureTypingUtils {
JetType argumentType = isArgumentNullable.get(i) ? nullableType : type;
ValueParameterDescriptorImpl valueParameter = new ValueParameterDescriptorImpl(
function, null, i, Annotations.Companion.getEMPTY(), Name.identifier(argumentNames.get(i)),
argumentType, false, null, SourceElement.NO_SOURCE
argumentType,
/* declaresDefaultValue = */ false,
/* isCrossinline = */ false,
/* isNoinline = */ false,
null, SourceElement.NO_SOURCE
);
valueParameters.add(valueParameter);
}
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
import org.jetbrains.kotlin.diagnostics.Errors.*
import org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.getAnnotationEntries
import org.jetbrains.kotlin.resolve.*
@@ -38,7 +39,6 @@ import org.jetbrains.kotlin.types.TypeUtils
import org.jetbrains.kotlin.types.TypeUtils.CANT_INFER_FUNCTION_PARAM_TYPE
import org.jetbrains.kotlin.types.TypeUtils.NO_EXPECTED_TYPE
import org.jetbrains.kotlin.types.TypeUtils.noExpectedType
import org.jetbrains.kotlin.types.checker.JetTypeChecker
import org.jetbrains.kotlin.types.expressions.CoercionStrategy.COERCION_TO_UNIT
import org.jetbrains.kotlin.types.expressions.typeInfoFactory.createTypeInfo
import org.jetbrains.kotlin.utils.addIfNotNull
@@ -104,7 +104,7 @@ public class FunctionsTypingVisitor(facade: ExpressionTypingInternals) : Express
components.modifiersChecker.withTrace(context.trace).checkModifiersForLocalDeclaration(function, functionDescriptor)
components.identifierChecker.checkDeclaration(function, context.trace)
if (!function.hasBody()) {
if (!function.hasBody() && !function.hasModifier(JetTokens.EXTERNAL_KEYWORD)) {
context.trace.report(NON_MEMBER_FUNCTION_NO_BODY.on(function, functionDescriptor))
}
@@ -125,7 +125,8 @@ public class DescriptorSerializer {
ProtoBuf.Class.Builder builder = ProtoBuf.Class.newBuilder();
int flags = Flags.getClassFlags(hasAnnotations(classDescriptor), classDescriptor.getVisibility(), classDescriptor.getModality(),
classDescriptor.getKind(), classDescriptor.isInner(), classDescriptor.isCompanionObject());
classDescriptor.getKind(), classDescriptor.isInner(), classDescriptor.isCompanionObject(),
classDescriptor.isData());
if (flags != builder.getFlags()) {
builder.setFlags(flags);
}
@@ -211,6 +212,7 @@ public class DescriptorSerializer {
hasAnnotations,
descriptor.getVisibility(),
descriptor.getModality(),
false,
false
);
@@ -283,7 +285,8 @@ public class DescriptorSerializer {
int flags = Flags.getFunctionFlags(
hasAnnotations(descriptor), descriptor.getVisibility(), descriptor.getModality(), descriptor.getKind(),
descriptor.isOperator(), descriptor.isInfix()
descriptor.isOperator(), descriptor.isInfix(), descriptor.isInline(), descriptor.isTailrec(),
descriptor.isExternal()
);
if (flags != builder.getFlags()) {
builder.setFlags(flags);
@@ -355,7 +358,8 @@ public class DescriptorSerializer {
hasAnnotations(accessor),
accessor.getVisibility(),
accessor.getModality(),
!accessor.isDefault()
!accessor.isDefault(),
accessor.isExternal()
);
}
@@ -363,7 +367,8 @@ public class DescriptorSerializer {
private ProtoBuf.ValueParameter.Builder valueParameter(@NotNull ValueParameterDescriptor descriptor) {
ProtoBuf.ValueParameter.Builder builder = ProtoBuf.ValueParameter.newBuilder();
int flags = Flags.getValueParameterFlags(hasAnnotations(descriptor), descriptor.declaresDefaultValue());
int flags = Flags.getValueParameterFlags(hasAnnotations(descriptor), descriptor.declaresDefaultValue(),
descriptor.isCrossinline(), descriptor.isNoinline());
if (flags != builder.getFlags()) {
builder.setFlags(flags);
}
+6 -30
View File
@@ -289,7 +289,7 @@ public interface Comparable</*0*/ in T> {
public abstract operator fun compareTo(/*0*/ other: T): kotlin.Int
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY_GETTER}) @kotlin.annotation.MustBeDocumented() @kotlin.annotation.annotation() public final class Deprecated : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY_GETTER}) @kotlin.annotation.MustBeDocumented() public final annotation class Deprecated : kotlin.Annotation {
/*primary*/ public constructor Deprecated(/*0*/ message: kotlin.String, /*1*/ replaceWith: kotlin.ReplaceWith = ..., /*2*/ level: kotlin.DeprecationLevel = ...)
public final val level: kotlin.DeprecationLevel
public final fun <get-level>(): kotlin.DeprecationLevel
@@ -468,7 +468,7 @@ public abstract class Enum</*0*/ E : kotlin.Enum<E>> : kotlin.Comparable<E> {
}
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented() @kotlin.annotation.annotation() public final class Extension : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented() public final annotation class Extension : kotlin.Annotation {
/*primary*/ public constructor Extension()
}
@@ -621,7 +621,7 @@ public interface FloatingPointConstants</*0*/ T> {
public interface Function</*0*/ out R> {
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.CONSTRUCTOR}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.annotation.MustBeDocumented() @kotlin.Deprecated(message = "Use @Deprecated("...", level = DeprecationLevel.HIDDEN) instead", replaceWith = kotlin.ReplaceWith(expression = "@Deprecated(, level = DeprecationLevel.HIDDEN)", imports = {})) @kotlin.annotation.annotation() public final class HiddenDeclaration : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.CONSTRUCTOR}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.annotation.MustBeDocumented() @kotlin.Deprecated(message = "Use @Deprecated("...", level = DeprecationLevel.HIDDEN) instead", replaceWith = kotlin.ReplaceWith(expression = "@Deprecated(, level = DeprecationLevel.HIDDEN)", imports = {})) public final annotation class HiddenDeclaration : kotlin.Annotation {
/*primary*/ public constructor HiddenDeclaration()
}
@@ -1104,7 +1104,7 @@ public interface Range</*0*/ T : kotlin.Comparable<T>> {
public open fun isEmpty(): kotlin.Boolean
}
@kotlin.annotation.Target(allowedTargets = {}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.annotation.MustBeDocumented() @kotlin.annotation.annotation() public final class ReplaceWith : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.annotation.MustBeDocumented() public final annotation class ReplaceWith : kotlin.Annotation {
/*primary*/ public constructor ReplaceWith(/*0*/ expression: kotlin.String, /*1*/ vararg imports: kotlin.String /*kotlin.Array<out kotlin.String>*/)
public final val expression: kotlin.String
public final fun <get-expression>(): kotlin.String
@@ -1265,7 +1265,7 @@ public final class String : kotlin.Comparable<kotlin.String>, kotlin.CharSequenc
}
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPE, AnnotationTarget.EXPRESSION, AnnotationTarget.FILE}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) @kotlin.annotation.annotation() public final class Suppress : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.TYPE, AnnotationTarget.EXPRESSION, AnnotationTarget.FILE}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class Suppress : kotlin.Annotation {
/*primary*/ public constructor Suppress(/*0*/ vararg names: kotlin.String /*kotlin.Array<out kotlin.String>*/)
public final val names: kotlin.Array<out kotlin.String>
public final fun <get-names>(): kotlin.Array<out kotlin.String>
@@ -1284,30 +1284,6 @@ public object Unit {
/*primary*/ private constructor Unit()
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) @kotlin.annotation.MustBeDocumented() @kotlin.annotation.annotation() public final class UnsafeVariance : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) @kotlin.annotation.MustBeDocumented() public final annotation class UnsafeVariance : kotlin.Annotation {
/*primary*/ public constructor UnsafeVariance()
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.VALUE_PARAMETER}) @kotlin.annotation.Retention(value = AnnotationRetention.RUNTIME) @kotlin.annotation.MustBeDocumented() @kotlin.annotation.annotation() private final class crossinline : kotlin.Annotation {
/*primary*/ public constructor crossinline()
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) @kotlin.annotation.MustBeDocumented() @kotlin.annotation.annotation() private final class data : kotlin.Annotation {
/*primary*/ public constructor data()
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) @kotlin.annotation.MustBeDocumented() @kotlin.annotation.annotation() private final class external : kotlin.Annotation {
/*primary*/ public constructor external()
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) @kotlin.annotation.Retention(value = AnnotationRetention.RUNTIME) @kotlin.annotation.MustBeDocumented() @kotlin.annotation.annotation() private final class inline : kotlin.Annotation {
/*primary*/ public constructor inline()
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.VALUE_PARAMETER}) @kotlin.annotation.Retention(value = AnnotationRetention.RUNTIME) @kotlin.annotation.MustBeDocumented() @kotlin.annotation.annotation() private final class noinline : kotlin.Annotation {
/*primary*/ public constructor noinline()
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) @kotlin.annotation.annotation() private final class tailrec : kotlin.Annotation {
/*primary*/ public constructor tailrec()
}
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ x: kotlin.Int = ..., /*1*/ e: kotlin.Any = ...): kotlin.Unit
public tailrec fun test(/*0*/ x: kotlin.Int = ..., /*1*/ e: kotlin.Any = ...): kotlin.Unit
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun kotlin.Int.foo(/*0*/ x: kotlin.Int): kotlin.Unit
public tailrec fun kotlin.Int.foo(/*0*/ x: kotlin.Int): kotlin.Unit
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun noTails(): kotlin.Unit
public tailrec fun noTails(): kotlin.Unit
@@ -1,4 +1,4 @@
package
@kotlin.tailrec() public fun badTails(/*0*/ x: kotlin.Int): kotlin.Int
public tailrec fun badTails(/*0*/ x: kotlin.Int): kotlin.Int
public fun box(): kotlin.String
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public infix fun kotlin.Int.test(/*0*/ x: kotlin.Int): kotlin.Int
public infix tailrec fun kotlin.Int.test(/*0*/ x: kotlin.Int): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public infix fun kotlin.Int.foo(/*0*/ x: kotlin.Int): kotlin.Unit
public infix tailrec fun kotlin.Int.foo(/*0*/ x: kotlin.Int): kotlin.Unit
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ counter: kotlin.Int): kotlin.Int?
public tailrec fun test(/*0*/ counter: kotlin.Int): kotlin.Int?
@@ -13,8 +13,8 @@ public final class B {
public final inner class C {
public constructor C()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@kotlin.tailrec() public final fun h(/*0*/ counter: kotlin.Int): kotlin.Unit
@kotlin.tailrec() public final fun h2(/*0*/ x: kotlin.Any): kotlin.Unit
public final tailrec fun h(/*0*/ counter: kotlin.Int): kotlin.Unit
public final tailrec fun h2(/*0*/ x: kotlin.Any): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ x: kotlin.Int): kotlin.Int
public tailrec fun test(/*0*/ x: kotlin.Int): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ x: kotlin.Int): kotlin.Int
public tailrec fun test(/*0*/ x: kotlin.Int): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun </*0*/ T, /*1*/ A> kotlin.Iterator<T>.foldl(/*0*/ acc: A, /*1*/ foldFunction: (T, A) -> A): A
public tailrec fun </*0*/ T, /*1*/ A> kotlin.Iterator<T>.foldl(/*0*/ acc: A, /*1*/ foldFunction: (T, A) -> A): A
@@ -2,4 +2,4 @@ package
public fun box(): kotlin.String
public fun escapeChar(/*0*/ c: kotlin.Char): kotlin.String?
@kotlin.tailrec() public fun kotlin.String.escape(/*0*/ i: kotlin.Int = ..., /*1*/ result: java.lang.StringBuilder = ...): kotlin.String
public tailrec fun kotlin.String.escape(/*0*/ i: kotlin.Int = ..., /*1*/ result: java.lang.StringBuilder = ...): kotlin.String
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun kotlin.String.repeat(/*0*/ num: kotlin.Int, /*1*/ acc: java.lang.StringBuilder = ...): kotlin.String
public tailrec fun kotlin.String.repeat(/*0*/ num: kotlin.Int, /*1*/ acc: java.lang.StringBuilder = ...): kotlin.String
@@ -2,4 +2,4 @@ package
public fun bar(/*0*/ a: kotlin.Any): kotlin.Unit
public fun box(): kotlin.String
@kotlin.tailrec() public fun foo(): kotlin.Unit
public tailrec fun foo(): kotlin.Unit
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun foo(): kotlin.Unit
public tailrec fun foo(): kotlin.Unit
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ x: kotlin.Int): kotlin.Int
public tailrec fun test(/*0*/ x: kotlin.Int): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ counter: kotlin.Int): kotlin.Int
public tailrec fun test(/*0*/ counter: kotlin.Int): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ counter: kotlin.Int): kotlin.Int
public tailrec fun test(/*0*/ counter: kotlin.Int): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ counter: kotlin.Int): kotlin.Int
public tailrec fun test(/*0*/ counter: kotlin.Int): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun foo(/*0*/ x: kotlin.Int): kotlin.Unit
public tailrec fun foo(/*0*/ x: kotlin.Int): kotlin.Unit
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ counter: kotlin.Int): kotlin.Int
public tailrec fun test(/*0*/ counter: kotlin.Int): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ x: kotlin.Int): kotlin.Int
public tailrec fun test(/*0*/ x: kotlin.Int): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ x: kotlin.Int): kotlin.Int
public tailrec fun test(/*0*/ x: kotlin.Int): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ x: kotlin.Int): kotlin.Int
public tailrec fun test(/*0*/ x: kotlin.Int): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun sum(/*0*/ x: kotlin.Long, /*1*/ sum: kotlin.Long): kotlin.Long
public tailrec fun sum(/*0*/ x: kotlin.Long, /*1*/ sum: kotlin.Long): kotlin.Long
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun foo(/*0*/ x: kotlin.Int): kotlin.Unit
public tailrec fun foo(/*0*/ x: kotlin.Int): kotlin.Unit
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun foo(/*0*/ x: kotlin.Int): kotlin.Unit
public tailrec fun foo(/*0*/ x: kotlin.Int): kotlin.Unit
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ go: kotlin.Boolean): kotlin.Unit
public tailrec fun test(/*0*/ go: kotlin.Boolean): kotlin.Unit
@@ -5,9 +5,9 @@ public fun box(): kotlin.String
public final class A {
public constructor A()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@kotlin.tailrec() public final fun f1(/*0*/ c: kotlin.Int): kotlin.Unit
@kotlin.tailrec() public final fun f2(/*0*/ c: kotlin.Int): kotlin.Unit
@kotlin.tailrec() public final fun f3(/*0*/ a: A): kotlin.Unit
public final tailrec fun f1(/*0*/ c: kotlin.Int): kotlin.Unit
public final tailrec fun f2(/*0*/ c: kotlin.Int): kotlin.Unit
public final tailrec fun f3(/*0*/ a: A): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun test(/*0*/ x: kotlin.Int): kotlin.Unit
public tailrec fun test(/*0*/ x: kotlin.Int): kotlin.Unit
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun withWhen(/*0*/ counter: kotlin.Int): kotlin.Int
public tailrec fun withWhen(/*0*/ counter: kotlin.Int): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun withWhen(/*0*/ counter: kotlin.Int, /*1*/ d: kotlin.Any): kotlin.Int
public tailrec fun withWhen(/*0*/ counter: kotlin.Int, /*1*/ d: kotlin.Any): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun withWhen(/*0*/ counter: kotlin.Int, /*1*/ d: kotlin.Any): kotlin.Int
public tailrec fun withWhen(/*0*/ counter: kotlin.Int, /*1*/ d: kotlin.Any): kotlin.Int
@@ -1,4 +1,4 @@
package
public fun box(): kotlin.String
@kotlin.tailrec() public fun withWhen2(/*0*/ counter: kotlin.Int): kotlin.Int
public tailrec fun withWhen2(/*0*/ counter: kotlin.Int): kotlin.Int
@@ -1,6 +1,6 @@
package
@kotlin.Suppress(names = {"UNCHECKED_CAST"}) @kotlin.inline() public fun </*0*/ reified T> array(/*0*/ vararg t: T /*kotlin.Array<out T>*/): kotlin.Array<T>
@kotlin.Suppress(names = {"UNCHECKED_CAST"}) public inline fun </*0*/ reified T> array(/*0*/ vararg t: T /*kotlin.Array<out T>*/): kotlin.Array<T>
public fun box(): kotlin.String
public fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
@@ -1,6 +1,6 @@
package test
@kotlin.annotation.annotation() public final class AAA : kotlin.Annotation {
public final annotation class AAA : kotlin.Annotation {
public constructor AAA()
}
@@ -7,7 +7,7 @@ public object A {
public const final val OBJECT: kotlin.String
}
@kotlin.annotation.annotation() public final class Ann : kotlin.Annotation {
public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ kotlin.String)
public final val value: kotlin.String
}
@@ -1,36 +1,36 @@
package test
@kotlin.annotation.annotation() public final class AByte : kotlin.Annotation {
public final annotation class AByte : kotlin.Annotation {
public constructor AByte(/*0*/ kotlin.Byte)
public final val value: kotlin.Byte
}
@kotlin.annotation.annotation() public final class AChar : kotlin.Annotation {
public final annotation class AChar : kotlin.Annotation {
public constructor AChar(/*0*/ kotlin.Char)
public final val value: kotlin.Char
}
@kotlin.annotation.annotation() public final class ADouble : kotlin.Annotation {
public final annotation class ADouble : kotlin.Annotation {
public constructor ADouble(/*0*/ kotlin.Double)
public final val value: kotlin.Double
}
@kotlin.annotation.annotation() public final class AFloat : kotlin.Annotation {
public final annotation class AFloat : kotlin.Annotation {
public constructor AFloat(/*0*/ kotlin.Float)
public final val value: kotlin.Float
}
@kotlin.annotation.annotation() public final class AInt : kotlin.Annotation {
public final annotation class AInt : kotlin.Annotation {
public constructor AInt(/*0*/ kotlin.Int)
public final val value: kotlin.Int
}
@kotlin.annotation.annotation() public final class ALong : kotlin.Annotation {
public final annotation class ALong : kotlin.Annotation {
public constructor ALong(/*0*/ kotlin.Long)
public final val value: kotlin.Long
}
@kotlin.annotation.annotation() public final class AString : kotlin.Annotation {
public final annotation class AString : kotlin.Annotation {
public constructor AString(/*0*/ kotlin.String)
public final val value: kotlin.String
}
@@ -1,36 +1,36 @@
package test
@kotlin.annotation.annotation() public final class AByte : kotlin.Annotation {
public final annotation class AByte : kotlin.Annotation {
public constructor AByte(/*0*/ kotlin.Byte)
public final val value: kotlin.Byte
}
@kotlin.annotation.annotation() public final class AChar : kotlin.Annotation {
public final annotation class AChar : kotlin.Annotation {
public constructor AChar(/*0*/ kotlin.Char)
public final val value: kotlin.Char
}
@kotlin.annotation.annotation() public final class ADouble : kotlin.Annotation {
public final annotation class ADouble : kotlin.Annotation {
public constructor ADouble(/*0*/ kotlin.Double)
public final val value: kotlin.Double
}
@kotlin.annotation.annotation() public final class AFloat : kotlin.Annotation {
public final annotation class AFloat : kotlin.Annotation {
public constructor AFloat(/*0*/ kotlin.Float)
public final val value: kotlin.Float
}
@kotlin.annotation.annotation() public final class AInt : kotlin.Annotation {
public final annotation class AInt : kotlin.Annotation {
public constructor AInt(/*0*/ kotlin.Int)
public final val value: kotlin.Int
}
@kotlin.annotation.annotation() public final class ALong : kotlin.Annotation {
public final annotation class ALong : kotlin.Annotation {
public constructor ALong(/*0*/ kotlin.Long)
public final val value: kotlin.Long
}
@kotlin.annotation.annotation() public final class AString : kotlin.Annotation {
public final annotation class AString : kotlin.Annotation {
public constructor AString(/*0*/ kotlin.String)
public final val value: kotlin.String
}
@@ -12,7 +12,7 @@ public final class KotlinClass {
public open class kt3698 {
public constructor kt3698()
public/*package*/ final class Foo : kotlin.Annotation {
public/*package*/ final annotation class Foo : kotlin.Annotation {
public/*package*/ constructor Foo(/*0*/ kotlin.Int)
public final val value: kotlin.Int
}
@@ -1,9 +1,9 @@
package test
@test.meta() public/*package*/ final class MyAnn : kotlin.Annotation {
@test.meta() public/*package*/ final annotation class MyAnn : kotlin.Annotation {
public/*package*/ constructor MyAnn()
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.ANNOTATION_CLASS}) @kotlin.annotation.annotation() public final class meta : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.ANNOTATION_CLASS}) public final annotation class meta : kotlin.Annotation {
public constructor meta()
}
@@ -5,6 +5,6 @@ package test
@test.base() public/*package*/ open fun foo(/*0*/ @test.base() kotlin.Int): kotlin.Int
}
@kotlin.annotation.annotation() public final class base : kotlin.Annotation {
public final annotation class base : kotlin.Annotation {
public constructor base()
}
@@ -1,5 +1,5 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) @kotlin.annotation.annotation() public final class classifier : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) public final annotation class classifier : kotlin.Annotation {
public constructor classifier()
}
@@ -1,5 +1,5 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CONSTRUCTOR}) @kotlin.annotation.annotation() public final class constructor : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CONSTRUCTOR}) public final annotation class constructor : kotlin.Annotation {
public constructor constructor()
}
@@ -1,5 +1,5 @@
package test
@kotlin.annotation.Target(allowedTargets = {}) @kotlin.annotation.annotation() public final class empty : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {}) public final annotation class empty : kotlin.Annotation {
public constructor empty()
}
@@ -1,5 +1,5 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FIELD}) @kotlin.annotation.annotation() public final class field : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FIELD}) public final annotation class field : kotlin.Annotation {
public constructor field()
}
@@ -1,5 +1,5 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION}) @kotlin.annotation.annotation() public final class function : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION}) public final annotation class function : kotlin.Annotation {
public constructor function()
}
@@ -1,5 +1,5 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY_GETTER}) @kotlin.annotation.annotation() public final class getter : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY_GETTER}) public final annotation class getter : kotlin.Annotation {
public constructor getter()
}
@@ -1,5 +1,5 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.LOCAL_VARIABLE}) @kotlin.annotation.annotation() public final class local : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.LOCAL_VARIABLE}) public final annotation class local : kotlin.Annotation {
public constructor local()
}
@@ -1,5 +1,5 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION}) @kotlin.annotation.annotation() public final class multiple : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION}) public final annotation class multiple : kotlin.Annotation {
public constructor multiple()
}
@@ -1,5 +1,5 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.VALUE_PARAMETER}) @kotlin.annotation.annotation() public final class parameter : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.VALUE_PARAMETER}) public final annotation class parameter : kotlin.Annotation {
public constructor parameter()
}
@@ -1,5 +1,5 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY}) @kotlin.annotation.annotation() public final class property : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY}) public final annotation class property : kotlin.Annotation {
public constructor property()
}
@@ -1,5 +1,5 @@
package test
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY_SETTER}) @kotlin.annotation.annotation() public final class setter : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY_SETTER}) public final annotation class setter : kotlin.Annotation {
public constructor setter()
}
@@ -1,6 +1,6 @@
package test
@kotlin.annotation.annotation() public final class Anno : kotlin.Annotation {
public final annotation class Anno : kotlin.Annotation {
public constructor Anno(/*0*/ e: [ERROR : test.E])
public final val e: [ERROR : test.E]
}
+1 -1
View File
@@ -52,7 +52,7 @@ public final class B {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.data() public final class Data {
public final data class Data {
public constructor Data(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.Int)
public final val x: kotlin.Int
public final val y: kotlin.Int
+1 -1
View File
@@ -5,7 +5,7 @@ public val something: kotlin.Any?
public fun __(/*0*/ ___: kotlin.Int, /*1*/ y: _<kotlin.Int>?): kotlin.Int
public fun doIt(/*0*/ f: (kotlin.Any?) -> kotlin.Any?): kotlin.Any?
@kotlin.Deprecated(message = "") @kotlin.data() public final class Pair {
@kotlin.Deprecated(message = "") public final data class Pair {
public constructor Pair(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.Int)
public final val x: kotlin.Int
public final val y: kotlin.Int
@@ -8,7 +8,7 @@ public final class Annotated {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.annotation() public final class ann : kotlin.Annotation {
public final annotation class ann : kotlin.Annotation {
public constructor ann()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -2,7 +2,7 @@ package
public fun foo(): kotlin.Unit
@kotlin.annotation.annotation() public final class My : kotlin.Annotation {
public final annotation class My : kotlin.Annotation {
public constructor My()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -2,7 +2,7 @@ package
public fun foo(): kotlin.Int
@kotlin.annotation.annotation() public final class My : kotlin.Annotation {
public final annotation class My : kotlin.Annotation {
public constructor My()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -2,7 +2,7 @@ package
public fun foo(): kotlin.Unit
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.annotation() public final class My : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class My : kotlin.Annotation {
public constructor My()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -2,7 +2,7 @@ package
public fun foo(): @My(x = 42) kotlin.Int
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.annotation() public final class My : kotlin.Annotation {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class My : kotlin.Annotation {
public constructor My(/*0*/ x: kotlin.Int)
public final val x: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@@ -2,7 +2,7 @@ package
public fun foo(/*0*/ arg: kotlin.Int): kotlin.Int
@kotlin.annotation.annotation() public final class My : kotlin.Annotation {
public final annotation class My : kotlin.Annotation {
public constructor My()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int

Some files were not shown because too many files have changed in this diff Show More