diff options
author | 2015-11-19 15:14:15 +0000 | |
---|---|---|
committer | 2015-11-19 16:47:58 +0000 | |
commit | 8b1a0947bfd9a059a886c4cc45242ddc2ccec003 (patch) | |
tree | 00e5d0ed814126693ac18bf0a11c125342568a94 /src/main/java/com/google | |
parent | d30ae4daafba3d1aad7dd15f988116ecf43a2d7f (diff) |
Workaround javac 1.7 bug
--
MOS_MIGRATED_REVID=108243881
Diffstat (limited to 'src/main/java/com/google')
14 files changed, 108 insertions, 69 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisPhaseCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisPhaseCompleteEvent.java index a876bf0e7c..ab8019ac55 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisPhaseCompleteEvent.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisPhaseCompleteEvent.java @@ -34,7 +34,8 @@ public class AnalysisPhaseCompleteEvent { public AnalysisPhaseCompleteEvent(Collection<? extends ConfiguredTarget> targets, int targetsVisited, long timeInMs) { this.timeInMs = timeInMs; - this.targets = ImmutableList.copyOf(targets); + // Do not remove <ConfiguredTarget>: workaround for Java 7 type inference. + this.targets = ImmutableList.<ConfiguredTarget>copyOf(targets); this.targetsVisited = targetsVisited; } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java index 53c484c147..85a5555fed 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java @@ -546,8 +546,10 @@ public class BuildView { Collection<ConfiguredTarget> allTargetsToTest = null; if (testsToRun != null) { // Determine the subset of configured targets that are meant to be run as tests. - allTargetsToTest = Lists.newArrayList( - filterTestsByTargets(configuredTargets, Sets.newHashSet(testsToRun))); + // Do not remove <ConfiguredTarget>: workaround for Java 7 type inference. + allTargetsToTest = + Lists.<ConfiguredTarget>newArrayList( + filterTestsByTargets(configuredTargets, Sets.newHashSet(testsToRun))); } Set<Artifact> artifactsToBuild = new HashSet<>(); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoCollection.java index 3c988d3c2a..39b1d96f94 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoCollection.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/buildinfo/BuildInfoCollection.java @@ -29,7 +29,8 @@ public final class BuildInfoCollection { public BuildInfoCollection(List<? extends Action> actions, List<Artifact> stampedBuildInfo, List<Artifact> redactedBuildInfo) { - this.actions = ImmutableList.copyOf(actions); + // Do not remove <Action>: workaround for Java 7 type inference. + this.actions = ImmutableList.<Action>copyOf(actions); this.stampedBuildInfo = ImmutableList.copyOf(stampedBuildInfo); this.redactedBuildInfo = ImmutableList.copyOf(redactedBuildInfo); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java index 00cb6f694b..4478e72548 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java @@ -167,7 +167,11 @@ public final class BuildConfigurationCollection { ListMultimap<? extends SplitTransition<?>, BuildConfiguration> splitTransitionTable) { this.configuration = configuration; this.transitionTable = ImmutableMap.copyOf(transitionTable); - this.splitTransitionTable = ImmutableListMultimap.copyOf(splitTransitionTable); + // Do not remove <SplitTransition<?>, BuildConfiguration>: + // workaround for Java 7 type inference. + this.splitTransitionTable = + ImmutableListMultimap.<SplitTransition<?>, BuildConfiguration>copyOf( + splitTransitionTable); } public Map<? extends Transition, ConfigurationHolder> getTransitionTable() { diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/ExecutionStartingEvent.java b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/ExecutionStartingEvent.java index 1ebc5e8d3d..14f3e2b3e3 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/ExecutionStartingEvent.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/ExecutionStartingEvent.java @@ -31,7 +31,8 @@ public class ExecutionStartingEvent { * @param targets Remaining active targets. */ public ExecutionStartingEvent(Collection<? extends TransitiveInfoCollection> targets) { - this.targets = ImmutableList.copyOf(targets); + // Do not remove <TransitiveInfoCollection>: workaround for Java 7 type inference. + this.targets = ImmutableList.<TransitiveInfoCollection>copyOf(targets); } /** diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/TestFilteringCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/TestFilteringCompleteEvent.java index dc8415d52c..30e3b253aa 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/TestFilteringCompleteEvent.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/TestFilteringCompleteEvent.java @@ -42,8 +42,13 @@ public class TestFilteringCompleteEvent { public TestFilteringCompleteEvent( Collection<? extends ConfiguredTarget> targets, Collection<? extends ConfiguredTarget> testTargets) { - this.targets = ImmutableList.copyOf(targets); - this.testTargets = testTargets == null ? null : ImmutableList.copyOf(testTargets); + // Do not remove <ConfiguredTarget>: workaround for Java 7 type inference. + this.targets = ImmutableList.<ConfiguredTarget>copyOf(targets); + this.testTargets = + testTargets == null + ? null + // Do not remove <ConfiguredTarget>: workaround for Java 7 type inference. + : ImmutableList.<ConfiguredTarget>copyOf(testTargets); if (testTargets == null) { return; } diff --git a/src/main/java/com/google/devtools/build/lib/graph/Digraph.java b/src/main/java/com/google/devtools/build/lib/graph/Digraph.java index bc87c9f2a8..c2e7d0d378 100644 --- a/src/main/java/com/google/devtools/build/lib/graph/Digraph.java +++ b/src/main/java/com/google/devtools/build/lib/graph/Digraph.java @@ -1060,7 +1060,9 @@ public final class Digraph<T> implements Cloneable { return unordered; } List<Node<T>> result = new ArrayList<>(unordered); - Collections.sort(result, makeNodeComparator(comparator)); + // Do not inline this variable: a workaround for Java 7 type inference. + Comparator<Node<T>> nodeComparator = makeNodeComparator(comparator); + Collections.sort(result, nodeComparator); return result; } diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java index 06dc3404ce..c2b3eea933 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java @@ -260,7 +260,8 @@ public final class Attribute implements Comparable<Attribute> { public AllowedValueSet(Iterable<?> values) { Preconditions.checkNotNull(values); Preconditions.checkArgument(!Iterables.isEmpty(values)); - allowedValues = ImmutableSet.copyOf(values); + // Do not remove <Object>: workaround for Java 7 type inference. + allowedValues = ImmutableSet.<Object>copyOf(values); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java index ff5ef6089c..87d45b9c92 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java @@ -75,7 +75,9 @@ public class JavaBinary implements RuleConfiguredTargetFactory { ruleContext.checkSrcsSamePackage(true); boolean createExecutable = ruleContext.attributes().get("create_executable", Type.BOOLEAN); List<TransitiveInfoCollection> deps = - Lists.newArrayList(common.targetsTreatedAsDeps(ClasspathType.COMPILE_ONLY)); + // Do not remove <TransitiveInfoCollection>: workaround for Java 7 type inference. + Lists.<TransitiveInfoCollection>newArrayList( + common.targetsTreatedAsDeps(ClasspathType.COMPILE_ONLY)); semantics.checkRule(ruleContext, common); String mainClass = semantics.getMainClass(ruleContext, common); String originalMainClass = mainClass; diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java index 1612da6c8a..11d0167575 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java @@ -272,7 +272,10 @@ public class JavaCommon { // We need to check here because there are classes inheriting from this class that implement // rules that don't have this attribute. if (ruleContext.attributes().has("exports", BuildType.LABEL_LIST)) { - return ImmutableList.copyOf(ruleContext.getPrerequisites("exports", Mode.TARGET)); + // Do not remove <SplitTransition<?>, BuildConfiguration>: + // workaround for Java 7 type inference. + return ImmutableList.<TransitiveInfoCollection>copyOf( + ruleContext.getPrerequisites("exports", Mode.TARGET)); } else { return ImmutableList.of(); } @@ -468,7 +471,9 @@ public class JavaCommon { // We need to check here because there are classes inheriting from this class that implement // rules that don't have this attribute. if (ruleContext.attributes().has("runtime_deps", BuildType.LABEL_LIST)) { - return ImmutableList.copyOf(ruleContext.getPrerequisites("runtime_deps", Mode.TARGET)); + // Do not remove <TransitiveInfoCollection>: workaround for Java 7 type inference. + return ImmutableList.<TransitiveInfoCollection>copyOf( + ruleContext.getPrerequisites("runtime_deps", Mode.TARGET)); } else { return ImmutableList.of(); } diff --git a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java index dbbb46ff47..43939049d3 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java @@ -1193,62 +1193,74 @@ public class MethodLibrary { } }; - @SkylarkSignature(name = "dict", returnType = Map.class, - doc = - "Creates a <a href=\"#modules.dict\">dictionary</a> from an optional positional " - + "argument and an optional set of keyword arguments. Values from the keyword argument " - + "will overwrite values from the positional argument if a key appears multiple times. " - + "Dictionaries are always sorted by their keys", - optionalPositionals = { - @Param(name = "args", type = Object.class, defaultValue = "[]", - doc = - "Either a dictionary or a list of entries. Entries must be tuples or lists with " - + "exactly two elements: key, value"), - }, - extraKeywords = {@Param(name = "kwargs", doc = "Dictionary of additional entries.")}, - useLocation = true) - private static final BuiltinFunction dict = new BuiltinFunction("dict") { - @SuppressWarnings("unused") - public Map<Object, Object> invoke(Object args, Map<Object, Object> kwargs, Location loc) - throws EvalException { - Map<Object, Object> result = - (args instanceof Map<?, ?>) - ? new LinkedHashMap<>((Map<?, ?>) args) : getMapFromArgs(args, loc); - result.putAll(kwargs); - return result; - } + @SkylarkSignature( + name = "dict", + returnType = Map.class, + doc = + "Creates a <a href=\"#modules.dict\">dictionary</a> from an optional positional " + + "argument and an optional set of keyword arguments. Values from the keyword argument " + + "will overwrite values from the positional argument if a key appears multiple times. " + + "Dictionaries are always sorted by their keys", + optionalPositionals = { + @Param( + name = "args", + type = Object.class, + defaultValue = "[]", + doc = + "Either a dictionary or a list of entries. Entries must be tuples or lists with " + + "exactly two elements: key, value" + ), + }, + extraKeywords = {@Param(name = "kwargs", doc = "Dictionary of additional entries.")}, + useLocation = true + ) + private static final BuiltinFunction dict = + new BuiltinFunction("dict") { + @SuppressWarnings("unused") + public Map<Object, Object> invoke(Object args, Map<Object, Object> kwargs, Location loc) + throws EvalException { + Map<Object, Object> result = + (args instanceof Map<?, ?>) + // Do not remove <Object, Object>: workaround for Java 7 type inference. + ? new LinkedHashMap<Object, Object>((Map<?, ?>) args) + : getMapFromArgs(args, loc); + result.putAll(kwargs); + return result; + } - private Map<Object, Object> getMapFromArgs(Object args, Location loc) throws EvalException { - Map<Object, Object> result = new LinkedHashMap<>(); - int pos = 0; - for (Object element : Type.OBJECT_LIST.convert(args, "parameter args in dict()")) { - List<Object> pair = convertToPair(element, pos, loc); - result.put(pair.get(0), pair.get(1)); - ++pos; - } - return result; - } + private Map<Object, Object> getMapFromArgs(Object args, Location loc) throws EvalException { + Map<Object, Object> result = new LinkedHashMap<>(); + int pos = 0; + for (Object element : Type.OBJECT_LIST.convert(args, "parameter args in dict()")) { + List<Object> pair = convertToPair(element, pos, loc); + result.put(pair.get(0), pair.get(1)); + ++pos; + } + return result; + } - private List<Object> convertToPair(Object element, int pos, Location loc) - throws EvalException { - try { - List<Object> tuple = Type.OBJECT_LIST.convert(element, ""); - int numElements = tuple.size(); - if (numElements != 2) { - throw new EvalException( - location, - String.format("Sequence #%d has length %d, but exactly two elements are required", - pos, numElements)); + private List<Object> convertToPair(Object element, int pos, Location loc) + throws EvalException { + try { + List<Object> tuple = Type.OBJECT_LIST.convert(element, ""); + int numElements = tuple.size(); + if (numElements != 2) { + throw new EvalException( + location, + String.format( + "Sequence #%d has length %d, but exactly two elements are required", + pos, + numElements)); + } + return tuple; + } catch (ConversionException e) { + throw new EvalException( + loc, + String.format( + "Cannot convert dictionary update sequence element #%d to a sequence", pos)); + } } - return tuple; - } catch (ConversionException e) { - throw new EvalException( - loc, - String.format( - "Cannot convert dictionary update sequence element #%d to a sequence", pos)); - } - } - }; + }; @SkylarkSignature(name = "union", objectType = SkylarkNestedSet.class, returnType = SkylarkNestedSet.class, diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java index 0ac292854e..547fd3e5b7 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java @@ -403,7 +403,8 @@ public abstract class SkylarkList implements Iterable<Object>, SkylarkValue { * Creates a Tuple from an Iterable. */ public static Tuple copyOf(Iterable<?> contents) { - return create(ImmutableList.copyOf(contents)); + // Do not remove <Object>: workaround for Java 7 type inference. + return create(ImmutableList.<Object>copyOf(contents)); } /** diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java index b488bcfbf5..678834b760 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java @@ -228,7 +228,8 @@ public final class SkylarkNestedSet implements Iterable<Object>, SkylarkValue { } public Collection<Object> toCollection() { - return ImmutableList.copyOf(set.toCollection()); + // Do not remove <Object>: workaround for Java 7 type inference. + return ImmutableList.<Object>copyOf(set.toCollection()); } public boolean isEmpty() { diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Type.java b/src/main/java/com/google/devtools/build/lib/syntax/Type.java index a3d348cd9d..342c9006e1 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/Type.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/Type.java @@ -622,7 +622,8 @@ public abstract class Type<T> { } else if (x instanceof List) { return (List<Object>) x; } else if (x instanceof Iterable) { - return ImmutableList.copyOf((Iterable<?>) x); + // Do not remove <Object>: workaround for Java 7 type inference. + return ImmutableList.<Object>copyOf((Iterable<?>) x); } else { throw new ConversionException(this, x, what); } |