one more test; generate 'return' for primitive type return values
This commit is contained in:
@@ -115,13 +115,22 @@ public class ImplementMethodsHandler implements LanguageCodeInsightActionHandler
|
|||||||
}
|
}
|
||||||
bodyBuilder.append(")");
|
bodyBuilder.append(")");
|
||||||
final JetType returnType = descriptor.getReturnType();
|
final JetType returnType = descriptor.getReturnType();
|
||||||
if (!returnType.equals(JetStandardLibrary.getJetStandardLibrary(project).getTuple0Type())) {
|
final JetStandardLibrary stdlib = JetStandardLibrary.getJetStandardLibrary(project);
|
||||||
|
if (!returnType.equals(stdlib.getTuple0Type())) {
|
||||||
bodyBuilder.append(": ").append(returnType.toString());
|
bodyBuilder.append(": ").append(returnType.toString());
|
||||||
}
|
}
|
||||||
bodyBuilder.append("{");
|
bodyBuilder.append("{");
|
||||||
if (returnType.isNullable()) {
|
if (returnType.isNullable()) {
|
||||||
bodyBuilder.append("return null");
|
bodyBuilder.append("return null");
|
||||||
}
|
}
|
||||||
|
else if (returnType.equals(stdlib.getIntType()) || returnType.equals(stdlib.getLongType()) ||
|
||||||
|
returnType.equals(stdlib.getShortType()) || returnType.equals(stdlib.getByteType()) ||
|
||||||
|
returnType.equals(stdlib.getFloatType()) || returnType.equals(stdlib.getDoubleType())) {
|
||||||
|
bodyBuilder.append("return 0");
|
||||||
|
}
|
||||||
|
else if (returnType.equals(stdlib.getBooleanType())) {
|
||||||
|
bodyBuilder.append("return false");
|
||||||
|
}
|
||||||
bodyBuilder.append("}");
|
bodyBuilder.append("}");
|
||||||
return JetPsiFactory.createFunction(project, bodyBuilder.toString());
|
return JetPsiFactory.createFunction(project, bodyBuilder.toString());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
trait G<T> {
|
||||||
|
fun foo(t : T) : T
|
||||||
|
}
|
||||||
|
|
||||||
|
class GC() : G<Int> {
|
||||||
|
<caret>
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
trait G<T> {
|
||||||
|
fun foo(t : T) : T
|
||||||
|
}
|
||||||
|
|
||||||
|
class GC() : G<Int> {
|
||||||
|
|
||||||
|
override fun foo(t: Int): Int {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -38,9 +38,20 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase {
|
|||||||
doDirectoryTest();
|
doDirectoryTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testGenericMethod() {
|
||||||
|
myFixture.configureByFile("genericMethod.kt");
|
||||||
|
doImplement();
|
||||||
|
myFixture.checkResultByFile("genericMethod.kt.after");
|
||||||
|
}
|
||||||
|
|
||||||
private void doDirectoryTest() {
|
private void doDirectoryTest() {
|
||||||
myFixture.copyDirectoryToProject(getTestName(true), "");
|
myFixture.copyDirectoryToProject(getTestName(true), "");
|
||||||
myFixture.configureFromTempProjectFile("foo/Impl.kt");
|
myFixture.configureFromTempProjectFile("foo/Impl.kt");
|
||||||
|
doImplement();
|
||||||
|
myFixture.checkResultByFile(getTestName(true) + "/foo/Impl.kt.after");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void doImplement() {
|
||||||
final PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset());
|
final PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset());
|
||||||
final JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, JetClassOrObject.class);
|
final JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, JetClassOrObject.class);
|
||||||
final Set<CallableMemberDescriptor> descriptors = ImplementMethodsHandler.collectMethodsToImplement(classOrObject);
|
final Set<CallableMemberDescriptor> descriptors = ImplementMethodsHandler.collectMethodsToImplement(classOrObject);
|
||||||
@@ -52,6 +63,5 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase {
|
|||||||
ImplementMethodsHandler.membersFromDescriptors(descriptors));
|
ImplementMethodsHandler.membersFromDescriptors(descriptors));
|
||||||
}
|
}
|
||||||
}.execute();
|
}.execute();
|
||||||
myFixture.checkResultByFile(getTestName(true) + "/foo/Impl.kt.after");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user