Constructor for protected_static nested class should be protected

This commit is contained in:
Natalia.Ukhorskaya
2013-01-24 20:43:12 +04:00
parent 20c1181ad1
commit b0aa094cf8
5 changed files with 33 additions and 3 deletions
@@ -118,6 +118,14 @@ public final class DescriptorResolverUtils {
return null;
}
public static Visibility getConstructorVisibility(ClassDescriptor classDescriptor) {
Visibility containingClassVisibility = classDescriptor.getVisibility();
if (containingClassVisibility == JavaDescriptorResolver.PROTECTED_STATIC_VISIBILITY) {
return Visibilities.PROTECTED;
}
return containingClassVisibility;
}
public static void checkPsiClassIsNotJet(@Nullable PsiClass psiClass) {
if (psiClass instanceof JetJavaMirrorMarker) {
throw new IllegalStateException("trying to resolve fake jet PsiClass as regular PsiClass: " + psiClass.getQualifiedName());
@@ -85,6 +85,7 @@ public final class JavaConstructorResolver {
constructors.add(trace.get(BindingContext.CONSTRUCTOR, psiClass));
}
else {
Visibility constructorVisibility = DescriptorResolverUtils.getConstructorVisibility(containingClass);
// We need to create default constructors for classes and abstract classes.
// Example:
// class Kotlin() : Java() {}
@@ -94,8 +95,7 @@ public final class JavaConstructorResolver {
containingClass,
Collections.<AnnotationDescriptor>emptyList(),
true);
constructorDescriptor.initialize(typeParameters, Collections.<ValueParameterDescriptor>emptyList(), containingClass
.getVisibility(), isStatic);
constructorDescriptor.initialize(typeParameters, Collections.<ValueParameterDescriptor>emptyList(), constructorVisibility, isStatic);
constructors.add(constructorDescriptor);
trace.record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor);
}
@@ -137,7 +137,7 @@ public final class JavaConstructorResolver {
}
}
constructorDescriptor.initialize(typeParameters, valueParameters, containingClass.getVisibility(), isStatic);
constructorDescriptor.initialize(typeParameters, valueParameters, constructorVisibility, isStatic);
constructors.add(constructorDescriptor);
trace.record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor);
}