diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/ProjectUtils.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/ProjectUtils.java
index 9740fc08a0..596f941158 100644
--- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/ProjectUtils.java
+++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/ProjectUtils.java
@@ -34,7 +34,6 @@
 import org.codehaus.plexus.util.DirectoryScanner;
 import org.eclipse.buildship.core.internal.configuration.GradleProjectNature;
 import org.eclipse.core.resources.ICommand;
-import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
@@ -546,27 +545,15 @@ public static int getMaxProjectProblemSeverity() {
 			if (ProjectsManager.DEFAULT_PROJECT_NAME.equals(project.getName())) {
 				continue;
 			}
-			
+
 			try {
 				maxSeverity = Math.max(maxSeverity, project.findMaxProblemSeverity(null, true, IResource.DEPTH_ZERO));
-				if (ProjectUtils.isMavenProject(project)) {
-					IFile configFile = project.getFile(MavenProjectImporter.POM_FILE);
-					if (configFile.exists()) {
-						maxSeverity = Math.max(maxSeverity, configFile.findMaxProblemSeverity(null, true, IResource.DEPTH_ZERO));
-					}
-				} else if (ProjectUtils.isGradleProject(project)) {
-					List<String> gradleConfigs = Arrays.asList(
-						GradleProjectImporter.BUILD_GRADLE_DESCRIPTOR,
-						GradleProjectImporter.BUILD_GRADLE_KTS_DESCRIPTOR,
-						GradleProjectImporter.SETTINGS_GRADLE_DESCRIPTOR,
-						GradleProjectImporter.SETTINGS_GRADLE_KTS_DESCRIPTOR
-					);
-
-					for (String fileName : gradleConfigs) {
-						IFile configFile = project.getFile(fileName);
-						if (configFile.exists()) {
-							maxSeverity = Math.max(maxSeverity, configFile.findMaxProblemSeverity(null, true, IResource.DEPTH_ZERO));
-						}
+				List<IMarker> markers = ResourceUtils.findMarkers(project, IMarker.SEVERITY_ERROR, IMarker.SEVERITY_WARNING);
+				List<IMarker> buildFileMarkers = markers.stream().filter(marker -> isBuildFileMarker(marker, project)).collect(Collectors.toList());
+				for (IMarker marker : buildFileMarkers) {
+					maxSeverity = Math.max(maxSeverity, marker.getAttribute(IMarker.SEVERITY, 0));
+					if (maxSeverity == IMarker.SEVERITY_ERROR) {
+						break;
 					}
 				}
 			} catch (CoreException e) {
@@ -581,4 +568,21 @@ public static int getMaxProjectProblemSeverity() {
 		return maxSeverity;
 	}
 
+	private static boolean isBuildFileMarker(IMarker marker, IProject project) {
+		IResource resource = marker.getResource();
+		if (!resource.exists()) {
+			return false;
+		}
+		String lastSegment = resource.getFullPath().lastSegment();
+		if (ProjectUtils.isMavenProject(project)) {
+			return lastSegment.equals(MavenProjectImporter.POM_FILE);
+		} else if (ProjectUtils.isGradleProject(project)) {
+			return lastSegment.equals(GradleProjectImporter.BUILD_GRADLE_DESCRIPTOR) ||
+				lastSegment.equals(GradleProjectImporter.BUILD_GRADLE_KTS_DESCRIPTOR) ||
+				lastSegment.equals(GradleProjectImporter.SETTINGS_GRADLE_DESCRIPTOR) ||
+				lastSegment.equals(GradleProjectImporter.SETTINGS_GRADLE_KTS_DESCRIPTOR);
+		}
+		return false;
+	}
+
 }
diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/invalid-subproject/invalid/build.gradle b/org.eclipse.jdt.ls.tests/projects/gradle/invalid-subproject/invalid/build.gradle
new file mode 100644
index 0000000000..f8840486ce
--- /dev/null
+++ b/org.eclipse.jdt.ls.tests/projects/gradle/invalid-subproject/invalid/build.gradle
@@ -0,0 +1,12 @@
+plugins {
+	// id 'java'
+}
+
+repositories {
+	mavenCentral()
+}
+
+dependencies {
+	testImplementation(platform('org.junit:junit-bom:5.7.1'))
+	testImplementation('org.junit.jupiter:junit-jupiter')
+}
diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/invalid-subproject/settings.gradle b/org.eclipse.jdt.ls.tests/projects/gradle/invalid-subproject/settings.gradle
new file mode 100644
index 0000000000..5658afd48e
--- /dev/null
+++ b/org.eclipse.jdt.ls.tests/projects/gradle/invalid-subproject/settings.gradle
@@ -0,0 +1,2 @@
+rootProject.name = 'invalid-subproject'
+include 'invalid'
diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/ProjectUtilsTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/ProjectUtilsTest.java
index 61d8b687ed..3f872cc199 100644
--- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/ProjectUtilsTest.java
+++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/ProjectUtilsTest.java
@@ -61,4 +61,10 @@ public void testGetProjectSeverityWhenConfigFileNotExists() throws Exception {
 		ProjectUtils.getMaxProjectProblemSeverity();
 	}
 
+	@Test
+	public void testGetMaxProjectProblemSeverityForSubProject() throws Exception {
+		importProjects("gradle/invalid-subproject");
+		assertEquals(IMarker.SEVERITY_ERROR, ProjectUtils.getMaxProjectProblemSeverity());
+	}
+
 }