当前位置: 首页>>代码示例>>Java>>正文


Java PsiUtil.canBeOverriden方法代码示例

本文整理汇总了Java中com.intellij.psi.util.PsiUtil.canBeOverriden方法的典型用法代码示例。如果您正苦于以下问题:Java PsiUtil.canBeOverriden方法的具体用法?Java PsiUtil.canBeOverriden怎么用?Java PsiUtil.canBeOverriden使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在com.intellij.psi.util.PsiUtil的用法示例。


在下文中一共展示了PsiUtil.canBeOverriden方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: canCallMethodsInConstructors

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
private static boolean canCallMethodsInConstructors(PsiClass aClass, boolean virtual) {
  for (PsiMethod constructor : aClass.getConstructors()) {
    if (!constructor.getLanguage().isKindOf(JavaLanguage.INSTANCE)) return true;

    PsiCodeBlock body = constructor.getBody();
    if (body == null) continue;

    for (PsiMethodCallExpression call : SyntaxTraverser.psiTraverser().withRoot(body).filter(PsiMethodCallExpression.class)) {
      PsiReferenceExpression methodExpression = call.getMethodExpression();
      if (methodExpression instanceof PsiThisExpression || methodExpression instanceof PsiSuperExpression) continue;
      if (!virtual) return true;
      
      PsiMethod target = call.resolveMethod();
      if (target != null && PsiUtil.canBeOverriden(target)) return true;
    }
  }

  return false;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:20,代码来源:DataFlowInspectionBase.java

示例2: ignoreInference

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@Override
public boolean ignoreInference(@NotNull PsiModifierListOwner owner, @Nullable String annotationFQN) {
  if (owner instanceof PsiMethod && PsiUtil.canBeOverriden((PsiMethod)owner)) {
    return true;
  }
  if (ORG_JETBRAINS_ANNOTATIONS_CONTRACT.equals(annotationFQN) && HardcodedContracts.hasHardcodedContracts(owner)) {
    return true;
  }
  if (AnnotationUtil.NOT_NULL.equals(annotationFQN) && owner instanceof PsiParameter && owner.getParent() != null) {
    if (AnnotationUtil.isAnnotated(owner, NullableNotNullManager.getInstance(owner.getProject()).getNullables(), false, false)) {
      return true;
    }
    if (HardcodedContracts.hasHardcodedContracts(owner)) {
      return true;
    }
  }
  return false;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:19,代码来源:InferredAnnotationsManagerImpl.java

示例3: getPrimaryElements

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@Override
@NotNull
public PsiElement[] getPrimaryElements() {
  final PsiElement element = getPsiElement();
  if (element instanceof PsiParameter) {
    final PsiParameter parameter = (PsiParameter)element;
    final PsiElement scope = parameter.getDeclarationScope();
    if (scope instanceof PsiMethod) {
      final PsiMethod method = (PsiMethod)scope;
      if (PsiUtil.canBeOverriden(method)) {
        final PsiClass aClass = method.getContainingClass();
        LOG.assertTrue(aClass != null); //Otherwise can not be overriden

        boolean hasOverridden = OverridingMethodsSearch.search(method).findFirst() != null;
        if (hasOverridden && askWhetherShouldSearchForParameterInOverridingMethods(element, parameter)) {
          return getParameterElementsToSearch(parameter, method);
        }
      }
    }
  }
  return myElementsToSearch.length == 0 ? new PsiElement[]{element} : myElementsToSearch;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:23,代码来源:JavaFindUsagesHandler.java

示例4: collectSlowLineMarkers

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@Override
public void collectSlowLineMarkers(@NotNull final List<PsiElement> elements, @NotNull final Collection<LineMarkerInfo> result) {
  ApplicationManager.getApplication().assertReadAccessAllowed();
  Map<PsiClass, PsiClass> subClassCache = FindSuperElementsHelper.createSubClassCache();

  Collection<PsiMethod> methods = new THashSet<PsiMethod>();
  //noinspection ForLoopReplaceableByForEach
  for (int i = 0; i < elements.size(); i++) {
    PsiElement element = elements.get(i);
    ProgressManager.checkCanceled();
    if (!(element instanceof PsiIdentifier)) continue;
    PsiElement parent = element.getParent();
    if (parent instanceof PsiMethod) {
      final PsiMethod method = (PsiMethod)parent;
      if (PsiUtil.canBeOverriden(method)) {
        methods.add(method);
      }
    }
    else if (parent instanceof PsiClass && !(parent instanceof PsiTypeParameter)) {
      collectInheritingClasses((PsiClass)parent, result, subClassCache);
    }
  }
  if (!methods.isEmpty()) {
    collectOverridingMethods(methods, result);
    collectSiblingInheritedMethods(methods, result, subClassCache);
  }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:28,代码来源:JavaLineMarkerProvider.java

示例5: visitMethodCallExpression

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@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);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:37,代码来源:OverriddenMethodCallDuringObjectConstructionInspection.java

示例6: visitMethodCallExpression

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@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) || calledMethod.hasModifierProperty(PsiModifier.PACKAGE_LOCAL)) {
    return;
  }
  final PsiClass calledMethodClass = calledMethod.getContainingClass();
  if (calledMethodClass == null || !calledMethodClass.equals(containingClass)) {
    return;
  }
  registerMethodCallError(expression, expression);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:28,代码来源:OverridableMethodCallDuringObjectConstructionInspectionBase.java


注:本文中的com.intellij.psi.util.PsiUtil.canBeOverriden方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。