diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java
index 87e96a7a143b..8ac099bcd592 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java
@@ -186,7 +186,12 @@ public class PsiMethodReferenceExpressionImpl extends PsiReferenceExpressionBase
try {
final PsiExpression expression = getQualifierExpression();
if (expression != null) {
- PsiClassType.ClassResolveResult result = PsiUtil.resolveGenericsClassInType(expression.getType());
+ final PsiType expressionType = expression.getType();
+ if (expressionType instanceof PsiArrayType) {
+ containingClass = JavaPsiFacade.getInstance(getProject()).findClass(CommonClassNames.JAVA_LANG_OBJECT, getResolveScope());
+ return false;
+ }
+ PsiClassType.ClassResolveResult result = PsiUtil.resolveGenericsClassInType(expressionType);
containingClass = result.getElement();
if (containingClass != null) {
substitutor = result.getSubstitutor();
@@ -302,7 +307,10 @@ public class PsiMethodReferenceExpressionImpl extends PsiReferenceExpressionBase
};
processor.setIsConstructor(isConstructor);
processor.setName(isConstructor ? containingClass.getName() : element.getText());
- processor.setAccessClass(containingClass);
+ final PsiExpression expression = getQualifierExpression();
+ if (expression == null || !(expression.getType() instanceof PsiArrayType)) {
+ processor.setAccessClass(containingClass);
+ }
if (beginsWithReferenceType) {
if (containingClass.getContainingClass() == null || !containingClass.hasModifierProperty(PsiModifier.STATIC)) {
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/AccessModifiers.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/AccessModifiers.java
index fa01f7ef6d46..40b69484a1ed 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/AccessModifiers.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/AccessModifiers.java
@@ -34,3 +34,42 @@ class AlienTest {
IInt i7 = MyTest.Foo::foo;
}
}
+
+
+class MyTest1 {
+
+ interface I1 {
+ int[] _();
+ }
+
+ interface I2 {
+ Object _();
+ }
+
+ interface I3 {
+ char[] _();
+ }
+
+ interface I4 {
+
+ boolean _();
+ }
+
+ interface I5 {
+ Class extends MyTest1> _();
+ }
+
+ interface I6 {
+ Class _();
+ }
+
+ void foo(Object[] arr) {
+ I1 c1 = arr :: clone;
+ I2 c2 = arr :: clone;
+ I3 c3 = arr::clone;
+ I4 c5 = arr::clone;
+
+ I5 c4 = this::getClass;
+ I6 c6 = this::getClass;
+ }
+}