handle parameters in implement members
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user