You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/11/24 08:11:06 UTC
[16/19] ignite git commit: ignite-1.5 Reworked code generation in
order to avoid compiler error: "java: code too large".
ignite-1.5 Reworked code generation in order to avoid compiler error: "java: code too large".
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/fe537533
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/fe537533
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/fe537533
Branch: refs/heads/ignite-sql-cache-stmt
Commit: fe53753368b001ea2c3d568f77b7f2b03c937bb9
Parents: d71f612
Author: AKuznetsov <ak...@gridgain.com>
Authored: Mon Nov 23 22:06:37 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Mon Nov 23 22:06:37 2015 +0700
----------------------------------------------------------------------
.../ignite/schema/generator/CodeGenerator.java | 185 +++++++++----------
1 file changed, 91 insertions(+), 94 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/fe537533/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java
----------------------------------------------------------------------
diff --git a/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java b/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java
index 283ccc1..92167e5 100644
--- a/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java
+++ b/modules/schema-import/src/main/java/org/apache/ignite/schema/generator/CodeGenerator.java
@@ -71,11 +71,11 @@ public class CodeGenerator {
"void", "volatile", "while"
));
- /** java.lang.* */
- private static final String JAVA_LANG_PKG = "java.lang.";
+ /** java.lang.* */
+ private static final String JAVA_LANG_PKG = "java.lang.";
- /** java.util.* */
- private static final String JAVA_UTIL_PKG = "java.util.";
+ /** java.util.* */
+ private static final String JAVA_UTIL_PKG = "java.util.";
/** Regexp to validate java identifier. */
private static final Pattern VALID_JAVA_IDENTIFIER =
@@ -547,43 +547,15 @@ public class CodeGenerator {
if (javaTypeName.startsWith(JAVA_LANG_PKG))
javaTypeName = javaTypeName.substring(JAVA_LANG_PKG.length());
- else if (javaTypeName.startsWith(JAVA_UTIL_PKG))
+ else if (javaTypeName.startsWith(JAVA_UTIL_PKG))
javaTypeName = javaTypeName.substring(JAVA_UTIL_PKG.length());
add2(src, owner + ".add(new JdbcTypeField(Types." + field.dbTypeName() + ", \"" + field.dbName() + "\", " +
- javaTypeName + ".class, \"" + field.javaName() + "\"));");
+ javaTypeName + ".class, \"" + field.javaName() + "\"));");
}
}
/**
- * Add query fields.
- *
- * @param src Source code lines.
- * @param fields List of fields to add.
- * @param comment Commentary text.
- * @param first {@code true} if variable should be declared.
- * @return {@code false} if variable was declared.
- */
- private static boolean addQueryFields(Collection<String> src, Collection<PojoField> fields, String comment,
- boolean first) {
- if (fields.isEmpty())
- return first;
-
- add2(src, comment);
- add2(src, (first ? "LinkedHashMap<String, String> " : "") + "fields = new LinkedHashMap<>();");
- add0(src, "");
-
- for (PojoField field : fields)
- add2(src, "fields.put(\"" + field.javaName() + "\", \"" + javaTypeName(field) + "\");");
-
- add0(src, "");
- add2(src, "qryEntity.setFields(fields);");
- add0(src, "");
-
- return false;
- }
-
- /**
* Generate java snippet for cache configuration with JDBC store and types metadata.
*
* @param pojos POJO descriptors.
@@ -612,39 +584,23 @@ public class CodeGenerator {
Collection<String> src = new ArrayList<>(256);
header(src, pkg, "java.sql.*;java.util.*;" +
- "org.apache.ignite.cache.*;org.apache.ignite.cache.store.jdbc.*;" +
- "org.apache.ignite.configuration.*;" + pkg + ".*",
+ "org.apache.ignite.cache.*;org.apache.ignite.cache.store.jdbc.*;" +
+ "org.apache.ignite.configuration.*",
"CacheConfig", "CacheConfig");
- add1(src, "/**");
- add1(src, "* Configure cache.");
- add1(src, "*");
- add1(src, "* @param cacheName Cache name.");
- add1(src, "* @param storeFactory Cache store factory.");
- add1(src, "*/");
- add1(src, "public static <K, V> CacheConfiguration<K, V> cache(String cacheName," +
- " CacheJdbcPojoStoreFactory<K, V> storeFactory) {");
- add2(src, "if (storeFactory == null)");
- add3(src, " throw new IllegalArgumentException(\"Cache store factory cannot be null.\");");
- add0(src, "");
- add2(src, "CacheConfiguration<K, V> ccfg = new CacheConfiguration<>(cacheName);");
- add0(src, "");
- add2(src, "ccfg.setCacheStoreFactory(storeFactory);");
- add2(src, "ccfg.setReadThrough(true);");
- add2(src, "ccfg.setWriteThrough(true);");
- add0(src, "");
-
- add2(src, "// Configure JDBC types. ");
- add2(src, "Collection<JdbcType> jdbcTypes = new ArrayList<>();");
- add0(src, "");
-
- boolean first = true;
-
+ // Generate methods for each type in order to avoid compiler error "java: code too large".
for (PojoDescriptor pojo : pojos) {
String tbl = pojo.table();
+ String valClsName = pojo.valueClassName();
- add2(src, "// " + tbl + ".");
- add2(src, (first ? "JdbcType " : "") + "jdbcType = new JdbcType();");
+ add1(src, "/**");
+ add1(src, "* Create JDBC type for " + tbl + ".");
+ add1(src, "*");
+ add1(src, "* @param cacheName Cache name.");
+ add1(src, "*/");
+ add1(src, "private static JdbcType jdbcType" + valClsName + "(String cacheName) {");
+
+ add2(src, "JdbcType jdbcType = new JdbcType();");
add0(src, "");
add2(src, "jdbcType.setCacheName(cacheName);");
@@ -654,70 +610,68 @@ public class CodeGenerator {
add2(src, "jdbcType.setDatabaseTable(\"" + tbl + "\");");
// Java info.
- add2(src, "jdbcType.setKeyType(" + pojo.keyClassName() + ".class.getName());");
- add2(src, "jdbcType.setValueType(" + pojo.valueClassName() + ".class.getName());");
+ add2(src, "jdbcType.setKeyType(\"" + pkg + "." + pojo.keyClassName() + "\");");
+ add2(src, "jdbcType.setValueType(\"" + pkg + "." + valClsName + "\");");
add0(src, "");
// Key fields.
add2(src, "// Key fields for " + tbl + ".");
- add2(src, (first ? "Collection<JdbcTypeField> " : "") + "keys = new ArrayList<>();");
+ add2(src, "Collection<JdbcTypeField> keys = new ArrayList<>();");
addFields(src, "keys", pojo.keyFields());
add2(src, "jdbcType.setKeyFields(keys.toArray(new JdbcTypeField[keys.size()]));");
add0(src, "");
// Value fields.
add2(src, "// Value fields for " + tbl + ".");
- add2(src, (first ? "Collection<JdbcTypeField> " : "") + "vals = new ArrayList<>();");
+ add2(src, "Collection<JdbcTypeField> vals = new ArrayList<>();");
addFields(src, "vals", pojo.valueFields(includeKeys));
add2(src, "jdbcType.setValueFields(vals.toArray(new JdbcTypeField[vals.size()]));");
add0(src, "");
-
- add2(src, "jdbcTypes.add(jdbcType);");
+ add2(src, "return jdbcType;");
+ add1(src, "}");
add0(src, "");
- first = false;
- }
+ add1(src, "/**");
+ add1(src, "* Create SQL Query descriptor for " + tbl + ".");
+ add1(src, "*/");
+ add1(src, "private static QueryEntity queryEntity" + valClsName + "() {");
- add2(src, "storeFactory.setTypes(jdbcTypes.toArray(new JdbcType[jdbcTypes.size()]));");
- add0(src, "");
+ // Query entity.
+ add2(src, "QueryEntity qryEntity = new QueryEntity();");
+ add0(src, "");
+ add2(src, "qryEntity.setKeyType(\"" + pkg + "." + pojo.keyClassName() + "\");");
+ add2(src, "qryEntity.setValueType(\"" + pkg + "." + valClsName + "\");");
- // Queries entities.
- add2(src, "// Configure query entities. ");
- add2(src, "Collection<QueryEntity> qryEntities = new ArrayList<>();");
- add0(src, "");
+ add0(src, "");
- first = true;
- boolean firstIdxs = true;
- boolean firstIdx = true;
+ // Query fields.
+ add2(src, "// Query fields for " + tbl + ".");
+ add2(src, "LinkedHashMap<String, String> fields = new LinkedHashMap<>();");
+ add0(src, "");
- for (PojoDescriptor pojo : pojos) {
- String tbl = pojo.table();
+ for (PojoField field : pojo.fields())
+ add2(src, "fields.put(\"" + field.javaName() + "\", \"" + javaTypeName(field) + "\");");
- add2(src, (first ? "QueryEntity " : "") + "qryEntity = new QueryEntity();");
add0(src, "");
- add2(src, "qryEntity.setKeyType(" + pojo.keyClassName() + ".class.getName());");
- add2(src, "qryEntity.setValueType(" + pojo.valueClassName() + ".class.getName());");
+ add2(src, "qryEntity.setFields(fields);");
add0(src, "");
- // Query fields.
- addQueryFields(src, pojo.fields(), "// Query fields for " + tbl + ".", first);
-
// Indexes.
Collection<QueryIndex> idxs = pojo.indexes();
if (!idxs.isEmpty()) {
add2(src, "// Indexes for " + tbl + ".");
- add2(src, (firstIdxs ? "Collection<QueryIndex> " : "") + "idxs = new ArrayList<>();");
+ add2(src, "Collection<QueryIndex> idxs = new ArrayList<>();");
add0(src, "");
- firstIdxs = false;
+ boolean firstIdx = true;
for (QueryIndex idx : idxs) {
if (idx.getFields().size() == 1) {
Map.Entry<String, Boolean> fld = F.first(idx.getFields().entrySet());
add2(src, "idxs.add(new QueryIndex(\"" + fld.getKey() + "\", " + fld.getValue() + ", \"" +
- idx.getName() + "\"));");
+ idx.getName() + "\"));");
add0(src, "");
}
else {
@@ -732,7 +686,7 @@ public class CodeGenerator {
add0(src, "");
for (Map.Entry<String, Boolean> idxFld : idx.getFields().entrySet())
- add2(src, "idxFlds.put(\"" + idxFld.getKey() + "\", " + idxFld.getValue() + ");");
+ add2(src, "idxFlds.put(\"" + idxFld.getKey() + "\", " + idxFld.getValue() + ");");
add0(src, "");
@@ -750,12 +704,55 @@ public class CodeGenerator {
add0(src, "");
}
- add2(src, "ccfg.setQueryEntities(qryEntities);");
- add0(src, "");
+ add2(src, "return qryEntity;");
- first = false;
+ add1(src, "}");
+ add0(src, "");
}
+ add1(src, "/**");
+ add1(src, "* Configure cache.");
+ add1(src, "*");
+ add1(src, "* @param cacheName Cache name.");
+ add1(src, "* @param storeFactory Cache store factory.");
+ add1(src, "*/");
+ add1(src, "public static <K, V> CacheConfiguration<K, V> cache(String cacheName," +
+ " CacheJdbcPojoStoreFactory<K, V> storeFactory) {");
+ add2(src, "if (storeFactory == null)");
+ add3(src, " throw new IllegalArgumentException(\"Cache store factory cannot be null.\");");
+ add0(src, "");
+ add2(src, "CacheConfiguration<K, V> ccfg = new CacheConfiguration<>(cacheName);");
+ add0(src, "");
+ add2(src, "ccfg.setCacheStoreFactory(storeFactory);");
+ add2(src, "ccfg.setReadThrough(true);");
+ add2(src, "ccfg.setWriteThrough(true);");
+ add0(src, "");
+
+ add2(src, "// Configure JDBC types. ");
+ add2(src, "Collection<JdbcType> jdbcTypes = new ArrayList<>();");
+ add0(src, "");
+
+ for (PojoDescriptor pojo : pojos)
+ add2(src, "jdbcTypes.add(jdbcType" + pojo.valueClassName() + "(cacheName));");
+
+ add0(src, "");
+
+ add2(src, "storeFactory.setTypes(jdbcTypes.toArray(new JdbcType[jdbcTypes.size()]));");
+ add0(src, "");
+
+
+ add2(src, "// Configure query entities. ");
+ add2(src, "Collection<QueryEntity> qryEntities = new ArrayList<>();");
+ add0(src, "");
+
+ for (PojoDescriptor pojo : pojos)
+ add2(src, "qryEntities.add(queryEntity" + pojo.valueClassName() + "());");
+
+ add0(src, "");
+
+ add2(src, "ccfg.setQueryEntities(qryEntities);");
+ add0(src, "");
+
add2(src, "return ccfg;");
add1(src, "}");