IDEADEV-31824 (Incorrect "manual array copy" warning)
[fedora-idea.git] / plugins / InspectionGadgets / src / com / siyeh / ig / initialization / AbstractMethodCallInConstructorInspection.java
blob7599aa80a798d894e7d1a2d9a0794864cd4cda25
1 /*
2 * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com.siyeh.ig.initialization;
18 import com.intellij.psi.*;
19 import com.intellij.psi.util.PsiTreeUtil;
20 import com.siyeh.InspectionGadgetsBundle;
21 import com.siyeh.ig.BaseInspection;
22 import com.siyeh.ig.BaseInspectionVisitor;
23 import org.jetbrains.annotations.NotNull;
25 public class AbstractMethodCallInConstructorInspection extends BaseInspection {
27 @NotNull
28 public String getDisplayName() {
29 return InspectionGadgetsBundle.message(
30 "abstract.method.call.in.constructor.display.name");
33 @NotNull
34 protected String buildErrorString(Object... infos) {
35 return InspectionGadgetsBundle.message(
36 "abstract.method.call.in.constructor.problem.descriptor");
39 public BaseInspectionVisitor buildVisitor(){
40 return new AbstractMethodCallInConstructorVisitor();
43 private static class AbstractMethodCallInConstructorVisitor
44 extends BaseInspectionVisitor{
46 @Override public void visitMethodCallExpression(
47 @NotNull PsiMethodCallExpression call){
48 super.visitMethodCallExpression(call);
49 final PsiMethod method =
50 PsiTreeUtil.getParentOfType(call, PsiMethod.class);
51 if(method == null){
52 return;
54 if(!method.isConstructor()){
55 return;
57 final PsiReferenceExpression methodExpression =
58 call.getMethodExpression();
59 final PsiExpression qualifier =
60 methodExpression.getQualifierExpression();
61 if (qualifier != null) {
62 if (!(qualifier instanceof PsiThisExpression) &&
63 !(qualifier instanceof PsiSuperExpression)) {
64 return;
67 final PsiMethod calledMethod =
68 (PsiMethod) methodExpression.resolve();
69 if(calledMethod == null){
70 return;
72 if(calledMethod.isConstructor()){
73 return;
75 if(!calledMethod.hasModifierProperty(PsiModifier.ABSTRACT)){
76 return;
78 final PsiClass calledMethodClass =
79 calledMethod.getContainingClass();
80 if(calledMethodClass == null){
81 return;
83 final PsiClass methodClass = method.getContainingClass();
84 if(!calledMethodClass.equals(methodClass)){
85 return;
87 registerMethodCallError(call);