@Override
		public void bundleBuilt(GhidraBundle bundle, String summary) {
			// on enable, build can happen before the refresh populates the info manager with this
			// bundle's scripts, so allow for the possibility and create the info here.
			if (!(bundle instanceof GhidraSourceBundle)) {
				return;
			}

			GhidraSourceBundle sourceBundle = (GhidraSourceBundle) bundle;
			ResourceFile sourceDirectory = sourceBundle.getFile();
			if (summary == null) {
				// a null summary means the build didn't change anything, so use any errors from
				// the last build
				for (ResourceFile sourceFile : sourceBundle.getAllErrors().keySet()) {
					if (sourceFile.getParentFile().equals(sourceDirectory)) {
						ScriptInfo scriptInfo = infoManager.getScriptInfo(sourceFile);
						scriptInfo.setCompileErrors(true);
					}
				}
			}
			else {
				for (ResourceFile sourceFile : sourceBundle.getNewSources()) {
					if (sourceFile.getParentFile().equals(sourceDirectory)) {
						ScriptInfo scriptInfo = infoManager.getScriptInfo(sourceFile);
						BuildError e = sourceBundle.getErrors(sourceFile);
						scriptInfo.setCompileErrors(e != null);
					}
				}
			}
			tableModel.fireTableDataChanged();
		}
passed to runScript, repaints scriptTable when a script completes
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptComponentProvider.java