Buggy code:
public class GTACourseNode extends AbstractAccessableCourseNode implements AssessableCourseNode { private static final OLog log = Tracing . createLoggerFor ( GTACourseNode . class ) ; private static final String PACKAGE_GTA = Util . getPackageName ( GTAEditController . class ) ; private static final long serialVersionUID = 1L ; public static final String GTASK_TYPE = "grouptask.type" ; public static final String GTASK_GROUPS = "grouptask.groups" ; public static final String GTASK_AREAS = "grouptask.areas" ; public static final String GTASK_ASSIGNMENT = "grouptask.assignement" ; public static final String GTASK_ASSIGNMENT_DEADLINE = "grouptask.assignment.deadline" ; public static final String GTASK_SUBMIT = "grouptask.submit" ; public static final String GTASK_SUBMIT_DEADLINE = "grouptask.submit.deadline" ; public static final String GTASK_REVIEW_AND_CORRECTION = "grouptask.review.and.correction" ; public static final String GTASK_REVISION_PERIOD = "grouptask.revision.period" ; public static final String GTASK_SAMPLE_SOLUTION = "grouptask.solution" ; public static final String GTASK_SAMPLE_SOLUTION_VISIBLE_AFTER = "grouptask.solution.visible.after" ; public static final String GTASK_GRADING = "grouptask.grading" ; public static final String GTASK_TASKS = "grouptask.tasks" ; public static final String GTASK_ASSIGNEMENT_TYPE = "grouptask.assignement.type" ; public static final String GTASK_ASSIGNEMENT_TYPE_AUTO = "auto" ; public static final String GTASK_ASSIGNEMENT_TYPE_MANUAL = "manual" ; public static final String GTASK_USERS_TEXT = "grouptask.users.text" ; public static final String GTASK_PREVIEW = "grouptask.preview" ; public static final String GTASK_SAMPLING = "grouptask.sampling" ; public static final String GTASK_SAMPLING_REUSE = "reuse" ; public static final String GTASK_SAMPLING_UNIQUE = "unique" ; public static final String GTASK_EXTERNAL_EDITOR = "grouptask.external.editor" ; public static final String GTASK_EMBBEDED_EDITOR = "grouptask.embbeded.editor" ; public static final String GTASK_MAX_SUBMITTED_DOCS = "grouptask.max.submitted.docs" ; public static final String GTASK_SUBMISSION_TEXT = "grouptask.submission.text" ; public static final String GTASK_SUBMISSION_MAIL_CONFIRMATION = "grouptask.submission.mail.confirmation" ; public static final String GTASK_SOLUTIONS = "grouptask.solutions" ; private static final String TYPE = "gta" ; public GTACourseNode ( ) { } @ Override public boolean needsReferenceToARepositoryEntry ( ) { } @ Override public RepositoryEntry getReferencedRepositoryEntry ( ) { } @ Override public void updateModuleConfigDefaults ( boolean isNewNode ) { } @ Override public StatusDescription isConfigValid ( ) { } @ Override public StatusDescription [ ] isConfigValid ( CourseEditorEnv cev ) { } private List < StatusDescription > validateInternalConfiguration ( CourseEditorEnv cev ) { List < StatusDescription > sdList = new ArrayList < > ( 5 ) ; ModuleConfiguration config = getModuleConfiguration ( ) ; boolean hasScoring = config . getBooleanSafe ( GTACourseNode . GTASK_GRADING ) ; if ( hasScoring ) { <START_BUG> if ( ( ! ( config . getBooleanSafe ( CONFIG_KEY_HAS_SCORE_FIELD ) ) ) && ( ! ( config . getBooleanSafe ( CONFIG_KEY_HAS_SCORE_FIELD ) ) ) ) { <END_BUG> addStatusErrorDescription ( "error.missing.score.config" , PANE_TAB_GRADING , sdList ) ; } } if ( group . name ( ) . equals ( config . getStringValue ( GTACourseNode . GTASK_TYPE ) ) ) { List < Long > groupKeys = config . getList ( GTACourseNode . GTASK_GROUPS , Long . class ) ; List < Long > areaKeys = config . getList ( GTACourseNode . GTASK_AREAS , Long . class ) ; if ( ( groupKeys . isEmpty ( ) ) && ( areaKeys . isEmpty ( ) ) ) { addStatusErrorDescription ( "error.missing.group" , PANE_TAB_GRADING , sdList ) ; } } if ( ( ( ( ( ( ! ( config . getBooleanSafe ( GTACourseNode . GTASK_ASSIGNMENT ) ) ) && ( ! ( config . getBooleanSafe ( GTACourseNode . GTASK_SUBMIT ) ) ) ) && ( ! ( config . getBooleanSafe ( GTACourseNode . GTASK_REVIEW_AND_CORRECTION ) ) ) ) && ( ! ( config . getBooleanSafe ( GTACourseNode . GTASK_REVISION_PERIOD ) ) ) ) && ( ! ( config . getBooleanSafe ( GTACourseNode . GTASK_SAMPLE_SOLUTION ) ) ) ) && ( ! ( config . getBooleanSafe ( GTACourseNode . GTASK_GRADING ) ) ) ) { addStatusErrorDescription ( "error.select.atleastonestep" , PANE_TAB_WORKLOW , sdList ) ; } if ( cev != null ) { GTAManager gtaManager = CoreSpringFactory . getImpl ( GTAManager . class ) ; OLATResource courseOres = cev . getCourseGroupManager ( ) . getCourseResource ( ) ; ICourse course = CourseFactory . loadCourse ( courseOres ) ; if ( config . getBooleanSafe ( GTACourseNode . GTASK_ASSIGNMENT ) ) { File taskDirectory = gtaManager . getTasksDirectory ( course . getCourseEnvironment ( ) , this ) ; if ( ! ( TaskHelper . hasDocuments ( taskDirectory ) ) ) { addStatusErrorDescription ( "error.missing.tasks" , PANE_TAB_ASSIGNMENT , sdList ) ; } } if ( config . getBooleanSafe ( GTACourseNode . GTASK_SAMPLE_SOLUTION ) ) { File solutionDirectory = gtaManager . getSolutionsDirectory ( course . getCourseEnvironment ( ) , this ) ; if ( ! ( TaskHelper . hasDocuments ( solutionDirectory ) ) ) { addStatusErrorDescription ( "error.missing.solutions" , PANE_TAB_SOLUTIONS , sdList ) ; } } List < IdentityRef > participants = gtaManager . getDuplicatedMemberships ( this ) ; if ( ( participants . size ( ) ) > 0 ) { UserManager um = CoreSpringFactory . getImpl ( UserManager . class ) ; StringBuilder sb = new StringBuilder ( ) ; for ( IdentityRef participant : participants ) { String fullname = um . getUserDisplayName ( participant . getKey ( ) ) ; if ( ( sb . length ( ) ) > 0 ) sb . append ( ",<seq2seq4repair_space>" ) ; sb . append ( fullname ) ; } String [ ] params = new String [ ] { getShortTitle ( ) , sb . toString ( ) } ; StatusDescription sd = new StatusDescription ( StatusDescription . WARNING , "error.duplicate.memberships" , "error.duplicate.memberships" , params , GTACourseNode . PACKAGE_GTA ) ; sd . setDescriptionForUnit ( getIdent ( ) ) ; sd . setActivateableViewIdentifier ( PANE_TAB_WORKLOW ) ; sdList . add ( sd ) ; } } return sdList ; } private void addStatusErrorDescription ( String key , String pane , List < StatusDescription > status ) { } @ Override public void exportNode ( File fExportDirectory , ICourse course ) { } @ Override public void importNode ( File importDirectory , ICourse course , Identity owner , Locale locale , boolean withReferences ) { } @ Override public CourseNode createInstanceForCopy ( boolean isNewTitle , ICourse course ) { }

Fix:
if ( ( ! ( config . getBooleanSafe ( CONFIG_KEY_HAS_SCORE_FIELD ) ) ) && ( ! ( config . getBooleanSafe ( CONFIG_KEY_HAS_PASSED_FIELD ) ) ) ) {