James 7 年 前
コミット
b4838ec910

+ 24 - 24
src/main/java/com/jfinal/template/ext/directive/RenderDirective.java

@@ -60,7 +60,7 @@ import com.jfinal.template.stat.ast.StatList;
 public class RenderDirective extends Directive {
 	
 	private String parentFileName;
-	private Map<String, StatInfo> statInfoCache = new SyncWriteMap<String,StatInfo>(16, 0.5F);
+	private Map<String, SubStat> subStatCache = new SyncWriteMap<String, SubStat>(16, 0.5F);
 	
 	public void setExprList(ExprList exprList) {
 		int len = exprList.length();
@@ -108,42 +108,42 @@ public class RenderDirective extends Directive {
 		}
 		
 		String subFileName = Include.getSubFileName((String)value, parentFileName);
-		StatInfo statInfo = statInfoCache.get(subFileName);
-		if (statInfo == null) {
-			statInfo = parseStatInfo(env, subFileName);
-			statInfoCache.put(subFileName, statInfo);
+		SubStat subStat = subStatCache.get(subFileName);
+		if (subStat == null) {
+			subStat = parseSubStat(env, subFileName);
+			subStatCache.put(subFileName, subStat);
 		} else if (env.isDevMode()) {
-			// statInfo.env.isSourceListModified() 逻辑可以支持 #render 子模板中的 #include 过来的子模板在 devMode 下在修改后可被重加载
-			if (statInfo.source.isModified() || statInfo.env.isSourceListModified()) {
-				statInfo = parseStatInfo(env, subFileName);
-				statInfoCache.put(subFileName, statInfo);
+			// subStat.env.isSourceListModified() 逻辑可以支持 #render 子模板中的 #include 过来的子模板在 devMode 下在修改后可被重加载
+			if (subStat.source.isModified() || subStat.env.isSourceListModified()) {
+				subStat = parseSubStat(env, subFileName);
+				subStatCache.put(subFileName, subStat);
 			}
 		}
 		
-		statInfo.stat.exec(statInfo.env, scope, writer);
+		subStat.stat.exec(subStat.env, scope, writer);
 		scope.getCtrl().setJumpNone();
 	}
 	
-	private StatInfo parseStatInfo(Env env, String subFileName) {
+	private SubStat parseSubStat(Env env, String subFileName) {
 		EngineConfig config = env.getEngineConfig();
-		// FileSource fileSource = new FileSource(config.getBaseTemplatePath(), subFileName, config.getEncoding());
-		ISource fileSource = config.getSourceFactory().getSource(config.getBaseTemplatePath(), subFileName, config.getEncoding());
+		// FileSource subFileSource = new FileSource(config.getBaseTemplatePath(), subFileName, config.getEncoding());
+		ISource subFileSource = config.getSourceFactory().getSource(config.getBaseTemplatePath(), subFileName, config.getEncoding());
 		
 		try {
-			EnvSub envSub = new EnvSub(env);
-			StatList statList = new Parser(envSub, fileSource.getContent(), subFileName).parse();
-			return new StatInfo(envSub, statList.getActualStat(), fileSource);
+			SubEnv subEnv = new SubEnv(env);
+			StatList subStatList = new Parser(subEnv, subFileSource.getContent(), subFileName).parse();
+			return new SubStat(subEnv, subStatList.getActualStat(), subFileSource);
 		} catch (Exception e) {
 			throw new ParseException(e.getMessage(), location, e);
 		}
 	}
 	
-	private static class StatInfo {
-		EnvSub env;
+	private static class SubStat {
+		SubEnv env;
 		Stat stat;
 		ISource source;
 		
-		StatInfo(EnvSub env, Stat stat, ISource source) {
+		SubStat(SubEnv env, Stat stat, ISource source) {
 			this.env = env;
 			this.stat = stat;
 			this.source = source;
@@ -151,19 +151,19 @@ public class RenderDirective extends Directive {
 	}
 	
 	/**
-	 * EnvSub 用于将子模板与父模板中的模板函数隔离开来,
+	 * SubEnv 用于将子模板与父模板中的模板函数隔离开来,
 	 * 否则在子模板被修改并被重新解析时会再次添加子模板中的
 	 * 模板函数,从而抛出异常
 	 * 
-	 * EnvSub 也可以使子模板中定义的模板函数不与上层产生冲突,
+	 * SubEnv 也可以使子模板中定义的模板函数不与上层产生冲突,
 	 * 有利于动态型模板渲染的模块化
 	 * 
-	 * 注意: #render 子模板中定义的模板函数无法被上层调用
+	 * 注意: #render 子模板中定义的模板函数无法在父模板中调用
 	 */
-	private static class EnvSub extends Env {
+	private static class SubEnv extends Env {
 		Env parentEnv;
 		
-		public EnvSub(Env parentEnv) {
+		public SubEnv(Env parentEnv) {
 			super(parentEnv.getEngineConfig());
 			this.parentEnv = parentEnv;
 		}