Buggy code:
public abstract class AShaderBase { public static enum DataType { FLOAT ( "float" ) , VEC2 ( "vec2" ) , VEC3 ( "vec3" ) , VEC4 ( "vec4" ) , INT ( "int" ) , IVEC2 ( "ivec2" ) , IVEC3 ( "ivec3" ) , IVEC4 ( "ivec4" ) , BOOL ( "bool" ) , BVEC2 ( "bvec2" ) , BVEC3 ( "bvec3" ) , BVEC4 ( "bvec4" ) , MAT2 ( "mat2" ) , MAT3 ( "mat3" ) , MAT4 ( "mat4" ) , VOID ( "void" ) , SAMPLER1D ( "sampler1D" ) , SAMPLER2D ( "sampler2D" ) , SAMPLER3D ( "sampler3D" ) , SAMPLERCUBE ( "samplerCube" ) , SAMPLER_EXTERNAL_EOS ( "samplerExternalOES" ) , CONSTANT ( "constant" ) ; private String mTypeString ; DataType ( String typeString ) { } public String getTypeString ( ) { } } public static interface IGlobalShaderVar { String getVarString ( ) { } AShaderBase . DataType getDataType ( ) { } } public static enum DefaultShaderVar implements AShaderBase . IGlobalShaderVar { U_MVP_MATRIX ( "uMVPMatrix" , AShaderBase . DataType . MAT4 ) , U_NORMAL_MATRIX ( "uNormalMatrix" , AShaderBase . DataType . MAT3 ) , U_MODEL_MATRIX ( "uModelMatrix" , AShaderBase . DataType . MAT4 ) , U_MODEL_VIEW_MATRIX ( "uModelViewMatrix" , AShaderBase . DataType . MAT4 ) , U_COLOR ( "uColor" , AShaderBase . DataType . VEC4 ) , U_COLOR_INFLUENCE ( "uColorInfluence" , AShaderBase . DataType . FLOAT ) , U_INFLUENCE ( "uInfluence" , AShaderBase . DataType . FLOAT ) , U_REPEAT ( "uRepeat" , AShaderBase . DataType . VEC2 ) , U_OFFSET ( "uOffset" , AShaderBase . DataType . VEC2 ) , U_TIME ( "uTime" , AShaderBase . DataType . FLOAT ) , A_POSITION ( "aPosition" , AShaderBase . DataType . VEC4 ) , A_TEXTURE_COORD ( "aTextureCoord" , AShaderBase . DataType . VEC2 ) , A_NORMAL ( "aNormal" , AShaderBase . DataType . VEC3 ) , A_VERTEX_COLOR ( "aVertexColor" , AShaderBase . DataType . VEC4 ) , V_TEXTURE_COORD ( "vTextureCoord" , AShaderBase . DataType . VEC2 ) , V_CUBE_TEXTURE_COORD ( "vCubeTextureCoord" , AShaderBase . DataType . VEC3 ) , V_NORMAL ( "vNormal" , AShaderBase . DataType . VEC3 ) , V_COLOR ( "vColor" , AShaderBase . DataType . VEC4 ) , V_EYE_DIR ( "vEyeDir" , AShaderBase . DataType . VEC3 ) , G_POSITION ( "gPosition" , AShaderBase . DataType . VEC4 ) , G_NORMAL ( "gNormal" , AShaderBase . DataType . VEC3 ) , G_COLOR ( "gColor" , AShaderBase . DataType . VEC4 ) , G_TEXTURE_COORD ( "gTextureCoord" , AShaderBase . DataType . VEC2 ) , G_SHADOW_VALUE ( "gShadowValue" , AShaderBase . DataType . FLOAT ) , G_SPECULAR_VALUE ( "gSpecularValue" , AShaderBase . DataType . FLOAT ) ; private String mVarString ; private AShaderBase . DataType mDataType ; DefaultShaderVar ( String varString , AShaderBase . DataType dataType ) { } public String getVarString ( ) { } public AShaderBase . DataType getDataType ( ) { } } public static enum Precision { LOWP ( "lowp" ) , HIGHP ( "highp" ) , MEDIUMP ( "mediump" ) ; private String mPrecisionString ; Precision ( String precisionString ) { } public String getPrecisionString ( ) { } } protected int mVarCount ; protected StringBuilder mShaderSB ; protected AShaderBase . ShaderVar getInstanceForDataType ( AShaderBase . DataType dataType ) { } protected AShaderBase . ShaderVar getInstanceForDataType ( String name , AShaderBase . DataType dataType ) { } protected AShaderBase . ShaderVar getReturnTypeForOperation ( AShaderBase . DataType left , AShaderBase . DataType right ) { AShaderBase . ShaderVar out = null ; <START_BUG> if ( left == right ) <END_BUG> out = getInstanceForDataType ( left ) ; else if ( ( left == ( AShaderBase . DataType . IVEC4 ) ) || ( right == ( AShaderBase . DataType . IVEC4 ) ) ) out = getInstanceForDataType ( AShaderBase . DataType . IVEC4 ) ; else if ( ( left == ( AShaderBase . DataType . IVEC3 ) ) || ( right == ( AShaderBase . DataType . IVEC3 ) ) ) out = getInstanceForDataType ( AShaderBase . DataType . IVEC3 ) ; else if ( ( left == ( AShaderBase . DataType . IVEC2 ) ) || ( right == ( AShaderBase . DataType . IVEC2 ) ) ) out = getInstanceForDataType ( AShaderBase . DataType . IVEC2 ) ; else if ( ( left == ( AShaderBase . DataType . VEC4 ) ) || ( right == ( AShaderBase . DataType . VEC4 ) ) ) out = getInstanceForDataType ( AShaderBase . DataType . VEC4 ) ; else if ( ( left == ( AShaderBase . DataType . VEC3 ) ) || ( right == ( AShaderBase . DataType . VEC3 ) ) ) out = getInstanceForDataType ( AShaderBase . DataType . VEC3 ) ; else if ( ( left == ( AShaderBase . DataType . VEC2 ) ) || ( right == ( AShaderBase . DataType . VEC2 ) ) ) out = getInstanceForDataType ( AShaderBase . DataType . VEC2 ) ; else if ( ( left == ( AShaderBase . DataType . MAT4 ) ) || ( right == ( AShaderBase . DataType . MAT4 ) ) ) out = getInstanceForDataType ( AShaderBase . DataType . MAT4 ) ; else if ( ( left == ( AShaderBase . DataType . MAT3 ) ) || ( right == ( AShaderBase . DataType . MAT3 ) ) ) out = getInstanceForDataType ( AShaderBase . DataType . MAT3 ) ; else if ( ( left == ( AShaderBase . DataType . MAT2 ) ) || ( right == ( AShaderBase . DataType . MAT2 ) ) ) out = getInstanceForDataType ( AShaderBase . DataType . MAT2 ) ; else if ( ( left == ( AShaderBase . DataType . FLOAT ) ) || ( right == ( AShaderBase . DataType . FLOAT ) ) ) out = getInstanceForDataType ( AShaderBase . DataType . FLOAT ) ; else out = getInstanceForDataType ( AShaderBase . DataType . INT ) ; return out ; }

Fix:
if ( left != right )