@@ -176,7 +176,8 @@ public B setClock(Clock clock) {
176176 }
177177
178178 /**
179- * Sets project id.
179+ * Sets the project ID. If no project ID is set, {@link #getDefaultProjectId()} will be used to
180+ * attempt getting the project ID from the environment.
180181 *
181182 * @return the builder
182183 */
@@ -186,7 +187,8 @@ public B projectId(String projectId) {
186187 }
187188
188189 /**
189- * Sets project id.
190+ * Sets the project ID. If no project ID is set, {@link #getDefaultProjectId()} will be used to
191+ * attempt getting the project ID from the environment.
190192 *
191193 * @return the builder
192194 */
@@ -316,10 +318,6 @@ private static GoogleCredentials defaultCredentials() {
316318 }
317319 }
318320
319- protected static String appEngineAppId () {
320- return System .getProperty ("com.google.appengine.application.id" );
321- }
322-
323321 @ Deprecated
324322 protected String defaultHost () {
325323 return getDefaultHost ();
@@ -335,21 +333,41 @@ protected String defaultProject() {
335333 }
336334
337335 protected String getDefaultProject () {
336+ return getDefaultProjectId ();
337+ }
338+
339+ /**
340+ * Returns the default project ID, or {@code null} if no default project ID could be found. This
341+ * method returns the first available project ID among the following sources:
342+ * <ol>
343+ * <li>The project ID specified by the GOOGLE_CLOUD_PROJECT environment variable
344+ * <li>The App Engine project ID
345+ * <li>The project ID specified in the JSON credentials file pointed by the
346+ * {@code GOOGLE_APPLICATION_CREDENTIALS} environment variable
347+ * <li>The Google Cloud SDK project ID
348+ * <li>The Compute Engine project ID
349+ * </ol>
350+ */
351+ public static String getDefaultProjectId () {
338352 String projectId = System .getProperty (PROJECT_ENV_NAME , System .getenv (PROJECT_ENV_NAME ));
339353 if (projectId == null ) {
340354 projectId =
341355 System .getProperty (LEGACY_PROJECT_ENV_NAME , System .getenv (LEGACY_PROJECT_ENV_NAME ));
342356 }
343357 if (projectId == null ) {
344- projectId = appEngineProjectId ();
358+ projectId = getAppEngineProjectId ();
345359 }
346360 if (projectId == null ) {
347- projectId = serviceAccountProjectId ();
361+ projectId = getServiceAccountProjectId ();
348362 }
349- return projectId != null ? projectId : googleCloudProjectId ();
363+ return projectId != null ? projectId : getGoogleCloudProjectId ();
364+ }
365+
366+ protected static String getAppEngineAppId () {
367+ return System .getProperty ("com.google.appengine.application.id" );
350368 }
351369
352- private static String activeGoogleCloudConfig (File configDir ) {
370+ private static String getActiveGoogleCloudConfig (File configDir ) {
353371 String activeGoogleCloudConfig = null ;
354372 try {
355373 activeGoogleCloudConfig =
@@ -361,7 +379,7 @@ private static String activeGoogleCloudConfig(File configDir) {
361379 return firstNonNull (activeGoogleCloudConfig , "default" );
362380 }
363381
364- protected static String googleCloudProjectId () {
382+ protected static String getGoogleCloudProjectId () {
365383 File configDir ;
366384 if (System .getenv ().containsKey ("CLOUDSDK_CONFIG" )) {
367385 configDir = new File (System .getenv ("CLOUDSDK_CONFIG" ));
@@ -370,7 +388,7 @@ protected static String googleCloudProjectId() {
370388 } else {
371389 configDir = new File (System .getProperty ("user.home" ), ".config/gcloud" );
372390 }
373- String activeConfig = activeGoogleCloudConfig (configDir );
391+ String activeConfig = getActiveGoogleCloudConfig (configDir );
374392 FileReader fileReader = null ;
375393 try {
376394 fileReader = new FileReader (new File (configDir , "configurations/config_" + activeConfig ));
@@ -429,7 +447,7 @@ private static boolean isWindows() {
429447 return System .getProperty ("os.name" ).toLowerCase (Locale .ENGLISH ).contains ("windows" );
430448 }
431449
432- protected static String appEngineProjectId () {
450+ protected static String getAppEngineProjectId () {
433451 try {
434452 Class <?> factoryClass =
435453 Class .forName ("com.google.appengine.api.appidentity.AppIdentityServiceFactory" );
@@ -447,7 +465,7 @@ protected static String appEngineProjectId() {
447465 }
448466 }
449467
450- protected static String serviceAccountProjectId () {
468+ protected static String getServiceAccountProjectId () {
451469 String project = null ;
452470 String credentialsPath = System .getenv ("GOOGLE_APPLICATION_CREDENTIALS" );
453471 if (credentialsPath != null ) {
@@ -488,17 +506,17 @@ public ServiceRpcT getRpc() {
488506 }
489507
490508 /**
491- * Returns the project id . Return value can be null (for services that don't require a project
492- * id ).
509+ * Returns the project ID . Return value can be null (for services that don't require a project
510+ * ID ).
493511 */
494512 @ Deprecated
495513 public String projectId () {
496514 return getProjectId ();
497515 }
498516
499517 /**
500- * Returns the project id . Return value can be null (for services that don't require a project
501- * id ).
518+ * Returns the project ID . Return value can be null (for services that don't require a project
519+ * ID ).
502520 */
503521 public String getProjectId () {
504522 return projectId ;
0 commit comments