private static String getDescriptorString(@NotNull DeclarationDescriptor descriptor) {
   if (descriptor instanceof ClassDescriptor) {
     return DescriptorUtils.getFqName(descriptor).asString();
   } else if (descriptor instanceof ConstructorDescriptor) {
     DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration();
     assert containingDeclaration != null;
     return "constructor for " + containingDeclaration.getName();
   } else if (descriptor instanceof PropertyGetterDescriptor) {
     return "getter for "
         + ((PropertyGetterDescriptor) descriptor).getCorrespondingProperty().getName();
   } else if (descriptor instanceof PropertySetterDescriptor) {
     return "setter for "
         + ((PropertySetterDescriptor) descriptor).getCorrespondingProperty().getName();
   } else if (descriptor instanceof PropertyDescriptor) {
     if (((PropertyDescriptor) descriptor).isVar()) {
       return "var " + descriptor.getName();
     }
     return "val " + descriptor.getName();
   } else if (descriptor instanceof FunctionDescriptor) {
     return "fun "
         + descriptor.getName()
         + DescriptorRenderer.FQ_NAMES_IN_TYPES.renderFunctionParameters(
             (FunctionDescriptor) descriptor);
   }
   return DescriptorRenderer.FQ_NAMES_IN_TYPES.render(descriptor);
 }
Example #2
0
  private void checkRedeclarationsInPackages(@NotNull TopDownAnalysisContext c) {
    for (MutablePackageFragmentDescriptor packageFragment :
        Sets.newHashSet(c.getPackageFragments().values())) {
      PackageViewDescriptor packageView =
          packageFragment.getContainingDeclaration().getPackage(packageFragment.getFqName());
      JetScope packageViewScope = packageView.getMemberScope();
      Multimap<Name, DeclarationDescriptor> simpleNameDescriptors =
          packageFragment.getMemberScope().getDeclaredDescriptorsAccessibleBySimpleName();
      for (Name name : simpleNameDescriptors.keySet()) {
        // Keep only properties with no receiver
        Collection<DeclarationDescriptor> descriptors =
            Collections2.filter(
                simpleNameDescriptors.get(name),
                new Predicate<DeclarationDescriptor>() {
                  @Override
                  public boolean apply(@Nullable DeclarationDescriptor descriptor) {
                    if (descriptor instanceof PropertyDescriptor) {
                      PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
                      return propertyDescriptor.getReceiverParameter() == null;
                    }
                    return true;
                  }
                });
        ContainerUtil.addIfNotNull(descriptors, packageViewScope.getPackage(name));

        if (descriptors.size() > 1) {
          for (DeclarationDescriptor declarationDescriptor : descriptors) {
            for (PsiElement declaration : getDeclarationsByDescriptor(declarationDescriptor)) {
              assert declaration != null
                  : "Null declaration for descriptor: "
                      + declarationDescriptor
                      + " "
                      + (declarationDescriptor != null
                          ? DescriptorRenderer.FQ_NAMES_IN_TYPES.render(declarationDescriptor)
                          : "");
              trace.report(
                  REDECLARATION.on(declaration, declarationDescriptor.getName().asString()));
            }
          }
        }
      }
    }
  }