Java 类com.intellij.psi.util.InheritanceUtil 实例源码

项目:intellij-ce-playground    文件:MethodSuperSearcher.java   
private static boolean addSuperMethods(final HierarchicalMethodSignature signature,
                                       final PsiMethod method,
                                       final PsiClass parentClass,
                                       final boolean allowStaticMethod,
                                       final boolean checkBases,
                                       final Processor<MethodSignatureBackedByPsiMethod> consumer) {
  PsiMethod signatureMethod = signature.getMethod();
  PsiClass hisClass = signatureMethod.getContainingClass();
  if (parentClass == null || InheritanceUtil.isInheritorOrSelf(parentClass, hisClass, true)) {
    if (isAcceptable(signatureMethod, method, allowStaticMethod)) {
      if (parentClass != null && !parentClass.equals(hisClass) && !checkBases) {
        return true;
      }
      LOG.assertTrue(signatureMethod != method, method); // method != method.getsuper()
      return consumer.process(signature); //no need to check super classes
    }
  }
  for (HierarchicalMethodSignature superSignature : signature.getSuperSignatures()) {
    if (MethodSignatureUtil.isSubsignature(superSignature, signature)) {
      addSuperMethods(superSignature, method, parentClass, allowStaticMethod, checkBases, consumer);
    }
  }

  return true;
}
项目:intellij-ce-playground    文件:GroovyConditionalCanBeElvisInspection.java   
private static boolean checkForListIsEmpty(GrExpression condition, GrExpression elseBranch) {
  if (condition instanceof GrMethodCall) condition = ((GrMethodCall)condition).getInvokedExpression();
  if (!(condition instanceof GrReferenceExpression)) return false;

  final GrExpression qualifier = ((GrReferenceExpression)condition).getQualifier();
  if (qualifier == null) return false;

  if (!PsiEquivalenceUtil.areElementsEquivalent(qualifier, elseBranch)) return false;

  final PsiType type = qualifier.getType();
  if (type == null) return false;
  if (!InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_UTIL_LIST)) return false;

  final PsiElement resolved = ((GrReferenceExpression)condition).resolve();

  return resolved instanceof PsiMethod &&
         "isEmpty".equals(((PsiMethod)resolved).getName()) &&
         ((PsiMethod)resolved).getParameterList().getParametersCount() == 0;
}
项目:intellij-ce-playground    文件:PsiMemberParameterizedLocation.java   
public static Location getParameterizedLocation(PsiClass psiClass,
                                                String paramSetName,
                                                String parameterizedClassName) {
  final PsiAnnotation annotation = AnnotationUtil.findAnnotationInHierarchy(psiClass, Collections.singleton(JUnitUtil.RUN_WITH));
  if (annotation != null) {
    final PsiAnnotationMemberValue attributeValue = annotation.findAttributeValue("value");
    if (attributeValue instanceof PsiClassObjectAccessExpression) {
      final PsiTypeElement operand = ((PsiClassObjectAccessExpression)attributeValue).getOperand();
      if (InheritanceUtil.isInheritor(operand.getType(), parameterizedClassName)) {
        return new PsiMemberParameterizedLocation(psiClass.getProject(), 
                                                  psiClass,
                                                  null,
                                                  paramSetName);
      }
    }
  }
  return null;
}
项目:intellij-ce-playground    文件:ReplaceImplementsWithStaticImportAction.java   
private static boolean encodeQualifier(PsiClass containingClass, PsiReference reference, PsiClass targetClass) {
  if (reference instanceof PsiReferenceExpression) {
    final PsiElement qualifier = ((PsiReferenceExpression)reference).getQualifier();
    if (qualifier != null) {
      if (qualifier instanceof PsiReferenceExpression) {
        final PsiElement resolved = ((PsiReferenceExpression)qualifier).resolve();
        if (resolved == containingClass || resolved instanceof PsiClass && InheritanceUtil.isInheritorOrSelf(targetClass, (PsiClass)resolved, true)) {
          return true;
        }
      }
      qualifier.putCopyableUserData(ChangeContextUtil.CAN_REMOVE_QUALIFIER_KEY,
                                    ChangeContextUtil.canRemoveQualifier((PsiReferenceExpression)reference));
    }
  }
  return false;
}
项目:intellij-ce-playground    文件:GroovyConstructorNamedArgumentProvider.java   
private static boolean isClassHasConstructorWithMap(PsiClass aClass) {
  PsiMethod[] constructors = aClass.getConstructors();

  if (constructors.length == 0) return true;

  for (PsiMethod constructor : constructors) {
    PsiParameterList parameterList = constructor.getParameterList();

    PsiParameter[] parameters = parameterList.getParameters();

    if (parameters.length == 0) return true;

    final PsiParameter first = parameters[0];
    if (InheritanceUtil.isInheritor(first.getType(), CommonClassNames.JAVA_UTIL_MAP)) return true;
    if (first instanceof GrParameter && ((GrParameter)first).getTypeGroovy() == null) return true;

    //if constructor has only optional parameters it can be used as default constructor with map args
    if (!PsiUtil.isConstructorHasRequiredParameters(constructor)) return true;
  }
  return false;
}
项目:intellij-ce-playground    文件:StringConcatenationInMessageFormatCallInspection.java   
private static boolean isMessageFormatCall(PsiMethodCallExpression expression) {
  final PsiReferenceExpression methodExpression = expression.getMethodExpression();
  @NonNls final String referenceName = methodExpression.getReferenceName();
  if (!"format".equals(referenceName)) {
    return false;
  }
  final PsiExpression qualifierExpression = methodExpression.getQualifierExpression();
  if (!(qualifierExpression instanceof PsiReferenceExpression)) {
    return false;
  }
  final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)qualifierExpression;
  final PsiElement target = referenceExpression.resolve();
  if (!(target instanceof PsiClass)) {
    return false;
  }
  final PsiClass aClass = (PsiClass)target;
  return InheritanceUtil.isInheritor(aClass, "java.text.MessageFormat");
}
项目:intellij-ce-playground    文件:ReferenceExpressionCompletionContributor.java   
private static boolean isUselessObjectMethod(PsiMethod method, PsiMethod parentMethod, PsiType qualifierType) {
  if (!OBJECT_METHOD_PATTERN.accepts(method)) {
    return false;
  }

  if (OBJECT_METHOD_PATTERN.accepts(parentMethod) && method.getName().equals(parentMethod.getName())) {
    return false;
  }

  if ("toString".equals(method.getName())) {
    if (qualifierType.equalsToText(CommonClassNames.JAVA_LANG_STRING_BUFFER) ||
        InheritanceUtil.isInheritor(qualifierType, CommonClassNames.JAVA_LANG_ABSTRACT_STRING_BUILDER)) {
      return false;
    }
  }

  return true;
}
项目:intellij-ce-playground    文件:TryWithResourcesPostfixTemplate.java   
@Override
public boolean isApplicable(@NotNull PsiElement element, @NotNull Document copyDocument, int newOffset) {
  if (!PsiUtil.isLanguageLevel7OrHigher(element)) return false;

  PsiExpression initializer = JavaPostfixTemplatesUtils.getTopmostExpression(element);

  if (initializer == null) return false;

  final PsiType type = initializer.getType();
  if (!(type instanceof PsiClassType)) return false;
  final PsiClass aClass = ((PsiClassType)type).resolve();
  Project project = element.getProject();
  final JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
  final PsiClass autoCloseable = facade.findClass(CommonClassNames.JAVA_LANG_AUTO_CLOSEABLE, ProjectScope.getLibrariesScope(project));
  if (!InheritanceUtil.isInheritorOrSelf(aClass, autoCloseable, true)) return false;

  return true;
}
项目:intellij-ce-playground    文件:SurroundAutoCloseableAction.java   
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
  if (!element.getLanguage().isKindOf(JavaLanguage.INSTANCE)) return false;
  if (!PsiUtil.getLanguageLevel(element).isAtLeast(LanguageLevel.JDK_1_7)) return false;

  final PsiLocalVariable variable = PsiTreeUtil.getParentOfType(element, PsiLocalVariable.class);
  if (variable == null) return false;
  final PsiExpression initializer = variable.getInitializer();
  if (initializer == null) return false;
  final PsiElement declaration = variable.getParent();
  if (!(declaration instanceof PsiDeclarationStatement)) return false;
  final PsiElement codeBlock = declaration.getParent();
  if (!(codeBlock instanceof PsiCodeBlock)) return false;

  return InheritanceUtil.isInheritor(variable.getType(), CommonClassNames.JAVA_LANG_AUTO_CLOSEABLE);
}
项目:intellij-ce-playground    文件:PsiMethodCallFilter.java   
@Override
public boolean isAcceptable(Object element, PsiElement context) {
  if (element instanceof PsiMethodCallExpression) {
    final PsiMethodCallExpression callExpression = (PsiMethodCallExpression)element;
    final PsiMethod psiMethod = callExpression.resolveMethod();
    if (psiMethod != null) {
      if (!myMethodNames.contains(psiMethod.getName())) {
        return false;
      }
      final PsiClass psiClass = psiMethod.getContainingClass();
      final PsiClass expectedClass = JavaPsiFacade.getInstance(psiClass.getProject()).findClass(myClassName, psiClass.getResolveScope());
      return InheritanceUtil.isInheritorOrSelf(psiClass, expectedClass, true);
    }
  }
  return false;
}
项目:intellij-ce-playground    文件:JDBCResourceInspection.java   
protected boolean isResourceCreation(PsiExpression expression) {
  if (!(expression instanceof PsiMethodCallExpression)) {
    return false;
  }
  final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)expression;
  final PsiReferenceExpression methodExpression = methodCallExpression.getMethodExpression();
  final String name = methodExpression.getReferenceName();
  if (name == null || !creationMethodNameSet.contains(name)) {
    return false;
  }
  final PsiMethod method = methodCallExpression.resolveMethod();
  if (method == null) {
    return false;
  }
  for (int i = 0; i < creationMethodName.length; i++) {
    if (!name.equals(creationMethodName[i])) {
      continue;
    }
    final PsiClass containingClass = method.getContainingClass();
    final String expectedClassName = creationMethodClassName[i];
    if (InheritanceUtil.isInheritor(containingClass, false, expectedClassName)) {
      return true;
    }
  }
  return false;
}
项目:intellij-ce-playground    文件:TurnRefsToSuperProcessor.java   
protected boolean isInSuper(PsiElement member) {
  if (!(member instanceof PsiMember)) return false;
  final PsiManager manager = member.getManager();
  if (InheritanceUtil.isInheritorOrSelf(mySuper, ((PsiMember)member).getContainingClass(), true)) return true;

  if (member instanceof PsiField) {
    final PsiClass containingClass = ((PsiField) member).getContainingClass();
    LanguageLevel languageLevel = PsiUtil.getLanguageLevel(member);
    if (manager.areElementsEquivalent(containingClass, JavaPsiFacade.getInstance(manager.getProject()).getElementFactory().getArrayClass(languageLevel))) {
      return true;
    }
  } else if (member instanceof PsiMethod) {
    return mySuper.findMethodBySignature((PsiMethod) member, true) != null;
  }

  return false;
}
项目:intellij-ce-playground    文件:TypeUtils.java   
public static boolean variableHasTypeOrSubtype(@Nullable PsiVariable variable, @NonNls @NotNull String... typeNames) {
  if (variable == null) {
    return false;
  }
  final PsiType type = variable.getType();
  if (!(type instanceof PsiClassType)) {
    return false;
  }
  final PsiClassType classType = (PsiClassType)type;
  final PsiClass aClass = classType.resolve();
  if (aClass == null) {
    return false;
  }
  for (String typeName : typeNames) {
    if (InheritanceUtil.isInheritor(aClass, typeName)) {
      return true;
    }
  }
  return false;
}
项目:intellij-ce-playground    文件:ThreadLocalNotStaticFinalInspection.java   
@Override
public void visitField(PsiField field) {
  super.visitField(field);
  final PsiType type = field.getType();
  if (!(type instanceof PsiClassType)) {
    return;
  }
  final PsiClassType classType = (PsiClassType)type;
  final PsiClass aClass = classType.resolve();
  if (aClass == null) {
    return;
  }
  if (!InheritanceUtil.isInheritor(aClass, "java.lang.ThreadLocal")) {
    return;
  }
  final PsiModifierList modifierList = field.getModifierList();
  if (modifierList == null) {
    return;
  }
  if (modifierList.hasModifierProperty(PsiModifier.STATIC) &&
      modifierList.hasModifierProperty(PsiModifier.FINAL)) {
    return;
  }
  registerFieldError(field, field);
}
项目:intellij-ce-playground    文件:MisspelledSetUpInspectionBase.java   
@Override
public void visitMethod(@NotNull PsiMethod method) {
  //note: no call to super
  final PsiClass aClass = method.getContainingClass();
  @NonNls final String methodName = method.getName();
  if (!"setup".equals(methodName)) {
    return;
  }
  if (aClass == null) {
    return;
  }
  if (!InheritanceUtil.isInheritor(aClass,
                                   "junit.framework.TestCase")) {
    return;
  }
  registerMethodError(method);
}
项目:intellij-ce-playground    文件:ErrorRethrownInspection.java   
private static boolean hasJavaLangErrorType(PsiType type) {
  if (type instanceof PsiDisjunctionType) {
    final PsiDisjunctionType disjunctionType = (PsiDisjunctionType)type;
    for (PsiType disjunction : disjunctionType.getDisjunctions()) {
      if (hasJavaLangErrorType(disjunction)) {
        return true;
      }
    }
  }
  else if (type instanceof PsiClassType) {
    final PsiClassType classType = (PsiClassType)type;
    final PsiClass aClass = classType.resolve();
    if (InheritanceUtil.isInheritor(aClass, CommonClassNames.JAVA_LANG_ERROR) &&
        !InheritanceUtil.isInheritor(aClass, "java.lang.ThreadDeath")) {
      return true;
    }
  }
  return false;
}
项目:intellij-ce-playground    文件:MissingOverrideAnnotationInspection.java   
private boolean isJdk6Override(PsiMethod method, PsiClass methodClass) {
  final PsiMethod[] superMethods = method.findSuperMethods();
  boolean hasSupers = false;
  for (PsiMethod superMethod : superMethods) {
    final PsiClass superClass = superMethod.getContainingClass();
    if (!InheritanceUtil.isInheritorOrSelf(methodClass, superClass, true)) {
      continue;
    }
    hasSupers = true;
    if (!superMethod.hasModifierProperty(PsiModifier.PROTECTED)) {
      return true;
    }
  }
  // is override except if this is an interface method
  // overriding a protected method in java.lang.Object
  // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6501053
  return hasSupers && !methodClass.isInterface();
}
项目:intellij-ce-playground    文件:MissingOverrideAnnotationInspection.java   
private boolean isJdk5Override(PsiMethod method, PsiClass methodClass) {
  final PsiMethod[] superMethods = method.findSuperMethods();
  for (PsiMethod superMethod : superMethods) {
    final PsiClass superClass = superMethod.getContainingClass();
    if (superClass == null || !InheritanceUtil.isInheritorOrSelf(methodClass, superClass, true)) {
      continue;
    }
    if (superClass.isInterface()) {
      continue;
    }
    if (methodClass.isInterface() &&
        superMethod.hasModifierProperty(PsiModifier.PROTECTED)) {
      // only true for J2SE java.lang.Object.clone(), but might
      // be different on other/newer java platforms
      continue;
    }
    return true;
  }
  return false;
}
项目:intellij-ce-playground    文件:JavaFxColorReferenceProvider.java   
@NotNull
@Override
public PsiReference[] getReferencesByElement(@NotNull PsiElement element,
                                             @NotNull ProcessingContext context) {
  final XmlAttributeValue attributeValue = (XmlAttributeValue)element;
  final PsiElement parent = attributeValue.getParent();
  if (parent instanceof XmlAttribute) {
    final XmlAttributeDescriptor descriptor = ((XmlAttribute)parent).getDescriptor();
    if (descriptor instanceof JavaFxPropertyAttributeDescriptor) {
      final PsiElement declaration = descriptor.getDeclaration();
      if (declaration instanceof PsiField) {
        final PsiField field = (PsiField)declaration;
        final PsiClassType propertyClassType = JavaFxPsiUtil.getPropertyClassType(field);
        if (propertyClassType != null && InheritanceUtil.isInheritor(propertyClassType, JavaFxCommonClassNames.JAVAFX_SCENE_PAINT)) {
          return new PsiReference[] {new JavaFxColorReference(attributeValue)};
        }
      }
    }
  }
  return PsiReference.EMPTY_ARRAY;
}
项目:intellij-ce-playground    文件:ForCanBeForeachInspectionBase.java   
private boolean isListNonGetMethodCall(
  PsiReferenceExpression reference) {
  final PsiElement parent = reference.getParent();
  if (!(parent instanceof PsiMethodCallExpression)) {
    return false;
  }
  final PsiMethodCallExpression methodCallExpression =
    (PsiMethodCallExpression)parent;
  final PsiMethod method =
    methodCallExpression.resolveMethod();
  if (method == null) {
    return false;
  }
  final PsiClass parentClass = PsiTreeUtil.getParentOfType(
    methodCallExpression, PsiClass.class);
  final PsiClass containingClass = method.getContainingClass();
  if (!InheritanceUtil.isInheritorOrSelf(parentClass,
                                         containingClass, true)) {
    return false;
  }
  return !isListGetExpression(methodCallExpression);
}
项目:intellij-ce-playground    文件:StaticSuiteInspection.java   
@Override
public void visitMethod(@NotNull PsiMethod method) {
  //note: no call to super
  @NonNls final String methodName = method.getName();
  if (!"suite".equals(methodName)) {
    return;
  }
  final PsiClass aClass = method.getContainingClass();
  if (aClass == null) {
    return;
  }
  if (!InheritanceUtil.isInheritor(aClass,
                                   "junit.framework.TestCase")) {
    return;
  }
  final PsiParameterList parameterList = method.getParameterList();
  if (parameterList.getParametersCount() != 0) {
    return;
  }
  if (method.hasModifierProperty(PsiModifier.STATIC)) {
    return;
  }
  registerMethodError(method);
}
项目:processing-idea    文件:SketchClassFilter.java   
public static boolean isSketchClass(PsiClass klass) {
    if (klass.getQualifiedName() == null) { return false; }

    // klass.isInheritor(myBase, true) && ConfigurationUtil.PUBLIC_INSTANTIATABLE_CLASS.value(klass)

    // @TODO This would only find Processing 3 PApplet classes. Investigate handling Processing 2.0.
    return InheritanceUtil.isInheritor(klass, "processing.core.PApplet")
            && ConfigurationUtil.PUBLIC_INSTANTIATABLE_CLASS.value(klass);
}
项目:intellij-ce-playground    文件:CompareToUsesNonFinalVariableInspection.java   
@Override
public void visitMethod(@NotNull PsiMethod method) {
  if (MethodUtils.isCompareTo(method) && 
      InheritanceUtil.isInheritor(method.getContainingClass(), false, CommonClassNames.JAVA_LANG_COMPARABLE)) {
    checkUsedNonFinalFields(method);
  }
}
项目:intellij-ce-playground    文件:RefactoringChangeUtil.java   
public static PsiReferenceExpression qualifyReference(@NotNull PsiReferenceExpression referenceExpression,
                                                      @NotNull PsiMember member,
                                                      @Nullable final PsiClass qualifyingClass) throws IncorrectOperationException {
  PsiManager manager = referenceExpression.getManager();
  PsiMethodCallExpression methodCallExpression = PsiTreeUtil.getParentOfType(referenceExpression, PsiMethodCallExpression.class, true);
  while (methodCallExpression != null) {
    if (isSuperOrThisMethodCall(methodCallExpression)) {
      return referenceExpression;
    }
    methodCallExpression = PsiTreeUtil.getParentOfType(methodCallExpression, PsiMethodCallExpression.class, true);
  }
  PsiReferenceExpression expressionFromText;
  final PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
  if (qualifyingClass == null) {
    PsiClass parentClass = PsiTreeUtil.getParentOfType(referenceExpression, PsiClass.class);
    final PsiClass containingClass = member.getContainingClass();
    if (parentClass != null && !InheritanceUtil.isInheritorOrSelf(parentClass, containingClass, true)) {
      while (parentClass != null && !InheritanceUtil.isInheritorOrSelf(parentClass, containingClass, true)) {
        parentClass = PsiTreeUtil.getParentOfType(parentClass, PsiClass.class, true);
      }
      LOG.assertTrue(parentClass != null);
      expressionFromText = (PsiReferenceExpression)factory.createExpressionFromText("A.this." + member.getName(), null);
      ((PsiThisExpression)expressionFromText.getQualifierExpression()).getQualifier().replace(factory.createClassReferenceElement(parentClass));
    }
    else {
      expressionFromText = (PsiReferenceExpression)factory.createExpressionFromText("this." + member.getName(), null);
    }
  }
  else {
    expressionFromText = (PsiReferenceExpression)factory.createExpressionFromText("A." + member.getName(), null);
    expressionFromText.setQualifierExpression(factory.createReferenceExpression(qualifyingClass));
  }
  CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(manager.getProject());
  expressionFromText = (PsiReferenceExpression)codeStyleManager.reformat(expressionFromText);
  return (PsiReferenceExpression)referenceExpression.replace(expressionFromText);
}
项目:intellij-ce-playground    文件:SleepWhileHoldingLockInspection.java   
@Override
public void visitMethodCallExpression(
  @NotNull PsiMethodCallExpression expression) {
  super.visitMethodCallExpression(expression);
  final PsiReferenceExpression methodExpression =
    expression.getMethodExpression();
  @NonNls final String methodName =
    methodExpression.getReferenceName();
  if (!"sleep".equals(methodName)) {
    return;
  }
  final PsiMethod containingMethod = 
    PsiTreeUtil.getParentOfType(expression, PsiMethod.class, true, PsiClass.class, PsiLambdaExpression.class);
  boolean isSynced = false;
  if (containingMethod != null && containingMethod.hasModifierProperty(PsiModifier.SYNCHRONIZED)) {
    isSynced = true;
  }
  final PsiSynchronizedStatement containingSyncStatement = 
    PsiTreeUtil.getParentOfType(expression, PsiSynchronizedStatement.class, true, PsiClass.class, PsiLambdaExpression.class);
  if (containingSyncStatement != null) {
    isSynced = true;
  }
  if (!isSynced) {
    return;
  }
  final PsiMethod method = expression.resolveMethod();
  if (method == null) {
    return;
  }
  final PsiClass methodClass = method.getContainingClass();
  if (methodClass == null ||
      !InheritanceUtil.isInheritor(methodClass, "java.lang.Thread")) {
    return;
  }
  registerMethodCallError(expression);
}
项目:intellij-ce-playground    文件:VisibilityUtil.java   
@PsiModifier.ModifierConstant
public static String getPossibleVisibility(final PsiMember psiMethod, final PsiElement place) {
  Project project = psiMethod.getProject();
  if (PsiUtil.isAccessible(project, psiMethod, place, null)) return getVisibilityModifier(psiMethod.getModifierList());
  if (JavaPsiFacade.getInstance(project).arePackagesTheSame(psiMethod, place)) {
    return PsiModifier.PACKAGE_LOCAL;
  }
  if (InheritanceUtil.isInheritorOrSelf(PsiTreeUtil.getParentOfType(place, PsiClass.class),
                                        psiMethod.getContainingClass(), true)) {
    return PsiModifier.PROTECTED;
  }
  return PsiModifier.PUBLIC;
}
项目:intellij-ce-playground    文件:GroovyMapPutCanBeKeyedAccessInspection.java   
@Override
public void visitMethodCallExpression(GrMethodCallExpression grMethodCallExpression) {
  super.visitMethodCallExpression(grMethodCallExpression);
  final GrArgumentList args = grMethodCallExpression.getArgumentList();
  if (args == null) {
    return;
  }
  if (args.getExpressionArguments().length != 2) {
    return;
  }
  if (PsiImplUtil.hasNamedArguments(args)) {
    return;
  }
  final GrExpression methodExpression = grMethodCallExpression.getInvokedExpression();
  if (!(methodExpression instanceof GrReferenceExpression)) {
    return;
  }
  final GrReferenceExpression referenceExpression = (GrReferenceExpression) methodExpression;
  final String name = referenceExpression.getReferenceName();
  if (!"put".equals(name)) {
    return;
  }
  final GrExpression qualifier = referenceExpression.getQualifierExpression();

  if (qualifier == null || PsiUtil.isThisOrSuperRef(qualifier)) {
    return;
  }
  if (referenceExpression.getDotTokenType() == GroovyTokenTypes.mOPTIONAL_DOT) return;
  final PsiType type = qualifier.getType();
  if (!InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_UTIL_MAP)) {
    return;
  }
  registerMethodCallError(grMethodCallExpression);
}
项目:intellij-ce-playground    文件:JavaDocLocalInspectionBase.java   
private void processThrowsTags(@NotNull PsiDocTag[] tags,
                               @NotNull Map<PsiClassType, PsiClass> declaredExceptions,
                               @NotNull InspectionManager manager,
                               @NotNull final List<ProblemDescriptor> problems,
                               boolean isOnTheFly) {
  for (PsiDocTag tag : tags) {
    if ("throws".equals(tag.getName()) || "exception".equals(tag.getName())) {
      final PsiDocTagValue value = tag.getValueElement();
      if (value == null) continue;
      final PsiElement firstChild = value.getFirstChild();
      if (firstChild == null) continue;
      final PsiElement psiElement = firstChild.getFirstChild();
      if (!(psiElement instanceof PsiJavaCodeReferenceElement)) continue;
      final PsiJavaCodeReferenceElement ref = (PsiJavaCodeReferenceElement)psiElement;
      final PsiElement element = ref.resolve();
      if (element instanceof PsiClass){
        final PsiClass exceptionClass = (PsiClass)element;
        for (Iterator<PsiClassType> it = declaredExceptions.keySet().iterator(); it.hasNext();) {
          PsiClassType classType = it.next();
          final PsiClass psiClass = declaredExceptions.get(classType);
          if (InheritanceUtil.isInheritorOrSelf(exceptionClass, psiClass, true)) {
            if (!myIgnoreEmptyDescriptions && extractThrowsTagDescription(tag).isEmpty()) {
              problems.add(createDescriptor(tag.getNameElement(), InspectionsBundle.message("inspection.javadoc.method.problem.missing.tag.description", "<code>" + tag.getName() + "</code>"), manager,
                                            isOnTheFly));
            }
            it.remove();
          }
        }
      }
    }
  }
}
项目:intellij-ce-playground    文件:InspectionMappingConsistencyInspection.java   
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder,
                                      boolean isOnTheFly,
                                      @NotNull LocalInspectionToolSession session) {
  return new XmlElementVisitor()  {
    @Override
    public void visitXmlTag(XmlTag tag) {
      DomElement element = DomUtil.getDomElement(tag);
      if (element instanceof Extension) {
        ExtensionPoint extensionPoint = ((Extension)element).getExtensionPoint();
        if (extensionPoint != null && InheritanceUtil.isInheritor(extensionPoint.getBeanClass().getValue(), "com.intellij.codeInspection.InspectionEP")) {
          boolean key = tag.getAttribute("key") != null;
          boolean groupKey = tag.getAttribute("groupKey") != null;
          if (key) {
            if (tag.getAttribute("bundle") == null) {
              checkDefaultBundle(element, holder);
            }
          }
          else if (tag.getAttribute("displayName") == null) {
            registerProblem(element, holder, "displayName or key should be specified", "displayName", "key");
          }
          if (groupKey) {
            if (tag.getAttribute("bundle") == null && tag.getAttribute("groupBundle") == null) {
              checkDefaultBundle(element, holder);
            }
          }
          else if (tag.getAttribute("groupName") == null) {
            registerProblem(element, holder, "groupName or groupKey should be specified", "groupName", "groupKey");
          }
        }
      }
    }
  };
}
项目:intellij-ce-playground    文件:Match.java   
boolean registerInstanceExpression(PsiExpression instanceExpression, final PsiClass contextClass) {
  if (myInstanceExpression == null) {
    if (instanceExpression != null) {
      final PsiType type = instanceExpression.getType();
      if (!(type instanceof PsiClassType)) return false;
      final PsiClass hisClass = ((PsiClassType) type).resolve();
      if (hisClass == null || !InheritanceUtil.isInheritorOrSelf(hisClass, contextClass, true)) return false;
    }
    myInstanceExpression = Ref.create(instanceExpression);
    return true;
  }
  else {
    if (myInstanceExpression.get() == null) {
      myInstanceExpression.set(instanceExpression);

      return instanceExpression == null;
    }
    else {
      if (instanceExpression != null) {
        return PsiEquivalenceUtil.areElementsEquivalent(instanceExpression, myInstanceExpression.get());
      }
      else {
        return myInstanceExpression.get() == null || myInstanceExpression.get() instanceof PsiThisExpression;
      }
    }
  }
}
项目:intellij-ce-playground    文件:JUnitUtil.java   
public static boolean isSuiteMethod(@NotNull PsiMethod psiMethod) {
  if (!psiMethod.hasModifierProperty(PsiModifier.PUBLIC)) return false;
  if (!psiMethod.hasModifierProperty(PsiModifier.STATIC)) return false;
  if (psiMethod.isConstructor()) return false;
  if (psiMethod.getParameterList().getParametersCount() > 0) return false;
  final PsiType returnType = psiMethod.getReturnType();
  if (returnType == null || returnType instanceof PsiPrimitiveType) return false;
  return returnType.equalsToText(TEST_INTERFACE)||
         returnType.equalsToText(TESTSUITE_CLASS) ||
         InheritanceUtil.isInheritor(returnType, TEST_INTERFACE);
}
项目:intellij-ce-playground    文件:TeardownCallsSuperTeardownInspection.java   
@Override
public void visitMethod(@NotNull PsiMethod method) {
  //note: no call to super;
  @NonNls final String methodName = method.getName();
  if (!myMethodName.equals(methodName)) {
    return;
  }
  if (method.hasModifierProperty(PsiModifier.ABSTRACT)) {
    return;
  }
  if (method.getBody() == null) {
    return;
  }
  final PsiParameterList parameterList = method.getParameterList();
  if (parameterList.getParametersCount() != 0) {
    return;
  }
  final PsiClass targetClass = method.getContainingClass();
  if (targetClass == null) {
    return;
  }
  if (!InheritanceUtil.isInheritor(targetClass, "junit.framework.TestCase")) {
    return;
  }
  if (MethodCallUtils.containsSuperMethodCall(myMethodName, method)) {
    return;
  }
  registerMethodError(method);
}
项目:intellij-ce-playground    文件:ForeachStatementInspection.java   
@Override
public void visitForeachStatement(@NotNull PsiForeachStatement statement) {
  super.visitForeachStatement(statement);
  final PsiExpression iteratedValue = statement.getIteratedValue();
  if (iteratedValue == null || !InheritanceUtil.isInheritor(iteratedValue.getType(), CommonClassNames.JAVA_LANG_ITERABLE)) {
    return;
  }
  registerStatementError(statement);
}
项目:intellij-ce-playground    文件:OverriddenMethodCallDuringObjectConstructionInspection.java   
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
  super.visitMethodCallExpression(expression);
  if (!MethodCallUtils.isCallDuringObjectConstruction(expression)) {
    return;
  }
  final PsiReferenceExpression methodExpression = expression.getMethodExpression();
  final PsiExpression qualifier = methodExpression.getQualifierExpression();
  if (qualifier != null) {
    if (!(qualifier instanceof PsiThisExpression || qualifier instanceof PsiSuperExpression)) {
      return;
    }
  }
  final PsiClass containingClass = PsiTreeUtil.getParentOfType(expression, PsiClass.class);
  if (containingClass == null || containingClass.hasModifierProperty(PsiModifier.FINAL)) {
    return;
  }
  final PsiMethod calledMethod = expression.resolveMethod();
  if (calledMethod == null || !PsiUtil.canBeOverriden(calledMethod)) {
    return;
  }
  final PsiClass calledMethodClass = calledMethod.getContainingClass();
  if (!InheritanceUtil.isInheritorOrSelf(containingClass, calledMethodClass, true)) {
    return;
  }
  if (!MethodUtils.isOverriddenInHierarchy(calledMethod, containingClass)) {
    return;
  }
  if (CloneUtils.isClone(calledMethod)) {
    final PsiMethod containingMethod = PsiTreeUtil.getParentOfType(expression, PsiMethod.class);
    if (CloneUtils.isClone(containingMethod)) {
      return;
    }
  }
  registerMethodCallError(expression);
}
项目:intellij-ce-playground    文件:GtkPreferredJComboBoxRendererInspection.java   
@Override
@NotNull
public PsiElementVisitor buildInternalVisitor(@NotNull final ProblemsHolder holder, final boolean isOnTheFly) {
  return new JavaElementVisitor() {
    @Override
    public void visitMethodCallExpression(final PsiMethodCallExpression expression) {
      super.visitMethodCallExpression(expression);

      final Project project = expression.getProject();
      final JavaPsiFacade facade = JavaPsiFacade.getInstance(project);

      final PsiElement target = expression.getMethodExpression().resolve();
      if (!(target instanceof PsiMethod)) return;
      final PsiMethod method = (PsiMethod)target;
      if (!SETTER_METHOD_NAME.equals(method.getName())) return;
      final PsiClass aClass = ((PsiMethod)target).getContainingClass();
      final PsiClass comboClass = facade.findClass(COMBO_BOX_CLASS_NAME, GlobalSearchScope.allScope(project));
      if (!InheritanceUtil.isInheritorOrSelf(aClass, comboClass, true)) return;

      final PsiExpression[] arguments = expression.getArgumentList().getExpressions();
      if (arguments.length != 1) return;
      final PsiType type = arguments[0].getType();
      if (!(type instanceof PsiClassType)) return;
      final PsiClass rendererClass = ((PsiClassType)type).resolve();
      for (String rightClassName : RIGHT_RENDERER_CLASS_NAMES) {
        final PsiClass rightClass = facade.findClass(rightClassName, GlobalSearchScope.allScope(project));
        if (InheritanceUtil.isInheritorOrSelf(rendererClass, rightClass, true)) return;
      }

      holder.registerProblem(expression, MESSAGE);
    }
  };
}
项目:intellij-ce-playground    文件:SetupIsPublicVoidNoArgInspection.java   
@Override
public void visitMethod(@NotNull PsiMethod method) {
  //note: no call to super;
  @NonNls final String methodName = method.getName();
  if (!"setUp".equals(methodName)) {
    return;
  }
  final PsiType returnType = method.getReturnType();
  if (returnType == null) {
    return;
  }
  final PsiClass targetClass = method.getContainingClass();
  if (targetClass == null) {
    return;
  }
  if (!InheritanceUtil.isInheritor(targetClass,
                                   "junit.framework.TestCase")) {
    return;
  }
  final PsiParameterList parameterList = method.getParameterList();
  if (parameterList.getParametersCount() != 0 ||
      !returnType.equals(PsiType.VOID) ||
      !method.hasModifierProperty(PsiModifier.PUBLIC) &&
      !method.hasModifierProperty(PsiModifier.PROTECTED)) {
    registerMethodError(method);
  }
}
项目:intellij-ce-playground    文件:EmptyClassInspectionBase.java   
@Override
public void visitClass(@NotNull PsiClass aClass) {
  //don't call super, to prevent drilldown
  if (FileTypeUtils.isInServerPageFile(aClass.getContainingFile())) {
    return;
  }
  if (aClass.isInterface() || aClass.isEnum() || aClass.isAnnotationType()) {
    return;
  }
  if (aClass instanceof PsiTypeParameter) {
    return;
  }
  final PsiMethod[] constructors = aClass.getConstructors();
  if (constructors.length > 0) {
    return;
  }
  final PsiMethod[] methods = aClass.getMethods();
  if (methods.length > 0) {
    return;
  }
  final PsiField[] fields = aClass.getFields();
  if (fields.length > 0) {
    return;
  }
  final PsiClassInitializer[] initializers = aClass.getInitializers();
  if (initializers.length > 0) {
    return;
  }
  if (ignoreClassWithParameterization && isSuperParametrization(aClass)) {
    return;
  }
  if (AnnotationUtil.isAnnotated(aClass, ignorableAnnotations)) {
    return;
  }
  if (ignoreThrowables && InheritanceUtil.isInheritor(aClass, "java.lang.Throwable")) {
    return;
  }
  registerClassError(aClass, aClass);
}
项目:intellij-ce-playground    文件:MethodUtils.java   
private static boolean methodMatches(@NotNull PsiMethod method,
                                     @NonNls @Nullable String containingClassName,
                                     @Nullable PsiType returnType,
                                     @Nullable PsiType... parameterTypes) {
  if (parameterTypes != null) {
    final PsiParameterList parameterList = method.getParameterList();
    if (parameterList.getParametersCount() != parameterTypes.length) {
      return false;
    }
    final PsiParameter[] parameters = parameterList.getParameters();
    for (int i = 0; i < parameters.length; i++) {
      final PsiParameter parameter = parameters[i];
      final PsiType type = parameter.getType();
      final PsiType parameterType = parameterTypes[i];
      if (PsiType.NULL.equals(parameterType)) {
        continue;
      }
      if (parameterType != null && !EquivalenceChecker.typesAreEquivalent(type, parameterType)) {
        return false;
      }
    }
  }
  if (returnType != null) {
    final PsiType methodReturnType = method.getReturnType();
    if (!EquivalenceChecker.typesAreEquivalent(returnType, methodReturnType)) {
      return false;
    }
  }
  if (containingClassName != null) {
    final PsiClass containingClass = method.getContainingClass();
    return InheritanceUtil.isInheritor(containingClass, containingClassName);
  }
  return true;
}
项目:intellij-ce-playground    文件:UseOfAWTPeerClassInspection.java   
@Override
public void visitNewExpression(
  @NotNull PsiNewExpression newExpression) {
  super.visitNewExpression(newExpression);
  final PsiType type = newExpression.getType();
  if (type == null) {
    return;
  }
  if (!(type instanceof PsiClassType)) {
    return;
  }
  final PsiClass resolveClass = ((PsiClassType)type).resolve();
  if (resolveClass == null) {
    return;
  }
  if (resolveClass.isEnum() || resolveClass.isInterface() ||
      resolveClass.isAnnotationType()) {
    return;
  }
  if (resolveClass instanceof PsiTypeParameter) {
    return;
  }
  if (!InheritanceUtil.isInheritor(resolveClass,
                                   "java.awt.peer.ComponentPeer")) {
    return;
  }
  registerNewExpressionError(newExpression);
}
项目:intellij-ce-playground    文件:JUnitAbstractTestClassNamingConventionInspectionBase.java   
@Override
public void visitElement(PsiElement element) {
  if (!(element instanceof PsiClass)) {
    super.visitElement(element);
    return;
  }

  final PsiClass aClass = (PsiClass)element;
  if (aClass.isInterface() || aClass.isEnum() || aClass.isAnnotationType()) {
    return;
  }
  if (aClass instanceof PsiTypeParameter) {
    return;
  }
  if (!aClass.hasModifierProperty(PsiModifier.ABSTRACT)) {
    return;
  }
  if (!InheritanceUtil.isInheritor(aClass,
                                   "junit.framework.TestCase")) {
    return;
  }
  final String name = aClass.getName();
  if (name == null) {
    return;
  }
  if (isValid(name)) {
    return;
  }
  registerClassError(aClass, name);
}