diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java index 7fe84830d8aa..69d353e49edc 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java @@ -30,6 +30,7 @@ import com.intellij.psi.*; import com.intellij.psi.filters.ElementFilter; import com.intellij.psi.impl.light.LightClassReference; import com.intellij.psi.impl.light.LightJavaModule; +import com.intellij.psi.impl.source.DummyHolder; import com.intellij.psi.impl.source.PsiClassReferenceType; import com.intellij.psi.impl.source.PsiImmediateClassType; import com.intellij.psi.impl.source.resolve.ResolveCache; @@ -182,10 +183,11 @@ public class PsiImplUtil { public static boolean processDeclarationsInMethod(@NotNull final PsiMethod method, @NotNull final PsiScopeProcessor processor, @NotNull final ResolveState state, - final PsiElement lastParent, + PsiElement lastParent, @NotNull final PsiElement place) { - final boolean fromBody = lastParent instanceof PsiCodeBlock; - final PsiTypeParameterList typeParameterList = method.getTypeParameterList(); + if (lastParent instanceof DummyHolder) lastParent = lastParent.getFirstChild(); + boolean fromBody = lastParent instanceof PsiCodeBlock; + PsiTypeParameterList typeParameterList = method.getTypeParameterList(); return processDeclarationsInMethodLike(method, processor, state, place, fromBody, typeParameterList); } diff --git a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInCodeFragmentTest.java b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInCodeFragmentTest.java index 3ec97af77491..5633acd5ba7d 100644 --- a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInCodeFragmentTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInCodeFragmentTest.java @@ -88,4 +88,11 @@ public class ResolveInCodeFragmentTest extends ResolveTestCase { assertTrue(ref.getElement().getResolveScope().contains(file.getViewProvider().getVirtualFile())); assertInstanceOf(ref.resolve(), PsiMethod.class); } + + public void testResolveMethodParamsFromNonPhysicalCodeBlock() { + PsiElementFactory factory = JavaPsiFacade.getElementFactory(getProject()); + PsiMethod method = factory.createMethodFromText("void foo(Object o);", null); + PsiCodeBlock block = factory.createCodeBlockFromText("{ return o; }", method); + assertInstanceOf(block.findReferenceAt(block.getText().indexOf("o")).resolve(), PsiParameter.class); + } }