blob: 79f8ac2fff7eaec4c0c39e09e07165c787bdc7bf [file] [log] [blame]
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");
}
}