aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2018-01-31 12:45:20 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-31 12:47:15 -0800
commit7a6dfd62e2083d66c8141ae148e1facf41fbb7e9 (patch)
treef984ed91a8fe6f59f451e8f0e8c82066da4e59e5 /src
parentdffc24bdbc3deb8f7ffb017d5ad477d1408b91db (diff)
Make CcToolchainProvider structField methods resilient to null fields
structField methods must not throw an exception in all cases. Null fields were technically used for incomplete toolchain objects (such as the EMPTY_TOOLCHAIN_IS_ERROR object). RELNOTES: None. PiperOrigin-RevId: 184031908
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
index 2777c52b84..2f4ca798f3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
@@ -560,21 +560,24 @@ public final class CcToolchainProvider extends ToolchainInfo {
}
/** Returns the compiler version string (e.g. "gcc-4.1.1"). */
- @SkylarkCallable(name = "compiler", structField = true, doc = "C++ compiler.")
+ @SkylarkCallable(name = "compiler", structField = true, doc = "C++ compiler.",
+ allowReturnNones = true)
public String getCompiler() {
- return toolchainInfo.getCompiler();
+ return toolchainInfo == null ? null : toolchainInfo.getCompiler();
}
/** Returns the libc version string (e.g. "glibc-2.2.2"). */
- @SkylarkCallable(name = "libc", structField = true, doc = "libc version string.")
+ @SkylarkCallable(name = "libc", structField = true, doc = "libc version string.",
+ allowReturnNones = true)
public String getTargetLibc() {
- return toolchainInfo.getTargetLibc();
+ return toolchainInfo == null ? null : toolchainInfo.getTargetLibc();
}
/** Returns the target architecture using blaze-specific constants (e.g. "piii"). */
- @SkylarkCallable(name = "cpu", structField = true, doc = "Target CPU of the C++ toolchain.")
+ @SkylarkCallable(name = "cpu", structField = true, doc = "Target CPU of the C++ toolchain.",
+ allowReturnNones = true)
public String getTargetCpu() {
- return toolchainInfo.getTargetCpu();
+ return toolchainInfo == null ? null : toolchainInfo.getTargetCpu();
}
/**
@@ -619,7 +622,9 @@ public final class CcToolchainProvider extends ToolchainInfo {
+ "inferred from the command-line options."
)
public ImmutableList<String> getLinkOptionsWithSysroot() {
- return cppConfiguration.getLinkOptionsDoNotUse(sysroot);
+ return cppConfiguration == null
+ ? ImmutableList.of()
+ : cppConfiguration.getLinkOptionsDoNotUse(sysroot);
}
public ImmutableList<String> getLinkOptions() {
@@ -761,10 +766,11 @@ public final class CcToolchainProvider extends ToolchainInfo {
@SkylarkCallable(
name = "target_gnu_system_name",
structField = true,
- doc = "The GNU System Name."
+ doc = "The GNU System Name.",
+ allowReturnNones = true
)
public String getTargetGnuSystemName() {
- return toolchainInfo.getTargetGnuSystemName();
+ return toolchainInfo == null ? null : toolchainInfo.getTargetGnuSystemName();
}
/** Returns the architecture component of the GNU System Name */