blob: b45903c9f17facad505eda0c215ec39c838142f0 [file] [log] [blame]
/*
* Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.psi.resolve;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.LanguageLevelProjectExtension;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.infos.MethodCandidateInfo;
import com.intellij.testFramework.IdeaTestUtil;
import com.intellij.testFramework.ResolveTestCase;
public class ResolveMethodTest extends ResolveTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
LanguageLevelProjectExtension.getInstance(myJavaFacade.getProject()).setLanguageLevel(LanguageLevel.JDK_1_5);
}
@Override
protected Sdk getTestProjectJdk() {
return IdeaTestUtil.getMockJdk14();
}
private PsiElement resolve() throws Exception {
PsiReference ref = configureByFile("method/" + getTestName(false) + ".java");
return ref.resolve();
}
private JavaResolveResult advancedResolve() throws Exception {
PsiJavaCodeReferenceElement ref = (PsiJavaCodeReferenceElement)configureByFile("method/" + getTestName(false) + ".java");
return ref.advancedResolve(true);
}
public void testShortVsInt() throws Exception {
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
PsiParameter parm = ((PsiMethod)target).getParameterList().getParameters()[0];
assertEquals(PsiType.INT, parm.getType());
}
public void testSimple() throws Exception {
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertEquals("method", ((PsiMethod) target).getName());
}
public void testIndexOf() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
PsiParameter parm = ((PsiMethod)target).getParameterList().getParameters()[0];
assertEquals(PsiType.INT, parm.getType());
}
public void testSuper1() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
}
public void testInherit1() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertTrue(target.getParent() instanceof PsiClass);
assertEquals("B", ((PsiClass)target.getParent()).getQualifiedName());
}
public void testNextMethod() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertEquals(PsiType.BOOLEAN, ((PsiMethod)target).getParameterList().getParameters()[1].getType());
}
public void testMethodConflict1() throws Exception{
PsiElement target = resolve();
assertNull(target);
}
public void testValueOf() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertEquals(PsiType.INT, ((PsiMethod)target).getParameterList().getParameters()[0].getType());
}
public void testMethodFromAnonBase() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
}
public void testSCR5859() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
PsiParameter[] parms = ((PsiMethod)target).getParameterList().getParameters();
assertEquals("Derived", parms[0].getType().getPresentableText());
assertEquals("Derived", parms[1].getType().getPresentableText());
}
public void testPreferPublic() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertTrue(((PsiMethod)target).hasModifierProperty(PsiModifier.PUBLIC));
}
public void testRemove1() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertTrue(target.getParent() instanceof PsiClass);
assertEquals("Remove1.A", ((PsiClass)target.getParent()).getQualifiedName());
}
public void testRemove2() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertTrue(target.getParent() instanceof PsiClass);
assertEquals("java.util.AbstractCollection", ((PsiClass)target.getParent()).getQualifiedName());
}
public void testArray1() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
}
public void testCycle1() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertTrue(target.getParent() instanceof PsiClass);
assertEquals("Cycle1.C", ((PsiClass)target.getParent()).getQualifiedName());
}
public void testAnonymousSuper1() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertTrue(target.getParent() instanceof PsiClass);
assertEquals("Test1.A", ((PsiClass)target.getParent()).getQualifiedName());
}
public void testBug7968() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertTrue(target.getParent() instanceof PsiClass);
assertEquals("Bug7968.Bar", ((PsiClass)target.getParent()).getQualifiedName());
}
public void testInheranceWithExtendsConflict() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertTrue(target.getParent() instanceof PsiClass);
assertEquals("B", ((PsiClass)target.getParent()).getQualifiedName());
}
public void testSout() throws Exception {
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertEquals("println", ((PsiMethod)target).getName());
}
/*
public void testSCR5134() throws Exception{
PsiReference ref = configureByFile("method/SCR5134.java");
PsiElement target = ref.resolve();
assertTrue(target instanceof PsiMethod);
PsiParameter parm = ((PsiMethod)target).getParameterList().getParameters()[0];
assertTrue(parm.getType().getText().equals("Integer"));
}
*/
public void testPartlyImplement1() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertTrue(target.getParent() instanceof PsiClass);
assertEquals("A.Predicate", ((PsiClass)target.getParent()).getQualifiedName());
}
public void testTestOverloading1() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
assertTrue(target.getParent() instanceof PsiClass);
assertEquals("B", ((PsiClass) target.getParent()).getName());
}
public void testSuperOfObject() throws Exception {
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
final PsiMethod method = (PsiMethod)target;
assertEquals("clone", method.getName());
assertEquals(CommonClassNames.JAVA_LANG_OBJECT, method.getContainingClass().getQualifiedName());
}
public void testStaticVSNonStatic() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
PsiMethod method = (PsiMethod) target;
assertEquals(0, method.getParameterList().getParametersCount());
}
public void testClone() throws Exception{
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
}
public void testThrowWithoutNew() throws Exception{
PsiElement target = resolve();
assertNull(target);
}
public void testThrowWithoutNew2() throws Exception {
PsiElement target = advancedResolve().getElement();
assertTrue(target instanceof PsiClass);
}
public void testNotAccessibleAccessClass() throws Exception{
JavaResolveResult result = advancedResolve();
assertFalse(result.isAccessible());
}
public void testInnerClass() throws Exception{
JavaResolveResult result = advancedResolve();
assertNotNull(result.getElement());
assertTrue(result instanceof MethodCandidateInfo);
assertTrue(!result.isValidResult());
assertTrue(!((MethodCandidateInfo)result).isApplicable());
final PsiClass aClass = ((PsiMethod)result.getElement()).getContainingClass();
assertNotNull(aClass.getContainingClass());
}
public void testPrivateInSuperInner() throws Exception{
JavaResolveResult result = advancedResolve();
assertNotNull(result.getElement());
assertTrue(result instanceof MethodCandidateInfo);
assertTrue(!result.isValidResult());
assertTrue(!result.isStaticsScopeCorrect());
}
public void testPrivateInSuperInner1() throws Exception{
JavaResolveResult result = advancedResolve();
assertNotNull(result.getElement());
assertTrue(result instanceof MethodCandidateInfo);
assertTrue(result.isValidResult());
}
public void testProtectedM() throws Exception {
JavaResolveResult result = advancedResolve();
assertTrue(result.getElement() instanceof PsiMethod);
assertFalse(result.isAccessible());
}
// This test complile but it seems to be a bug.
//public void testDependingParams1() throws Exception{
// PsiJavaReference ref = (PsiJavaReference) configureByFile("method/generics/DependingParams.java");
// final JavaResolveResult result = ref.advancedResolve(true);
// assertTrue(result.isValidResult());
//}
public void testImplementOrder() throws Exception {
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
PsiMethod method = (PsiMethod) target;
assertEquals("II", method.getContainingClass().getName());
}
public void testObjectVsInterface() throws Exception {
PsiElement target = resolve();
assertTrue(target instanceof PsiMethod);
PsiMethod method = (PsiMethod) target;
assertEquals("PublicCloneable", method.getContainingClass().getName());
}
public void testMultipleInheritancePathsToMethod() throws Exception {
PsiReference ref = configureByFile("method/" + getTestName(false) + ".java");
// just assume this is called by some highlighting inspection/intention/pass before the resolve
getJavaFacade().findClass("NN").getAllMethods();
PsiElement target = ref.resolve();
assertInstanceOf(target, PsiMethod.class);
}
}