From f773be416761765de8c8faa54cf427c2ecc38e49 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Mon, 1 Feb 2010 13:14:26 +0300 Subject: [PATCH] IDEA-22821 --- .../src/com/intellij/psi/impl/PsiClassImplUtil.java | 10 +++------- .../conflictResolvers/JavaMethodsConflictResolver.java | 17 ++++++++++++----- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/java/java-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java b/java/java-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java index f524e85552..7ce38be3b0 100644 --- a/java/java-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java +++ b/java/java-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java @@ -905,7 +905,7 @@ public class PsiClassImplUtil { //see com.intellij.psi.impl.PsiFileFactoryImpl#createFileFromText(CharSequence,PsiFile) final PsiFile original1 = file1.getUserData(PsiFileFactory.ORIGINAL_FILE); final PsiFile original2 = file2.getUserData(PsiFileFactory.ORIGINAL_FILE); - if ((original1 == original2 && original1 != null) + if (original1 == original2 && original1 != null || original1 == file2 || original2 == file1) { return true; } @@ -913,12 +913,8 @@ public class PsiClassImplUtil { final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(aClass.getProject()).getFileIndex(); final VirtualFile vfile1 = file1.getViewProvider().getVirtualFile(); final VirtualFile vfile2 = file2.getViewProvider().getVirtualFile(); - if ((fileIndex.isInSource(vfile1) || fileIndex.isInLibraryClasses(vfile1)) && - (fileIndex.isInSource(vfile2) || fileIndex.isInLibraryClasses(vfile2))) { - return true; - } - - return false; + return (fileIndex.isInSource(vfile1) || fileIndex.isInLibraryClasses(vfile1)) && + (fileIndex.isInSource(vfile2) || fileIndex.isInLibraryClasses(vfile2)); } private static PsiElement originalElement(PsiClass aClass) { diff --git a/java/java-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java b/java/java-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java index 8b5ab5b0a9..1ca3b4b5de 100644 --- a/java/java-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java +++ b/java/java-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java @@ -37,14 +37,15 @@ import java.util.*; public class JavaMethodsConflictResolver implements PsiConflictResolver{ private final PsiElement myArgumentsList; private final PsiType[] myActualParameterTypes; + private static final Function EXPRESSION_TO_TYPE = new Function() { + public PsiType fun(final PsiExpression expression) { + return expression.getType(); + } + }; public JavaMethodsConflictResolver(PsiExpressionList list) { myArgumentsList = list; - myActualParameterTypes = ContainerUtil.map2Array(list.getExpressions(), PsiType.class, new Function() { - public PsiType fun(final PsiExpression expression) { - return expression.getType(); - } - }); + myActualParameterTypes = ContainerUtil.map2Array(list.getExpressions(), PsiType.class, EXPRESSION_TO_TYPE); } public JavaMethodsConflictResolver(final PsiElement argumentsList, final PsiType[] actualParameterTypes) { @@ -376,11 +377,17 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{ if (MethodSignatureUtil.isSubsignature(method1.getSignature(info1.getSubstitutor()), method2.getSignature(info2.getSubstitutor()))) { isMoreSpecific = Specifics.SECOND; } + else if (method1.hasModifierProperty(PsiModifier.STATIC) && method2.hasModifierProperty(PsiModifier.STATIC)) { + isMoreSpecific = Specifics.SECOND; + } } else if (class1.isInheritor(class2, true) || class2.isInterface()) { if (MethodSignatureUtil.isSubsignature(method2.getSignature(info2.getSubstitutor()), method1.getSignature(info1.getSubstitutor()))) { isMoreSpecific = Specifics.FIRST; } + else if (method1.hasModifierProperty(PsiModifier.STATIC) && method2.hasModifierProperty(PsiModifier.STATIC)) { + isMoreSpecific = Specifics.FIRST; + } } } if (isMoreSpecific == null) { -- 2.11.4.GIT