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.PsiFile;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.descriptors.*;
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.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.OverrideResolver; 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.lang.types.JetType;
import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade; import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade;
@@ -105,9 +103,21 @@ public class ImplementMethodsHandler implements LanguageCodeInsightActionHandler
StringBuilder bodyBuilder = new StringBuilder("override fun "); StringBuilder bodyBuilder = new StringBuilder("override fun ");
bodyBuilder.append(descriptor.getName()); bodyBuilder.append(descriptor.getName());
bodyBuilder.append("("); 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(")"); bodyBuilder.append(")");
final JetType returnType = descriptor.getReturnType(); final JetType returnType = descriptor.getReturnType();
bodyBuilder.append(": ").append(returnType.toString()); if (!returnType.equals(JetStandardLibrary.getJetStandardLibrary(project).getTuple0Type())) {
bodyBuilder.append(": ").append(returnType.toString());
}
bodyBuilder.append("{"); bodyBuilder.append("{");
if (returnType.isNullable()) { if (returnType.isNullable()) {
bodyBuilder.append("return null"); bodyBuilder.append("return null");
@@ -27,6 +27,8 @@ public class JetFormattingModelBuilder implements FormattingModelBuilder {
private static SpacingBuilder createSpacingBuilder(CodeStyleSettings settings) { private static SpacingBuilder createSpacingBuilder(CodeStyleSettings settings) {
return new SpacingBuilder(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) .beforeInside(BLOCK, FUN).spaceIf(settings.SPACE_BEFORE_METHOD_LBRACE)
.afterInside(LBRACE, BLOCK).lineBreakInCode() .afterInside(LBRACE, BLOCK).lineBreakInCode()
.beforeInside(RBRACE, CLASS_BODY).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() { public void testJavaInterfaceMethod() {
myFixture.copyDirectoryToProject("javaInterfaceMethod", ""); doDirectoryTest();
}
public void testJavaParameters() {
doDirectoryTest();
}
private void doDirectoryTest() {
myFixture.copyDirectoryToProject(getTestName(true), "");
myFixture.configureFromTempProjectFile("foo/Impl.kt"); myFixture.configureFromTempProjectFile("foo/Impl.kt");
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);
@@ -44,7 +52,6 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase {
ImplementMethodsHandler.membersFromDescriptors(descriptors)); ImplementMethodsHandler.membersFromDescriptors(descriptors));
} }
}.execute(); }.execute();
myFixture.checkResultByFile("javaInterfaceMethod/foo/Impl.kt.after"); myFixture.checkResultByFile(getTestName(true) + "/foo/Impl.kt.after");
} }
} }