Support LOCAL visibility for lazy classes

This commit is contained in:
Andrey Breslav
2015-01-23 17:10:33 +03:00
parent 0fe191b028
commit b4b0b84228
@@ -107,8 +107,9 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
); );
this.c = c; this.c = c;
if (classLikeInfo.getCorrespondingClassOrObject() != null) { JetClassOrObject classOrObject = classLikeInfo.getCorrespondingClassOrObject();
this.c.getTrace().record(BindingContext.CLASS, classLikeInfo.getCorrespondingClassOrObject(), this); if (classOrObject != null) {
this.c.getTrace().record(BindingContext.CLASS, classOrObject, this);
} }
this.c.getTrace().record(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, DescriptorUtils.getFqName(this), this); this.c.getTrace().record(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, DescriptorUtils.getFqName(this), this);
@@ -129,9 +130,11 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
Modality defaultModality = kind == ClassKind.TRAIT ? Modality.ABSTRACT : Modality.FINAL; Modality defaultModality = kind == ClassKind.TRAIT ? Modality.ABSTRACT : Modality.FINAL;
this.modality = resolveModalityFromModifiers(modifierList, defaultModality); this.modality = resolveModalityFromModifiers(modifierList, defaultModality);
} }
boolean isLocal = classOrObject != null && JetPsiUtil.isLocal(classOrObject);
this.visibility = isSyntheticClassObject(this) this.visibility = isSyntheticClassObject(this)
? DescriptorUtils.getSyntheticClassObjectVisibility() ? DescriptorUtils.getSyntheticClassObjectVisibility()
: resolveVisibilityFromModifiers(modifierList, getDefaultClassVisibility(this)); : isLocal ? Visibilities.LOCAL : resolveVisibilityFromModifiers(modifierList, getDefaultClassVisibility(this));
this.isInner = isInnerClass(modifierList) && !ModifiersChecker.isIllegalInner(this); this.isInner = isInnerClass(modifierList) && !ModifiersChecker.isIllegalInner(this);
StorageManager storageManager = c.getStorageManager(); StorageManager storageManager = c.getStorageManager();
@@ -408,7 +411,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
} }
private boolean isClassObjectAllowed() { private boolean isClassObjectAllowed() {
return !(getKind().isSingleton() || isInner()); return !(getKind().isSingleton() || isInner() || DescriptorUtils.isLocal(this));
} }
@NotNull @NotNull