@Nullable
  private DeclarationDescriptor findCurrentDescriptorForMember(
      @NotNull MemberDescriptor originalDescriptor) {
    if (!isFromBuiltinModule(originalDescriptor)) return null;

    DeclarationDescriptor containingDeclaration =
        findCurrentDescriptor(originalDescriptor.getContainingDeclaration());
    JetScope memberScope = getMemberScope(containingDeclaration);
    if (memberScope == null) return null;

    String renderedOriginal = DescriptorRenderer.FQ_NAMES_IN_TYPES.render(originalDescriptor);
    Collection<? extends DeclarationDescriptor> descriptors;
    if (originalDescriptor instanceof ConstructorDescriptor
        && containingDeclaration instanceof ClassDescriptor) {
      descriptors = ((ClassDescriptor) containingDeclaration).getConstructors();
    } else {
      descriptors = memberScope.getAllDescriptors();
    }
    for (DeclarationDescriptor member : descriptors) {
      if (renderedOriginal.equals(DescriptorRenderer.FQ_NAMES_IN_TYPES.render(member))) {
        return member;
      }
    }
    return null;
  }
Exemplo n.º 2
0
 @Nullable
 private static Integer specialCaseVisibility(@NotNull MemberDescriptor memberDescriptor) {
   DeclarationDescriptor containingDeclaration = memberDescriptor.getContainingDeclaration();
   if (isInterface(containingDeclaration)) {
     return ACC_PUBLIC;
   }
   Visibility memberVisibility = memberDescriptor.getVisibility();
   if (memberVisibility == Visibilities.LOCAL
       && memberDescriptor instanceof CallableMemberDescriptor) {
     return ACC_PUBLIC;
   }
   if (memberVisibility != Visibilities.PRIVATE) {
     return null;
   }
   // the following code is only for PRIVATE visibility of member
   if (isClassObject(containingDeclaration)) {
     return NO_FLAG_PACKAGE_PRIVATE;
   }
   if (memberDescriptor instanceof ConstructorDescriptor) {
     ClassKind kind = ((ClassDescriptor) containingDeclaration).getKind();
     if (kind == ClassKind.OBJECT) {
       // TODO: should be NO_FLAG_PACKAGE_PRIVATE
       // see http://youtrack.jetbrains.com/issue/KT-2700
       return ACC_PUBLIC;
     } else if (kind == ClassKind.ENUM_ENTRY) {
       return NO_FLAG_PACKAGE_PRIVATE;
     } else if (kind == ClassKind.ENUM_CLASS) {
       // TODO: should be ACC_PRIVATE
       // see http://youtrack.jetbrains.com/issue/KT-2680
       return ACC_PROTECTED;
     }
   }
   if (containingDeclaration instanceof NamespaceDescriptor) {
     return ACC_PUBLIC;
   }
   return null;
 }