handle parameters in implement members

This commit is contained in:
Dmitry Jemerov
2011-11-04 18:10:11 +01:00
parent 8f15eea9c5
commit 7714e850b9
6 changed files with 44 additions and 8 deletions
@@ -13,13 +13,11 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.MutableClassDescriptor;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.OverrideResolver;
import org.jetbrains.jet.lang.types.JetStandardLibrary;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade;
@@ -105,9 +103,21 @@ public class ImplementMethodsHandler implements LanguageCodeInsightActionHandler
StringBuilder bodyBuilder = new StringBuilder("override fun ");
bodyBuilder.append(descriptor.getName());
bodyBuilder.append("(");
boolean first = true;
for (ValueParameterDescriptor parameterDescriptor : descriptor.getValueParameters()) {
if (!first) {
bodyBuilder.append(",");
}
first = false;
bodyBuilder.append(parameterDescriptor.getName());
bodyBuilder.append(": ");
bodyBuilder.append(parameterDescriptor.getOutType().toString());
}
bodyBuilder.append(")");
final JetType returnType = descriptor.getReturnType();
bodyBuilder.append(": ").append(returnType.toString());
if (!returnType.equals(JetStandardLibrary.getJetStandardLibrary(project).getTuple0Type())) {
bodyBuilder.append(": ").append(returnType.toString());
}
bodyBuilder.append("{");
if (returnType.isNullable()) {
bodyBuilder.append("return null");
@@ -27,6 +27,8 @@ public class JetFormattingModelBuilder implements FormattingModelBuilder {
private static SpacingBuilder createSpacingBuilder(CodeStyleSettings settings) {
return new SpacingBuilder(settings)
.before(COMMA).spaceIf(settings.SPACE_BEFORE_COMMA)
.after(COMMA).spaceIf(settings.SPACE_AFTER_COMMA)
.beforeInside(BLOCK, FUN).spaceIf(settings.SPACE_BEFORE_METHOD_LBRACE)
.afterInside(LBRACE, BLOCK).lineBreakInCode()
.beforeInside(RBRACE, CLASS_BODY).lineBreakInCode()
@@ -0,0 +1,5 @@
import foo.Intf
class Impl(): Intf {
<caret>
}
@@ -0,0 +1,7 @@
import foo.Intf
class Impl(): Intf {
override fun fooBar(i: Int, s: Array<String?>?, foo: Any?) {
}
}
@@ -0,0 +1,5 @@
package foo;
interface Intf {
void fooBar(int i, String[] s, Object foo);
}
@@ -31,7 +31,15 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase {
}
public void testJavaInterfaceMethod() {
myFixture.copyDirectoryToProject("javaInterfaceMethod", "");
doDirectoryTest();
}
public void testJavaParameters() {
doDirectoryTest();
}
private void doDirectoryTest() {
myFixture.copyDirectoryToProject(getTestName(true), "");
myFixture.configureFromTempProjectFile("foo/Impl.kt");
final PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset());
final JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, JetClassOrObject.class);
@@ -44,7 +52,6 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase {
ImplementMethodsHandler.membersFromDescriptors(descriptors));
}
}.execute();
myFixture.checkResultByFile("javaInterfaceMethod/foo/Impl.kt.after");
myFixture.checkResultByFile(getTestName(true) + "/foo/Impl.kt.after");
}
}