Drop some of explicit ClassKind.CLASS_OBJECT and OBJECT usages

This commit is contained in:
Pavel V. Talanov
2015-03-04 14:51:37 +03:00
parent fa590a5b83
commit 350864b22f
16 changed files with 43 additions and 38 deletions
@@ -344,11 +344,10 @@ public class AsmUtil {
}
// the following code is only for PRIVATE visibility of member
if (memberDescriptor instanceof ConstructorDescriptor) {
ClassKind kind = ((ClassDescriptor) containingDeclaration).getKind();
if (kind == ClassKind.OBJECT || kind == ClassKind.ENUM_ENTRY) {
if (isNonDefaultObject(containingDeclaration) || isEnumEntry(containingDeclaration)) {
return NO_FLAG_PACKAGE_PRIVATE;
}
if (kind == ClassKind.ENUM_CLASS) {
if (isEnumClass(containingDeclaration)) {
//TODO: should be ACC_PRIVATE
// see http://youtrack.jetbrains.com/issue/KT-2680
return ACC_PROTECTED;
@@ -88,6 +88,8 @@ import static org.jetbrains.kotlin.psi.PsiPackage.JetPsiFactory;
import static org.jetbrains.kotlin.resolve.BindingContext.*;
import static org.jetbrains.kotlin.resolve.BindingContextUtils.getNotNull;
import static org.jetbrains.kotlin.resolve.BindingContextUtils.isVarCapturedInClosure;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isEnumEntry;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isObject;
import static org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilPackage.getResolvedCall;
import static org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilPackage.getResolvedCallWithAssert;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
@@ -1913,10 +1915,10 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
if (descriptor instanceof ClassDescriptor) {
ClassDescriptor classDescriptor = (ClassDescriptor) descriptor;
if (classDescriptor.getKind() == ClassKind.OBJECT || classDescriptor.getKind() == ClassKind.CLASS_OBJECT) {
if (isObject(classDescriptor)) {
return StackValue.singleton(classDescriptor, typeMapper);
}
if (classDescriptor.getKind() == ClassKind.ENUM_ENTRY) {
if (isEnumEntry(classDescriptor)) {
DeclarationDescriptor enumClass = classDescriptor.getContainingDeclaration();
assert DescriptorUtils.isEnumClass(enumClass) : "Enum entry should be declared in enum class: " + descriptor;
Type type = typeMapper.mapType((ClassDescriptor) enumClass);
@@ -20,21 +20,21 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicObjects;
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.descriptors.ClassKind;
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.org.objectweb.asm.Type;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isNonDefaultObject;
public class FieldInfo {
@NotNull
public static FieldInfo createForSingleton(@NotNull ClassDescriptor classDescriptor, @NotNull JetTypeMapper typeMapper) {
ClassKind kind = classDescriptor.getKind();
if (!kind.isSingleton()) {
if (!classDescriptor.getKind().isSingleton()) {
throw new UnsupportedOperationException("Can't create singleton field for class: " + classDescriptor);
}
if (kind == ClassKind.OBJECT || IntrinsicObjects.INSTANCE$.hasMappingToObject(classDescriptor)) {
if (isNonDefaultObject(classDescriptor) || IntrinsicObjects.INSTANCE$.hasMappingToObject(classDescriptor)) {
Type type = typeMapper.mapType(classDescriptor);
return new FieldInfo(type, type, JvmAbi.INSTANCE_FIELD, true);
}
@@ -140,7 +140,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
isEnum = true;
}
if (descriptor.getKind() == ClassKind.OBJECT || descriptor.getKind() == ClassKind.CLASS_OBJECT) {
if (isObject(descriptor)) {
isFinal = true;
}
@@ -101,10 +101,13 @@ public class PlatformStaticAnnotationChecker : AnnotationChecker {
descriptor: DeclarationDescriptor,
diagnosticHolder: DiagnosticSink
) {
val insideObject = containerKindIs(descriptor, ClassKind.OBJECT)
val insideDefaultObject = containerKindIs(descriptor, ClassKind.CLASS_OBJECT)
val container = descriptor.getContainingDeclaration()
val insideObject = container != null && DescriptorUtils.isNonDefaultObject(container)
val insideDefaultObjectInClass =
container != null && DescriptorUtils.isDefaultObject(container) && DescriptorUtils.isClass(container.getContainingDeclaration())
container != null && DescriptorUtils.isDefaultObject(container) && DescriptorUtils.isClass(container.getContainingDeclaration())
if (!insideObject && !(insideDefaultObject && containerKindIs(descriptor.getContainingDeclaration()!!, ClassKind.CLASS))) {
if (!insideObject && !insideDefaultObjectInClass) {
diagnosticHolder.report(ErrorsJvm.PLATFORM_STATIC_NOT_IN_OBJECT.on(declaration));
}
@@ -112,11 +115,6 @@ public class PlatformStaticAnnotationChecker : AnnotationChecker {
diagnosticHolder.report(ErrorsJvm.OVERRIDE_CANNOT_BE_STATIC.on(declaration));
}
}
private fun containerKindIs(descriptor: DeclarationDescriptor, kind: ClassKind): Boolean {
val parentDeclaration = descriptor.getContainingDeclaration()
return parentDeclaration != null && DescriptorUtils.isKindOf(parentDeclaration, kind)
}
}
public class ReifiedTypeParameterAnnotationChecker : AnnotationChecker {
@@ -36,17 +36,17 @@ public fun DeclarationDescriptor.hasIntrinsicAnnotation(): Boolean {
}
public fun CallableDescriptor.isPlatformStaticInObjectOrClass(): Boolean =
isPlatformStaticIn(ClassKind.OBJECT, ClassKind.CLASS)
isPlatformStaticIn { DescriptorUtils.isNonDefaultObject(it) || DescriptorUtils.isClass(it) }
public fun CallableDescriptor.isPlatformStaticInDefaultObject(): Boolean =
isPlatformStaticIn(ClassKind.CLASS_OBJECT)
isPlatformStaticIn { DescriptorUtils.isDefaultObject(it) }
private fun CallableDescriptor.isPlatformStaticIn(vararg kinds: ClassKind): Boolean =
private fun CallableDescriptor.isPlatformStaticIn(predicate: (DeclarationDescriptor) -> Boolean): Boolean =
when (this) {
is PropertyAccessorDescriptor -> {
val propertyDescriptor = getCorrespondingProperty()
kinds.any { DescriptorUtils.isKindOf(propertyDescriptor.getContainingDeclaration(), it) } &&
predicate(propertyDescriptor.getContainingDeclaration()!!) &&
(hasPlatformStaticAnnotation() || propertyDescriptor.hasPlatformStaticAnnotation())
}
else -> kinds.any { DescriptorUtils.isKindOf(getContainingDeclaration(), it) } && hasPlatformStaticAnnotation()
else -> predicate(getContainingDeclaration()) && hasPlatformStaticAnnotation()
}
@@ -60,7 +60,7 @@ public class DeclarationResolver {
public fun checkRedeclarationsInInnerClassNames(c: TopDownAnalysisContext) {
for (classDescriptor in c.getDeclaredClasses().values()) {
if (classDescriptor.getKind() == ClassKind.CLASS_OBJECT) {
if (DescriptorUtils.isDefaultObject(classDescriptor)) {
// Default objects should be considered during analysing redeclarations in classes
continue
}
@@ -39,6 +39,8 @@ import java.util.*;
import static org.jetbrains.kotlin.diagnostics.Errors.*;
import static org.jetbrains.kotlin.lexer.JetTokens.*;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isDefaultObject;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isEnumEntry;
public class ModifiersChecker {
private static final Collection<JetModifierKeywordToken> MODALITY_MODIFIERS =
@@ -363,11 +365,10 @@ public class ModifiersChecker {
@NotNull
public static Visibility getDefaultClassVisibility(@NotNull ClassDescriptor descriptor) {
ClassKind kind = descriptor.getKind();
if (kind == ClassKind.ENUM_ENTRY) {
if (isEnumEntry(descriptor)) {
return Visibilities.PUBLIC;
}
if (kind == ClassKind.CLASS_OBJECT) {
if (isDefaultObject(descriptor)) {
return ((ClassDescriptor) descriptor.getContainingDeclaration()).getVisibility();
}
return Visibilities.INTERNAL;
@@ -45,6 +45,8 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isNonDefaultObject;
public abstract class AbstractAnnotationDescriptorResolveTest extends JetLiteFixture {
private static final DescriptorRenderer WITH_ANNOTATION_ARGUMENT_TYPES = new DescriptorRendererBuilder()
.setVerbose(true)
@@ -228,7 +230,7 @@ public abstract class AbstractAnnotationDescriptorResolveTest extends JetLiteFix
@NotNull
private ClassDescriptor getLocalObjectDescriptor(@NotNull String name) {
ClassDescriptor localClassDescriptor = getLocalClassDescriptor(name);
if (localClassDescriptor.getKind() == ClassKind.OBJECT) {
if (isNonDefaultObject(localClassDescriptor)) {
return localClassDescriptor;
}