public T switchAttribute(AttributeIfc attributeIfc) { this.lastAttribute = attributeIfc; OpenType<?> openType = attributeIfc.getOpenType(); if (attributeIfc instanceof JavaAttribute) { try { if (((JavaAttribute) attributeIfc).getTypeDefinition() instanceof BinaryTypeDefinition) { return caseJavaBinaryAttribute(openType); } else if (((JavaAttribute) attributeIfc).isUnion()) { return caseJavaUnionAttribute(openType); } else return caseJavaAttribute(openType); } catch (UnknownOpenTypeException e) { throw getIllegalArgumentException(attributeIfc); } } else if (attributeIfc instanceof DependencyAttribute) { return caseDependencyAttribute(((DependencyAttribute) attributeIfc).getOpenType()); } else if (attributeIfc instanceof ListAttribute) { return caseListAttribute((ArrayType<?>) openType); } else if (attributeIfc instanceof ListDependenciesAttribute) { return caseListDependeciesAttribute((ArrayType<?>) openType); } else if (attributeIfc instanceof TOAttribute) { return caseTOAttribute(((TOAttribute) attributeIfc).getOpenType()); } throw getIllegalArgumentException(attributeIfc); }
private IllegalArgumentException getIllegalArgumentException(AttributeIfc attributeIfc) { return new IllegalArgumentException( "Unknown attribute type " + attributeIfc.getClass() + ", " + attributeIfc + " with open type:" + attributeIfc.getOpenType()); }