Skip to content

Commit bdbbb21

Browse files
committed
Fix issues
1 parent 3efd75f commit bdbbb21

18 files changed

+129
-79
lines changed

META-INF/plugin.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<idea-plugin version="2">
22
<id>cn.nekocode.plugin.parcelablegenerator</id>
33
<name>Parcelable Code Generator(for kotlin)</name>
4-
<version>0.6.2</version>
4+
<version>0.7.0</version>
55
<vendor email="[email protected]" url="https://github.com/nekocode/android-parcelable-intellij-plugin-kotlin">nekocode</vendor>
66

77
<description><![CDATA[

src/cn/nekocode/plugin/parcelablegenerator/CodeGenerator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,12 @@ private String generateConstructor(List<TypeSerializer> typeSerializers) {
6565
StringBuilder sb = new StringBuilder("constructor(source: Parcel) : this(");
6666
String content = "";
6767
for(TypeSerializer typeSerializer : typeSerializers) {
68-
content += typeSerializer.readValue() + ",";
68+
content += "\n" + typeSerializer.generateReadValue() + ",";
6969
}
7070
if(content.length() > 0) {
7171
content = content.substring(0, content.length() - 1);
7272
}
73-
sb.append(content).append(")");
73+
sb.append(content).append("\n)");
7474

7575
return sb.toString();
7676
}
@@ -82,7 +82,7 @@ private String generateDescribeContents() {
8282
private String generateWriteToParcel(List<TypeSerializer> typeSerializers) {
8383
StringBuilder sb = new StringBuilder("override fun writeToParcel(dest: Parcel?, flags: Int) {");
8484
for(TypeSerializer typeSerializer : typeSerializers) {
85-
sb.append(typeSerializer.writeValue()).append("\n");
85+
sb.append(typeSerializer.generateWriteValue()).append("\n");
8686
}
8787
sb.append("}");
8888

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/BooleanSerializer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public BooleanSerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
29+
public String generateReadValue() {
3030
return "1.equals(source.readInt())";
3131
}
3232

33-
public String writeValue() {
34-
return "dest?.writeInt((if(" + field.getName() + ") 1 else 0))";
33+
public String generateWriteValue() {
34+
return "dest?.writeInt((if(" + getFieldName() + ") 1 else 0))";
3535
}
3636
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/CharSerializer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public CharSerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
29+
public String generateReadValue() {
3030
return "source.readByte().toChar()";
3131
}
3232

33-
public String writeValue() {
34-
return "dest?.writeByte(" + field.getName() + ".toByte())";
33+
public String generateWriteValue() {
34+
return "dest?.writeByte(" + getFieldName() + ".toByte())";
3535
}
3636
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/EnumSerializer.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,19 @@ public EnumSerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
30-
return field.getType() + ".values()[source.readInt()]";
29+
public String generateReadValue() {
30+
if (!isTypeNullable()) {
31+
return getNoneNullType() + ".values()[source.readInt()]";
32+
} else {
33+
return "source.readValue(Int::class.java.classLoader)?.let { Enum.values()[it as Int] }";
34+
}
3135
}
3236

33-
public String writeValue() {
34-
return "dest?.writeInt(" + field.getName() + ".ordinal)";
37+
public String generateWriteValue() {
38+
if (!isTypeNullable()) {
39+
return "dest?.writeInt(" + getFieldName() + ".ordinal)";
40+
} else {
41+
return "dest?.writeValue(" + getFieldName() + (isTypeNullable() ? "?" : "") + ".ordinal)";
42+
}
3543
}
3644
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/NormalArraySerializer.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,11 @@ public NormalArraySerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
30-
String typeProjection = field.getType().getArguments().get(0).getType().toString();
31-
return "source.create" + typeProjection + "Array().toTypedArray()";
29+
public String generateReadValue() {
30+
return "source.create" + getNoneNullProjectionType() + "Array().toTypedArray()";
3231
}
3332

34-
public String writeValue() {
35-
String typeProjection= field.getType().getArguments().get(0).getType().toString();
36-
return "dest?.write" + typeProjection + "Array(" + field.getName() + ".to" + typeProjection + "Array())";
33+
public String generateWriteValue() {
34+
return "dest?.write" + getNoneNullProjectionType() + "Array(" + getFieldName() + ".to" + getNoneNullProjectionType() + "Array())";
3735
}
3836
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/NormalListSerializer.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,11 @@ public NormalListSerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
30-
String typeProjection = field.getType().getArguments().get(0).getType().toString();
31-
return "ArrayList<" + typeProjection + ">().apply{ source.readList(this, " + typeProjection + "::class.java.classLoader) }";
29+
public String generateReadValue() {
30+
return "ArrayList<" + getProjectionType() + ">().apply{ source.readList(this, " + getNoneNullProjectionType() + "::class.java.classLoader) }";
3231
}
3332

34-
public String writeValue() {
35-
return "dest?.writeList(" + field.getName() + ")";
33+
public String generateWriteValue() {
34+
return "dest?.writeList(" + getFieldName() + ")";
3635
}
3736
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/NormalSerializer.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public NormalSerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
30-
return "source.read" + field.getType() + "()";
29+
public String generateReadValue() {
30+
return "source.read" + getNoneNullType() + "()";
3131
}
3232

33-
public String writeValue() {
34-
return "dest?.write" + field.getType() + "(" + field.getName() + ")";
33+
public String generateWriteValue() {
34+
return "dest?.write" + getNoneNullType() + "(" + getFieldName() + ")";
3535
}
3636
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/NullableArraySerializer.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,11 @@ public NullableArraySerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
30-
String type = field.getType().toString();
31-
String typeProjection = field.getType().getArguments().get(0).getType().toString();
32-
return "source.readArray(" + typeProjection.substring(0, typeProjection.length() -1) + "::class.java.classLoader) as " + type;
29+
public String generateReadValue() {
30+
return "source.readArray(" + getNoneNullProjectionType() + "::class.java.classLoader) as " + getType();
3331
}
3432

35-
public String writeValue() {
36-
return "dest?.writeArray(" + field.getName() + ")";
33+
public String generateWriteValue() {
34+
return "dest?.writeArray(" + getFieldName() + ")";
3735
}
3836
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/NullableStringSerializer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public NullableStringSerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
29+
public String generateReadValue() {
3030
return "source.readString()";
3131
}
3232

33-
public String writeValue() {
34-
return "dest?.writeString(" + field.getName() + ")";
33+
public String generateWriteValue() {
34+
return "dest?.writeString(" + getFieldName() + ")";
3535
}
3636
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/NullableValueSerializer.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,11 @@ public NullableValueSerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
30-
String type = field.getType().toString();
31-
return "source.readValue(" + type.substring(0, type.length() - 1) + "::class.java.classLoader) as " + type;
29+
public String generateReadValue() {
30+
return "source.readValue(" + getNoneNullType() + "::class.java.classLoader) as " + getType();
3231
}
3332

34-
public String writeValue() {
35-
return "dest?.writeValue(" + field.getName() + ")";
33+
public String generateWriteValue() {
34+
return "dest?.writeValue(" + getFieldName() + ")";
3635
}
3736
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/OriginalArraySerializer.java

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,19 @@ public OriginalArraySerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
30-
String typeProjection;
31-
if(field.getType().toString().startsWith("Array")) {
32-
typeProjection = field.getType().getArguments().get(0).getType().toString();
29+
public String generateReadValue() {
30+
if (getProjectionType() == null) {
31+
return "source.create" + getNoneNullType() + "()";
3332
} else {
34-
typeProjection = field.getType().toString();
35-
typeProjection = typeProjection.substring(0, typeProjection.length()-5);
33+
return "source.create" + getNoneNullProjectionType() + "Array()";
3634
}
37-
return "source.create" + typeProjection + "Array()";
3835
}
3936

40-
public String writeValue() {
41-
String typeProjection;
42-
if(field.getType().toString().startsWith("Array")) {
43-
typeProjection = field.getType().getArguments().get(0).getType().toString();
37+
public String generateWriteValue() {
38+
if (getProjectionType() == null) {
39+
return "dest?.write" + getNoneNullType() + "(" + getFieldName() + ")";
4440
} else {
45-
typeProjection = field.getType().toString();
46-
typeProjection = typeProjection.substring(0, typeProjection.length()-5);
41+
return "dest?.write" + getNoneNullProjectionType() + "Array(" + getFieldName() + ")";
4742
}
48-
return "dest?.write" + typeProjection + "Array(" + field.getName() + ")";
4943
}
5044
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/ParcelableArraySerializer.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public ParcelableArraySerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
30-
return "source.readParcelableArray(" + field.getType().getArguments().get(0).getType() + "::class.java.classLoader) as " + field.getType();
29+
public String generateReadValue() {
30+
return "source.readParcelableArray(" + getNoneNullProjectionType() + "::class.java.classLoader) as " + getType();
3131
}
3232

33-
public String writeValue() {
34-
return "dest?.writeParcelableArray(" + field.getName() + ", 0)";
33+
public String generateWriteValue() {
34+
return "dest?.writeParcelableArray(" + getFieldName()+ ", 0)";
3535
}
3636
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/ParcelableListSerializer.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public ParcelableListSerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
30-
return "source.createTypedArrayList(" + field.getType().getArguments().get(0).getType() + ".CREATOR)";
29+
public String generateReadValue() {
30+
return "source.createTypedArrayList(" + getNoneNullProjectionType() + ".CREATOR)";
3131
}
3232

33-
public String writeValue() {
34-
return "dest?.writeTypedList(" + field.getName() + ")";
33+
public String generateWriteValue() {
34+
return "dest?.writeTypedList(" + getFieldName() + ")";
3535
}
3636
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/ParcelableObjectSerializer.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public ParcelableObjectSerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
30-
return "source.readParcelable<" + field.getType() + ">(" + field.getType() + "::class.java.classLoader)";
29+
public String generateReadValue() {
30+
return "source.readParcelable<" + getType() + ">(" + getNoneNullType() + "::class.java.classLoader)";
3131
}
3232

33-
public String writeValue() {
34-
return "dest?.writeParcelable(" + field.getName() + ", 0)";
33+
public String generateWriteValue() {
34+
return "dest?.writeParcelable(" + getFieldName() + ", 0)";
3535
}
3636
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/SerializableObjectSerializer.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public SerializableObjectSerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
30-
return "source.readSerializable() as " + field.getType();
29+
public String generateReadValue() {
30+
return "source.readSerializable() as " + getType();
3131
}
3232

33-
public String writeValue() {
34-
return "dest?.writeSerializable(" + field.getName() + ")";
33+
public String generateWriteValue() {
34+
return "dest?.writeSerializable(" + getFieldName() + ")";
3535
}
3636
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/StringListSerializer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public StringListSerializer(ValueParameterDescriptor field) {
2626
super(field);
2727
}
2828

29-
public String readValue() {
29+
public String generateReadValue() {
3030
return "source.createStringArrayList()";
3131
}
3232

33-
public String writeValue() {
34-
return "dest?.writeStringList(" + field.getName() + ")";
33+
public String generateWriteValue() {
34+
return "dest?.writeStringList(" + getFieldName() + ")";
3535
}
3636
}

src/cn/nekocode/plugin/parcelablegenerator/typeserializers/TypeSerializer.java

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,67 @@
2121
* Created by nekocode on 2016/2/2.
2222
*/
2323
public abstract class TypeSerializer {
24-
protected final ValueParameterDescriptor field;
24+
private final ValueParameterDescriptor field;
25+
private final String fieldName;
26+
private final String type;
27+
private final String noneNullType;
28+
private final boolean isTypeNullable;
29+
private final String projectionType;
30+
private final boolean isProjectionTypeNullable;
31+
private final String noneNullProjectionType;
2532

2633
public TypeSerializer(ValueParameterDescriptor field) {
2734
this.field = field;
35+
fieldName = field.getName().toString();
36+
type = field.getType().toString();
37+
isTypeNullable = type.endsWith("?");
38+
noneNullType = isTypeNullable ? type.substring(0, type.length() - 1) : type;
39+
if (field.getType().getArguments().size() > 0) {
40+
projectionType = field.getType().getArguments().get(0).getType().toString();
41+
isProjectionTypeNullable = projectionType.endsWith("?");
42+
noneNullProjectionType = isProjectionTypeNullable ?
43+
projectionType.substring(0, projectionType.length() - 1) : projectionType;
44+
45+
} else {
46+
projectionType = null;
47+
isProjectionTypeNullable = true;
48+
noneNullProjectionType = null;
49+
}
2850
}
2951

30-
abstract public String readValue();
52+
abstract public String generateReadValue();
53+
54+
abstract public String generateWriteValue();
3155

32-
abstract public String writeValue();
56+
public ValueParameterDescriptor getField() {
57+
return field;
58+
}
59+
60+
public String getFieldName() {
61+
return fieldName;
62+
}
63+
64+
public String getType() {
65+
return type;
66+
}
67+
68+
public String getNoneNullType() {
69+
return noneNullType;
70+
}
71+
72+
public boolean isTypeNullable() {
73+
return isTypeNullable;
74+
}
75+
76+
public String getProjectionType() {
77+
return projectionType;
78+
}
79+
80+
public boolean isProjectionTypeNullable() {
81+
return isProjectionTypeNullable;
82+
}
83+
84+
public String getNoneNullProjectionType() {
85+
return noneNullProjectionType;
86+
}
3387
}

0 commit comments

Comments
 (0)