From ec73016d2cbc5c76956357b01cad72dcf25b024d Mon Sep 17 00:00:00 2001 From: Ciaran Liedeman Date: Fri, 10 Feb 2017 19:42:15 +0200 Subject: [PATCH] Added fix for NPE for objects with methods 'get' or 'is' (#11) --- .../graphql/impl/GraphQLObjectMapper.java | 7 ++++-- .../graphql/impl/GraphQLObjectMapperTest.java | 24 +++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/bretpatterson/schemagen/graphql/impl/GraphQLObjectMapper.java b/src/main/java/com/bretpatterson/schemagen/graphql/impl/GraphQLObjectMapper.java index 53c87fb..9f938ec 100644 --- a/src/main/java/com/bretpatterson/schemagen/graphql/impl/GraphQLObjectMapper.java +++ b/src/main/java/com/bretpatterson/schemagen/graphql/impl/GraphQLObjectMapper.java @@ -154,10 +154,13 @@ private void buildGenericArgumentTypeMap(ParameterizedType type) { private Optional getFieldNameFromMethod(Method m) { Optional fieldName = Optional.absent(); - if (m.getName().startsWith("get")) { + + // Do not match 'get' method + if (m.getName().startsWith("get") && m.getName().length() > 3) { fieldName = Optional.of(m.getName().substring(3, 4).toLowerCase() + m.getName().substring(4)); } - if (m.getName().startsWith("is")) { + // Do not match 'is' method + if (m.getName().startsWith("is") && m.getName().length() > 2) { fieldName = Optional.of(m.getName().substring(2, 3).toLowerCase() + m.getName().substring(3)); } GraphQLQuery query = m.getAnnotation(GraphQLQuery.class); diff --git a/src/test/java/com/bretpatterson/schemagen/graphql/impl/GraphQLObjectMapperTest.java b/src/test/java/com/bretpatterson/schemagen/graphql/impl/GraphQLObjectMapperTest.java index 6ad9de6..70e2dff 100644 --- a/src/test/java/com/bretpatterson/schemagen/graphql/impl/GraphQLObjectMapperTest.java +++ b/src/test/java/com/bretpatterson/schemagen/graphql/impl/GraphQLObjectMapperTest.java @@ -571,4 +571,28 @@ public void testAbstractMethods() { assertEquals("field1", objectType.getFieldDefinition("field1").getName()); assertEquals(Scalars.GraphQLInt, objectType.getFieldDefinition("field1").getType()); } + + public class GetAndIs { + public GetAndIs get() { + return this; + } + + public boolean is(Object obj) { + return this == obj; + } + } + + /** + * Issue #10 + */ + @Test + public void testGetAndIs() { + IGraphQLObjectMapper graphQLObjectMapper = newGraphQLObjectMapper( + ImmutableList. builder().addAll(GraphQLSchemaBuilder.getDefaultTypeMappers()).build()); + + GraphQLObjectType objectType = (GraphQLObjectType) graphQLObjectMapper.getOutputType(new TypeToken() { + }.getType()); + + assertTrue(objectType.getFieldDefinitions().isEmpty()); + } }