dfa: when analyzing how fields are initialized in constructors, do it only for java code

This commit is contained in:
peter
2015-03-24 16:32:26 +01:00
parent 1a014a13e8
commit 4f6ea09d04
@@ -20,6 +20,7 @@ import com.intellij.codeInspection.dataFlow.instructions.Instruction;
import com.intellij.codeInspection.dataFlow.instructions.MethodCallInstruction;
import com.intellij.codeInspection.dataFlow.instructions.ReturnInstruction;
import com.intellij.codeInspection.dataFlow.value.DfaValueFactory;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.util.Ref;
import com.intellij.psi.*;
import com.intellij.psi.search.LocalSearchScope;
@@ -113,8 +114,11 @@ public class DfaPsiUtil {
}
private static Set<PsiField> getNotNullInitializedFields(final PsiMethod constructor, final PsiClass containingClass) {
if (!constructor.getLanguage().isKindOf(JavaLanguage.INSTANCE)) return Collections.emptySet();
final PsiCodeBlock body = constructor.getBody();
if (body == null) return Collections.emptySet();
return CachedValuesManager.getCachedValue(constructor, new CachedValueProvider<Set<PsiField>>() {
@Nullable
@Override
@@ -200,6 +204,7 @@ public class DfaPsiUtil {
private static MultiMap<PsiField, PsiExpression> getAllConstructorFieldInitializers(final PsiClass psiClass) {
if (psiClass instanceof PsiCompiledElement) {
//noinspection unchecked
return MultiMap.EMPTY;
}
@@ -231,7 +236,9 @@ public class DfaPsiUtil {
};
for (PsiMethod constructor : psiClass.getConstructors()) {
constructor.accept(visitor);
if (constructor.getLanguage().isKindOf(JavaLanguage.INSTANCE)) {
constructor.accept(visitor);
}
}
return Result.create(result, psiClass);