소스 검색

added allowGlobalsDefine for script checker

Nicolas Cannasse 5 년 전
부모
커밋
60f01267f6
1개의 변경된 파일15개의 추가작업 그리고 5개의 파일을 삭제
  1. 15 5
      hide/comp/ScriptEditor.hx

+ 15 - 5
hide/comp/ScriptEditor.hx

@@ -5,6 +5,7 @@ typedef GlobalsDef = haxe.DynamicAccess<{
 	var context : String;
 	var events : String;
 	var evalTo : String;
+	var allowGlobalsDefine : Bool;
 	var cdbEnums : Array<String>;
 }>;
 
@@ -60,6 +61,7 @@ class ScriptChecker {
 
 		var cdbPack : String = config.get("script.cdbPackage");
 		var context = null;
+		var allowGlobalsDefine = false;
 		for( api in apis ) {
 			for( f in api.globals.keys() ) {
 				var tname = api.globals.get(f);
@@ -93,6 +95,9 @@ class ScriptChecker {
 			if( api.context != null )
 				context = api.context;
 
+			if( api.allowGlobalsDefine != null )
+				allowGlobalsDefine = api.allowGlobalsDefine;
+
 			if( api.events != null ) {
 				for( f in getFields(api.events) )
 					checker.setEvent(f.name, f.t);
@@ -128,10 +133,15 @@ class ScriptChecker {
 				this.evalTo = api.evalTo;
 		}
 		if( context != null ) {
-			var fields = getFields(context);
-			for( f in fields )
-				checker.setGlobal(f.name, f.t);
+			switch( checker.types.resolve(context) ) {
+			case TInst(c,_):
+				for( f in c.fields ) if( f.t.match(TFun(_)) ) f.isPublic = true; // allow access to private methods
+				checker.setGlobals(c);
+			default: error(context+" is not a class");
+			}
 		}
+		checker.allowUntypedMeta = true;
+		checker.allowGlobalsDefine = allowGlobalsDefine;
 	}
 
 	function getFields( tpath : String ) {
@@ -140,7 +150,7 @@ class ScriptChecker {
 			error("Missing type "+tpath);
 		var fl = checker.getFields(t);
 		if( fl == null )
-			error(tpath+" context is not a class");
+			error(tpath+" is not a class");
 		return fl;
 	}
 
@@ -250,7 +260,7 @@ class ScriptEditor extends CodeEditor {
 				for( f in files )
 					ide.fileWatcher.register(f, function() {
 						@:privateAccess ScriptChecker.TYPES_SAVE = [];
-						haxe.Timer.delay(function() { checker.reload(); doCheckScript(); }, 100);
+						haxe.Timer.delay(function() { try checker.reload() catch( e : Dynamic ) {}; doCheckScript(); }, 100);
 					}, root);
 			}
 		}