From 283613d591dccfc07bbde3df186044fdcdd0479f Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 10 Oct 2016 20:48:51 +0200 Subject: [PATCH] IDEA-162322 Completion missing for field in copy constructor --- .../intellij/codeInsight/completion/CheckInitialized.java | 5 +++++ .../codeInsight/completion/normal/CopyConstructor.java | 7 +++++++ .../completion/normal/CopyConstructor_after.java | 7 +++++++ .../codeInsight/completion/NormalCompletionTest.groovy | 2 ++ 4 files changed, 21 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/CopyConstructor.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/CopyConstructor_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/CheckInitialized.java b/java/java-impl/src/com/intellij/codeInsight/completion/CheckInitialized.java index f0c914de02ce..26b6bcb201d7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/CheckInitialized.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/CheckInitialized.java @@ -16,6 +16,7 @@ package com.intellij.codeInsight.completion; import com.intellij.codeInsight.daemon.ImplicitUsageProvider; +import com.intellij.codeInspection.dataFlow.value.DfaValueFactory; import com.intellij.psi.*; import com.intellij.psi.filters.ElementFilter; import com.intellij.psi.infos.CandidateInfo; @@ -64,6 +65,10 @@ class CheckInitialized implements ElementFilter { } PsiElement parent = element.getParent(); + if (parent instanceof PsiReferenceExpression && !DfaValueFactory.isEffectivelyUnqualified((PsiReferenceExpression)parent)) { + return Collections.emptySet(); + } + while (parent != statement) { PsiElement next = parent.getParent(); if (next instanceof PsiAssignmentExpression && parent == ((PsiAssignmentExpression)next).getLExpression()) { diff --git a/java/java-tests/testData/codeInsight/completion/normal/CopyConstructor.java b/java/java-tests/testData/codeInsight/completion/normal/CopyConstructor.java new file mode 100644 index 000000000000..8f772198cb4b --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/CopyConstructor.java @@ -0,0 +1,7 @@ +class CopyConstructor { + private final String ad; + + public CopyConstructor(CopyConstructor other) { + this.ad = other.a + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/normal/CopyConstructor_after.java b/java/java-tests/testData/codeInsight/completion/normal/CopyConstructor_after.java new file mode 100644 index 000000000000..cdd0b825e959 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/CopyConstructor_after.java @@ -0,0 +1,7 @@ +class CopyConstructor { + private final String ad; + + public CopyConstructor(CopyConstructor other) { + this.ad = other.ad + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy index 423fd084fde5..f131f38a8c82 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -1728,4 +1728,6 @@ class Bar { myFixture.assertPreferredCompletionItems 0, "dx", "doo", "Doo", "double" } + void testCopyConstructor() { doTest('\n') } + }