package com.intellij.psi.resolve; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.testFramework.PlatformTestCase; import com.intellij.testFramework.ResolveTestCase; @PlatformTestCase.WrapInCommand public class ResolveVariableTest extends ResolveTestCase { public void testAnonymousConstructorArg() throws Exception { PsiElement target = configureAndResolve(); assertTrue(target instanceof PsiParameter); assertEquals("value", ((PsiParameter)target).getName()); } public void testLocalVariable1() throws Exception { PsiElement target = configureAndResolve(); assertTrue(target instanceof PsiLocalVariable); assertEquals("value", ((PsiLocalVariable)target).getName()); } public void testVisibility1() throws Exception { PsiElement target = configureAndResolve(); assertTrue(target instanceof PsiField); assertEquals("variable", ((PsiField)target).getName()); } public void testVisibility2() throws Exception { PsiElement target = configureAndResolve(); assertTrue(target instanceof PsiField); assertEquals("a", ((PsiField)target).getName()); } private PsiElement configureAndResolve() throws Exception { PsiReference ref = configure(); PsiElement target = ref.resolve(); return target; } public void testVisibility3() throws Exception { PsiElement target = configureAndResolve(); assertTrue(target instanceof PsiField); assertEquals("i", ((PsiField)target).getName()); } public void testVisibility4() throws Exception { PsiElement target = configureAndResolve(); assertEquals("a", ((PsiLocalVariable)target).getName()); assertTrue(target instanceof PsiLocalVariable); } public void testQualified1() throws Exception { PsiElement target = configureAndResolve(); assertTrue(target instanceof PsiField); assertEquals("a", ((PsiField)target).getName()); } public void testQualified2() throws Exception { PsiElement target = configureAndResolve(); assertTrue(target instanceof PsiField); assertEquals("a", ((PsiField)target).getName()); } public void testQualified3() throws Exception { PsiElement target = configureAndResolve(); assertTrue(target instanceof PsiField); assertEquals("a", ((PsiField)target).getName()); } public void testQualified4() throws Exception { PsiElement target = configureAndResolve(); assertTrue(target instanceof PsiField); assertEquals("a", ((PsiField)target).getName()); } public void testUnresolved1() throws Exception { PsiElement target = configureAndResolve(); assertNull(target); } public void testFieldFromInterface() throws Exception { PsiElement target = configureAndResolve(); assertTrue(target instanceof PsiField); } public void testInterfaceConflict1() throws Exception { PsiElement target = configureAndResolve(); assertNull(target); } public void testInterfaceConflict2() throws Exception { PsiElement target = configureAndResolve(); assertNull(target); } public void testInterfaceConflict3() throws Exception { PsiElement target = configureAndResolve(); assertNull(target); } public void testInterfaceConflict4() throws Exception { PsiElement target = configureAndResolve(); assertNull(target); } // This is a bug but it's too hard to fix this :( // TODO: try to fix public void dontTestInterfaceConflict5() throws Exception { PsiElement target = configureAndResolve(); assertNull(target); } public void testInterfaceConflict6() throws Exception { PsiElement target = configureAndResolve(); assertNull(target); } public void testInterfaceConflict7() throws Exception { PsiElement target = configureAndResolve(); assertNotNull(target); } public void testInterfaceConflict8() throws Exception { PsiElement target = configureAndResolve(); assertNotNull(target); } public void testInterfaceConflict9() throws Exception { PsiElement target = configureAndResolve(); assertNull(target); } public void testInterfaceConflict10() throws Exception { PsiElement target = configureAndResolve(); assertNull(target); } public void testArray1() throws Exception { PsiElement target = configureAndResolve(); assertNotNull(target); } public void testInterfaceConflict11() throws Exception { PsiElement target = configureAndResolve(); assertNotNull(target); assertTrue(target instanceof PsiField); assertEquals("B", ((PsiField)target).getContainingClass().getName()); } public void testBug7869() throws Exception { PsiElement target = configureAndResolve(); assertNotNull(target); } public void testInner1() throws Exception { PsiElement target = configureAndResolve(); assertNotNull(target); assertEquals("Inner1", ((PsiField)target).getContainingClass().getName()); } public void testFieldsAndLocals() throws Exception { PsiElement target = configureAndResolve(); assertTrue(target instanceof PsiLocalVariable); } public void testPrivateOverloading() throws Exception { PsiReference ref = configureByFile("var/PrivateOverloading.java"); final JavaResolveResult result = ((PsiJavaReference)ref).advancedResolve(true); PsiElement target = result.getElement(); assertNotNull(target); assertFalse(result.isValidResult()); } public void testVisibility6() throws Exception { PsiReference ref = configureByFile("var/Visibility6.java"); final JavaResolveResult result = ((PsiJavaReference)ref).advancedResolve(true); PsiElement target = result.getElement(); assertNotNull(target); assertFalse(result.isValidResult()); } public void testVisibility7() throws Exception { PsiReference ref = configureByFile("var/InnerPrivates1.java"); final JavaResolveResult result = ((PsiJavaReference)ref).advancedResolve(true); PsiElement target = result.getElement(); assertNotNull(target); assertTrue(result.isValidResult()); } public void testForeachParameter() throws Exception { final PsiReference ref = configureByFile("var/ForeachParameter.java"); final PsiElement element = ref.resolve(); assertTrue(element instanceof PsiParameter); assertEquals("o", ((PsiParameter)element).getName()); assertTrue(element.getParent() instanceof PsiForeachStatement); } public void testRefInSuper() throws Exception { final PsiJavaReference ref = (PsiJavaReference)configureByFile("var/RefInSuper.java"); final JavaResolveResult resolveResult = ref.advancedResolve(false); assertTrue(resolveResult.isValidResult()); PsiElement currentFileResolveScope = resolveResult.getCurrentFileResolveScope(); assertTrue(currentFileResolveScope instanceof PsiClass); assertEquals("Inner", ((PsiClass)currentFileResolveScope).getName()); PsiElement element = resolveResult.getElement(); assertTrue(element instanceof PsiField); assertEquals("i", ((PsiField)element).getName()); } public void testRefInOuter() throws Exception { final PsiJavaReference ref = (PsiJavaReference)configureByFile("var/RefInOuter.java"); final JavaResolveResult resolveResult = ref.advancedResolve(false); assertTrue(resolveResult.isValidResult()); PsiElement currentFileResolveScope = resolveResult.getCurrentFileResolveScope(); assertTrue(currentFileResolveScope instanceof PsiClass); assertEquals("Outer", ((PsiClass)currentFileResolveScope).getName()); PsiElement element = resolveResult.getElement(); assertTrue(element instanceof PsiField); assertEquals("i", ((PsiField)element).getName()); } public void testInheritedOuter() throws Exception { final PsiJavaReference ref = (PsiJavaReference)configureByFile("var/InheritedOuter.java"); final JavaResolveResult resolveResult = ref.advancedResolve(false); assertTrue(resolveResult.isValidResult()); } public void testStaticFieldsInInterfacesConflict() throws Exception { final PsiJavaReference ref = (PsiJavaReference)configureByFile("var/FieldConflict.java"); final JavaResolveResult resolveResult = ref.advancedResolve(false); assertTrue(!resolveResult.isValidResult()); final JavaResolveResult[] results = ref.multiResolve(false); assertEquals(2, results.length); } public void testShadowFieldsInHierarchy() throws Exception { final PsiJavaReference ref = (PsiJavaReference)configure(); final JavaResolveResult resolveResult = ref.advancedResolve(false); assertTrue(resolveResult.isValidResult()); PsiField field = myJavaFacade.findClass("TestPage", GlobalSearchScope.allScope(getProject())).getFields()[0]; assertEquals(field, resolveResult.getElement()); } public void testShadowFieldsInHierarchy2() throws Exception { PsiElement ref = configureAndResolve(); assertTrue(ref instanceof PsiField); assertEquals("E", ((PsiField)ref).getContainingClass().getName()); } private PsiReference configure() throws Exception { return configureByFile("var/" + getTestName(false) + ".java"); } }