Source:
public Table(Class<?> cls, EntityDictionary dictionary) { if (!dictionary.getBoundClasses().contains(cls)) { throw new IllegalArgumentException( String.format("Table class {%s} is not defined in dictionary.", cls)); } this.name = dictionary.getJsonAliasFor(cls); this.version = EntityDictionary.getModelVersion(cls); String dbConnectionName = ""; Annotation annotation = EntityDictionary.getFirstAnnotation(cls, Arrays.asList(FromTable.class, FromSubquery.class)); if (annotation instanceof FromTable) { dbConnectionName = ((FromTable) annotation).dbConnectionName(); } else if (annotation instanceof FromSubquery) { dbConnectionName = ((FromSubquery) annotation).dbConnectionName(); } if (this.version != null && ! this.version.isEmpty()) { this.id = this.name + "." + this.version; } else { this.id = this.name; } this.dbConnectionName = dbConnectionName; this.columns = constructColumns(cls, dictionary); this.columnMap = this.columns.stream().collect(Collectors.toMap(Column::getName, Function.identity())); this.metrics = this.columns.stream() .filter(col -> col instanceof Metric) .map(Metric.class::cast) .collect(Collectors.toSet()); this.dimensions = this.columns.stream() .filter(col -> !(col instanceof Metric || col instanceof TimeDimension)) .map(Dimension.class::cast) .collect(Collectors.toSet()); this.timeDimensions = this.columns.stream() .filter(col -> (col instanceof TimeDimension)) .map(TimeDimension.class::cast) .collect(Collectors.toSet()); TableMeta meta = cls.getAnnotation(TableMeta.class); if (meta != null) { this.description = meta.description(); this.category = meta.category(); this.requiredFilter = meta.filterTemplate(); this.tags = new HashSet<>(Arrays.asList(meta.tags())); } else { this.description = null; this.category = null; this.requiredFilter = null; this.tags = new HashSet<>(); } Cardinality cardinality = dictionary.getAnnotation(cls, Cardinality.class); if (cardinality != null) { this.cardinality = cardinality.size(); } else { this.cardinality = null; } }

Target:
public Table(Class<?> cls, EntityDictionary dictionary) { if (!dictionary.getBoundClasses().contains(cls)) { throw new IllegalArgumentException( String.format("Table class {%s} is not defined in dictionary.", cls)); } this.name = dictionary.getJsonAliasFor(cls); this.version = EntityDictionary.getModelVersion(cls); this.alias = TypeHelper.getTypeAlias(cls); String dbConnectionName = ""; Annotation annotation = EntityDictionary.getFirstAnnotation(cls, Arrays.asList(FromTable.class, FromSubquery.class)); if (annotation instanceof FromTable) { dbConnectionName = ((FromTable) annotation).dbConnectionName(); } else if (annotation instanceof FromSubquery) { dbConnectionName = ((FromSubquery) annotation).dbConnectionName(); } this.id = this.name; this.dbConnectionName = dbConnectionName; this.columns = constructColumns(cls, dictionary); this.columnMap = this.columns.stream().collect(Collectors.toMap(Column::getName, Function.identity())); this.metrics = this.columns.stream() .filter(col -> col instanceof Metric) .map(Metric.class::cast) .collect(Collectors.toSet()); this.dimensions = this.columns.stream() .filter(col -> !(col instanceof Metric || col instanceof TimeDimension)) .map(Dimension.class::cast) .collect(Collectors.toSet()); this.timeDimensions = this.columns.stream() .filter(col -> (col instanceof TimeDimension)) .map(TimeDimension.class::cast) .collect(Collectors.toSet()); TableMeta meta = cls.getAnnotation(TableMeta.class); if (meta != null) { this.description = meta.description(); this.category = meta.category(); this.requiredFilter = meta.filterTemplate(); this.tags = new HashSet<>(Arrays.asList(meta.tags())); } else { this.description = null; this.category = null; this.requiredFilter = null; this.tags = new HashSet<>(); } Cardinality cardinality = dictionary.getAnnotation(cls, Cardinality.class); if (cardinality != null) { this.cardinality = cardinality.size(); } else { this.cardinality = null; } }