implement works for properties
This commit is contained in:
@@ -54,7 +54,7 @@ public class JetPsiFactory {
|
||||
return createProperty(project, text);
|
||||
}
|
||||
|
||||
private static JetProperty createProperty(Project project, String text) {
|
||||
public static JetProperty createProperty(Project project, String text) {
|
||||
return createDeclaration(project, text, JetProperty.class);
|
||||
}
|
||||
|
||||
|
||||
@@ -96,9 +96,32 @@ public class ImplementMethodsHandler implements LanguageCodeInsightActionHandler
|
||||
JetElement target = overrideFunction(project, (FunctionDescriptor) descriptor);
|
||||
body.addBefore(target, body.getRBrace());
|
||||
}
|
||||
else if (descriptor instanceof PropertyDescriptor) {
|
||||
JetElement target = overrideProperty(project, (PropertyDescriptor) descriptor);
|
||||
body.addBefore(target, body.getRBrace());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static JetElement overrideProperty(Project project, PropertyDescriptor descriptor) {
|
||||
StringBuilder bodyBuilder = new StringBuilder("override ");
|
||||
if (descriptor.isVar()) {
|
||||
bodyBuilder.append("var ");
|
||||
}
|
||||
else {
|
||||
bodyBuilder.append("val ");
|
||||
}
|
||||
bodyBuilder.append(descriptor.getName()).append(": ").append(descriptor.getOutType());
|
||||
String initializer = defaultInitializer(descriptor.getOutType(), JetStandardLibrary.getJetStandardLibrary(project));
|
||||
if (initializer != null) {
|
||||
bodyBuilder.append("=").append(initializer);
|
||||
}
|
||||
else {
|
||||
bodyBuilder.append("= ?");
|
||||
}
|
||||
return JetPsiFactory.createProperty(project, bodyBuilder.toString());
|
||||
}
|
||||
|
||||
private static JetElement overrideFunction(Project project, FunctionDescriptor descriptor) {
|
||||
StringBuilder bodyBuilder = new StringBuilder("override fun ");
|
||||
bodyBuilder.append(descriptor.getName());
|
||||
@@ -120,19 +143,27 @@ public class ImplementMethodsHandler implements LanguageCodeInsightActionHandler
|
||||
bodyBuilder.append(": ").append(returnType.toString());
|
||||
}
|
||||
bodyBuilder.append("{");
|
||||
final String initializer = defaultInitializer(returnType, stdlib);
|
||||
if (initializer != null) {
|
||||
bodyBuilder.append("return " ).append(initializer);
|
||||
}
|
||||
bodyBuilder.append("}");
|
||||
return JetPsiFactory.createFunction(project, bodyBuilder.toString());
|
||||
}
|
||||
|
||||
private static String defaultInitializer(JetType returnType, JetStandardLibrary stdlib) {
|
||||
if (returnType.isNullable()) {
|
||||
bodyBuilder.append("return null");
|
||||
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");
|
||||
return "0";
|
||||
}
|
||||
else if (returnType.equals(stdlib.getBooleanType())) {
|
||||
bodyBuilder.append("return false");
|
||||
return "false";
|
||||
}
|
||||
bodyBuilder.append("}");
|
||||
return JetPsiFactory.createFunction(project, bodyBuilder.toString());
|
||||
return null;
|
||||
}
|
||||
|
||||
private static MemberChooser<DescriptorClassMember> showOverrideImplementChooser(Project project,
|
||||
|
||||
@@ -29,6 +29,7 @@ public class JetFormattingModelBuilder implements FormattingModelBuilder {
|
||||
return new SpacingBuilder(settings)
|
||||
.before(COMMA).spaceIf(settings.SPACE_BEFORE_COMMA)
|
||||
.after(COMMA).spaceIf(settings.SPACE_AFTER_COMMA)
|
||||
.around(EQ).spaceIf(settings.SPACE_AROUND_ASSIGNMENT_OPERATORS)
|
||||
.beforeInside(BLOCK, FUN).spaceIf(settings.SPACE_BEFORE_METHOD_LBRACE)
|
||||
.afterInside(LBRACE, BLOCK).lineBreakInCode()
|
||||
.beforeInside(RBRACE, CLASS_BODY).lineBreakInCode()
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
trait T {
|
||||
val v : Int
|
||||
}
|
||||
|
||||
class GC() : T {
|
||||
<caret>
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
trait T {
|
||||
val v : Int
|
||||
}
|
||||
|
||||
class GC() : T {
|
||||
|
||||
override val v: Int = 0
|
||||
}
|
||||
@@ -39,9 +39,17 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase {
|
||||
}
|
||||
|
||||
public void testGenericMethod() {
|
||||
myFixture.configureByFile("genericMethod.kt");
|
||||
doFileTest();
|
||||
}
|
||||
|
||||
public void testProperty() {
|
||||
doFileTest();
|
||||
}
|
||||
|
||||
private void doFileTest() {
|
||||
myFixture.configureByFile(getTestName(true) + ".kt");
|
||||
doImplement();
|
||||
myFixture.checkResultByFile("genericMethod.kt.after");
|
||||
myFixture.checkResultByFile(getTestName(true) + ".kt.after");
|
||||
}
|
||||
|
||||
private void doDirectoryTest() {
|
||||
|
||||
Reference in New Issue
Block a user