KT-1043 'Implement Methods' throws a ClassCastException

#KT-1043 Obsolete
This commit is contained in:
Nikolay Krasko
2013-12-16 16:01:51 +04:00
parent 0be28efa00
commit 372106b914
5 changed files with 75 additions and 3 deletions
@@ -0,0 +1,7 @@
package foo;
class JavaClass {
}
// KT-1043 'Implement Methods' throws a ClassCastException
@@ -0,0 +1,14 @@
package foo;
import org.jetbrains.annotations.NotNull;
class JavaClass {
@NotNull
@Override
public void bar(String price) {
}
}
// KT-1043 'Implement Methods' throws a ClassCastException
@@ -0,0 +1,7 @@
package foo
trait KotlinTrait {
fun bar(price : String?)
}
// KT-1043 'Implement Methods' throws a ClassCastException
@@ -16,12 +16,20 @@
package org.jetbrains.jet.plugin.codeInsight;
import com.intellij.codeInsight.generation.OverrideImplementUtil;
import com.intellij.codeInsight.generation.PsiMethodMember;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.Result;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.psi.PsiElement;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.testFramework.LightProjectDescriptor;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import com.intellij.util.SmartList;
import junit.framework.Assert;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
@@ -67,6 +75,23 @@ public abstract class AbstractOverrideImplementTest extends LightCodeInsightFixt
doDirectoryTest(new OverrideMethodsHandler(), memberToImplement);
}
protected void doImplementJavaDirectoryTest(String className, String methodName) {
myFixture.copyDirectoryToProject(getTestName(true), "");
myFixture.configureFromTempProjectFile("foo/JavaClass.java");
Project project = myFixture.getProject();
PsiClass aClass = JavaPsiFacade.getInstance(project).findClass(className, GlobalSearchScope.allScope(project));
Assert.assertNotNull("Can't find class: " + className, aClass);
PsiMethod method = aClass.findMethodsByName(methodName, false)[0];
Assert.assertNotNull(String.format("Can't find method '%s' in class %s", methodName, className), method);
generateImplementation(method);
myFixture.checkResultByFile(getTestName(true) + "/foo/JavaClass.java.after");
}
private void doFileTest(OverrideImplementMethodsHandler handler) {
myFixture.configureByFile(getTestName(true) + ".kt");
doOverrideImplement(handler, null);
@@ -96,8 +121,7 @@ public abstract class AbstractOverrideImplementTest extends LightCodeInsightFixt
assertNotNull("Caret should be inside class or object", classOrObject);
final JetFile jetFile = (JetFile) classOrObject.getContainingFile();
final BindingContext bindingContext = AnalyzerFacadeWithCache.analyzeFileWithCache(jetFile)
.getBindingContext();
final BindingContext bindingContext = AnalyzerFacadeWithCache.analyzeFileWithCache(jetFile).getBindingContext();
Set<CallableMemberDescriptor> descriptors = handler.collectMethodsToGenerate(classOrObject, bindingContext);
final CallableMemberDescriptor singleToOverride;
@@ -159,4 +183,20 @@ public abstract class AbstractOverrideImplementTest extends LightCodeInsightFixt
}
}.execute();
}
private void generateImplementation(@NotNull final PsiMethod method) {
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
PsiClass aClass = ((PsiClassOwner) myFixture.getFile()).getClasses()[0];
PsiMethodMember methodMember = new PsiMethodMember(method, PsiSubstitutor.EMPTY);
OverrideImplementUtil.overrideOrImplementMethodsInRightPlace(
myFixture.getEditor(), aClass, new SmartList<PsiMethodMember>(methodMember), false);
PostprocessReformattingAspect.getInstance(myFixture.getProject()).doPostponedFormatting();
}
});
}
}
@@ -54,6 +54,10 @@ public final class OverrideImplementTest extends AbstractOverrideImplementTest {
doImplementDirectoryTest();
}
public void testFunctionFromTraitInJava() {
doImplementJavaDirectoryTest("foo.KotlinTrait", "bar");
}
public void testGenericMethod() {
doImplementFileTest();
}