From b51b2c8b0437f08c5dab4d24b012a28add9703c1 Mon Sep 17 00:00:00 2001 From: "Vitaliy.Bibaev" Date: Mon, 5 Mar 2018 15:01:27 +0300 Subject: [PATCH] IDEA-172425 Support method references to private constructors --- .../ConstructorReflectionAccessor.java | 34 ++++++++++++------- .../MethodReferenceReflectionAccessor.java | 13 ++++++- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/reflect/ConstructorReflectionAccessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/reflect/ConstructorReflectionAccessor.java index 5194777db84f..bfe00bc7e7c5 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/reflect/ConstructorReflectionAccessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/reflect/ConstructorReflectionAccessor.java @@ -33,18 +33,9 @@ public class ConstructorReflectionAccessor extends ReflectionAccessorBase { private final MethodReflectionAccessor myMethodAccessor; + private final ConstructorReflectionAccessor myConstructorReflectionAccessor; public MethodReferenceReflectionAccessor(@NotNull PsiClass psiClass, @NotNull PsiElementFactory elementFactory) { super(psiClass, elementFactory); myMethodAccessor = new MethodReflectionAccessor(psiClass, elementFactory); + myConstructorReflectionAccessor = new ConstructorReflectionAccessor(psiClass, elementFactory); } @Nullable @@ -41,7 +46,13 @@ public class MethodReferenceReflectionAccessor PsiLambdaExpression lambda = LambdaRefactoringUtil.convertMethodReferenceToLambda(descriptor.expression, false, true); if (lambda != null) { PsiElement lambdaBody = lambda.getBody(); - if (lambdaBody instanceof PsiMethodCallExpression) { + if (lambdaBody instanceof PsiNewExpression) { + ConstructorDescriptor constructorDescriptor = createIfInaccessible((PsiNewExpression)lambdaBody); + if (constructorDescriptor != null) { + myConstructorReflectionAccessor.grantAccess(constructorDescriptor); + } + } + else if (lambdaBody instanceof PsiMethodCallExpression) { PsiMethodCallExpression callExpression = (PsiMethodCallExpression)lambdaBody; PsiMethod method = callExpression.resolveMethod(); if (method != null) { -- 2.32.0