inline: check constructors separately from class (IDEA-180820)

This commit is contained in:
Anna Kozlova
2017-11-06 17:55:03 +01:00
parent ef99c2990c
commit 613fe3f67f
3 changed files with 34 additions and 0 deletions

View File

@@ -38,6 +38,15 @@ public class ReferencedElementsCollector extends JavaRecursiveElementVisitor {
super.visitReferenceElement(reference);
}
@Override
public void visitNewExpression(PsiNewExpression expression) {
PsiMethod method = expression.resolveMethod();
if (method != null) {
checkAddMember(method);
}
super.visitNewExpression(expression);
}
protected void checkAddMember(@NotNull final PsiMember member) {
myReferencedMembers.add(member);
}

View File

@@ -0,0 +1,21 @@
class InlineWithPrivateConstructorAccess {
public static class SomeClass {
private SomeClass() { }
public static SomeClass createInstance() {
return new SomeClass();
}
}
}
class InlineWithPrivateConstructorAccessMain {
public static void main(String... args) {
InlineWithPrivateConstructorAccess.SomeClass obj = InlineWithPrivateConstructorAccess.SomeClass.create<caret>Instance();
}
}

View File

@@ -335,6 +335,10 @@ public class InlineMethodTest extends LightRefactoringTestCase {
doTestConflict("Inlined method calls super.foo() which won't be accessible on qualifier c");
}
public void testInaccessibleConstructorInInlinedMethod() {
doTestConflict("Constructor <b><code>SomeClass.SomeClass()</code></b> that is used in inlined method is not accessible from call site(s) in method <b><code>InlineWithPrivateConstructorAccessMain.main(String...)</code></b>");
}
public void testSuperCallWhenUnqualifiedInline() {
doTestInlineThisOnly();
}