All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.wangjiegulu.rapidooo.library.compiler.part.statement.parcelable.ParcelablePrimitiveStatementBrew Maven / Gradle / Ivy

package com.wangjiegulu.rapidooo.library.compiler.part.statement.parcelable;

import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeName;
import com.wangjiegulu.rapidooo.library.compiler.oooentry.type.OOOTypeEntry;
import com.wangjiegulu.rapidooo.library.compiler.part.statement.contact.IParcelableStatementBrew;
import com.wangjiegulu.rapidooo.library.compiler.util.TextUtil;

import java.util.HashMap;

/**
 * Author: wangjie Email: [email protected] Date: 2019-06-17.
 */
public class ParcelablePrimitiveStatementBrew implements IParcelableStatementBrew {
    private HashMap primitiveMap = new HashMap<>();

    public ParcelablePrimitiveStatementBrew() {
        primitiveMap.put(TypeName.DOUBLE, "double");
        primitiveMap.put(TypeName.FLOAT, "float");
        primitiveMap.put(TypeName.BYTE, "byte");
        primitiveMap.put(TypeName.INT, "int");
        primitiveMap.put(TypeName.BOOLEAN, "boolean");
        primitiveMap.put(TypeName.SHORT, "short");
        primitiveMap.put(TypeName.CHAR, "char");
        primitiveMap.put(TypeName.LONG, "long");
    }

    @Override
    public boolean match(OOOTypeEntry typeEntry) {
        TypeName fieldTypeName = typeEntry.getTypeName();
        return fieldTypeName.isPrimitive() && primitiveMap.containsKey(fieldTypeName);
    }

    @Override
    public void read(MethodSpec.Builder methodBuilder, String statementPrefix, Object[] statementPrefixTypes, String fieldCode, OOOTypeEntry oooTypeEntry, String fieldName) {
        TypeName fieldTypeName = oooTypeEntry.getTypeName();
        String name = primitiveMap.get(fieldTypeName);
        if (TypeName.BOOLEAN == fieldTypeName) {
            methodBuilder.addStatement(statementPrefix + fieldCode + " = parcel.readByte() != 0", statementPrefixTypes);
        } else if(TypeName.SHORT == fieldTypeName){
            methodBuilder.addStatement(statementPrefix + fieldCode + " = (short) parcel.readInt()", statementPrefixTypes);
        } else if(TypeName.CHAR == fieldTypeName){
            methodBuilder.addStatement(statementPrefix + fieldCode + " = (char) parcel.readInt()", statementPrefixTypes);
        } else {
            methodBuilder.addStatement(statementPrefix + fieldCode + " = parcel.read" + TextUtil.firstCharUpper(name) + "()", statementPrefixTypes);
        }
    }

    @Override
    public void write(MethodSpec.Builder methodBuilder, String statementPrefix, Object[] statementPrefixTypes, String fieldCode, OOOTypeEntry oooTypeEntry, String fieldName) {
        TypeName fieldTypeName = oooTypeEntry.getTypeName();
        String name = primitiveMap.get(fieldTypeName);

        if (TypeName.SHORT == fieldTypeName ||
                TypeName.CHAR == fieldTypeName
        ) {
            methodBuilder.addStatement(statementPrefix + "dest.writeInt(" + fieldCode + ")", statementPrefixTypes);
        } else if (TypeName.BOOLEAN == fieldTypeName) {
            methodBuilder.addStatement(statementPrefix + "dest.writeByte(" + fieldCode + " ? (byte) 1 : (byte) 0)", statementPrefixTypes);
        } else {
            methodBuilder.addStatement(statementPrefix + "dest.write" + TextUtil.firstCharUpper(name) + "(" + fieldCode + ")", statementPrefixTypes);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy