From 52c3d908e2d0beffff7336052cf3fc9849d8092b Mon Sep 17 00:00:00 2001 From: cparsons Date: Thu, 22 Mar 2018 08:42:22 -0700 Subject: Add annotation-processor verification that only one of Param.type or Param.allowedTypes is used. RELNOTES: None. PiperOrigin-RevId: 190070309 --- .../processor/SkylarkCallableProcessorTest.java | 11 ++++++ .../processor/testsources/GoldenCase.java | 11 ++++-- .../processor/testsources/ParamTypeConflict.java | 41 ++++++++++++++++++++++ 3 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ParamTypeConflict.java (limited to 'src/test') diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessorTest.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessorTest.java index 6459051e0c..7e7291a14e 100644 --- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessorTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/SkylarkCallableProcessorTest.java @@ -133,4 +133,15 @@ public final class SkylarkCallableProcessorTest { .withErrorContaining( "Parameter 'a_parameter' has 'None' default value but is not noneable."); } + + @Test + public void testParamTypeConflict() throws Exception { + assertAbout(javaSource()) + .that(getFile("ParamTypeConflict.java")) + .processedWith(new SkylarkCallableProcessor()) + .failsToCompile() + .withErrorContaining( + "Parameter 'a_parameter' has both 'type' and 'allowedTypes' specified." + + " Only one may be specified."); + } } diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/GoldenCase.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/GoldenCase.java index 815ba22bf1..1eb207719f 100644 --- a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/GoldenCase.java +++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/GoldenCase.java @@ -16,6 +16,7 @@ package com.google.devtools.build.lib.skylarkinterface.processor.testsources; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.skylarkinterface.Param; +import com.google.devtools.build.lib.skylarkinterface.ParamType; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.FuncallExpression; @@ -74,10 +75,14 @@ public class GoldenCase { parameters = { @Param(name = "one", type = String.class, named = true), @Param(name = "two", type = Integer.class, named = true), - @Param(name = "three", type = String.class, named = true, defaultValue = "None", - noneable = true), + @Param(name = "three", + allowedTypes = { + @ParamType(type = String.class), + @ParamType(type = Integer.class), + }, + named = true, defaultValue = "None", noneable = true), }) - public String threeArgMethodWithParams(String one, Integer two, String three) { + public String threeArgMethodWithParams(String one, Integer two, Object three) { return "baz"; } diff --git a/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ParamTypeConflict.java b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ParamTypeConflict.java new file mode 100644 index 0000000000..cda282f9ac --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/skylarkinterface/processor/testsources/ParamTypeConflict.java @@ -0,0 +1,41 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.build.lib.skylarkinterface.processor.testsources; + +import com.google.devtools.build.lib.skylarkinterface.Param; +import com.google.devtools.build.lib.skylarkinterface.ParamType; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; + +/** + * Test case for a SkylarkCallable method which has a parameter with both type and allowedTypes + * specified. + */ +public class ParamTypeConflict { + + @SkylarkCallable( + name = "param_type_conflict", + doc = "", + parameters = { + @Param(name = "a_parameter", + type = String.class, + named = true, + allowedTypes = { + @ParamType(type = String.class), + }) + }) + public Integer paramTypeConflict() { + return 42; + } +} -- cgit v1.2.3