[jbosstools-commits] JBoss Tools SVN: r41687 - in trunk/ws: plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/jdt and 1 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Mon Jun 4 11:43:43 EDT 2012


Author: xcoulon
Date: 2012-06-04 11:43:42 -0400 (Mon, 04 Jun 2012)
New Revision: 41687

Modified:
   trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsEndpoint.java
   trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsHttpMethod.java
   trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsResourceMethod.java
   trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/jdt/JavaMethodSignaturesVisitor.java
   trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/jdt/JdtUtilsTestCase.java
Log:
Fixed - JBIDE-11886
NPE when adding PathParam annotation through Annotation Properties view

Modified: trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsEndpoint.java
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsEndpoint.java	2012-06-04 15:38:47 UTC (rev 41686)
+++ trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsEndpoint.java	2012-06-04 15:43:42 UTC (rev 41687)
@@ -233,7 +233,7 @@
 	private void refreshUriPathTemplate() {
 		// compute the URI Path Template from the chain of Methods/Resources
 		StringBuilder uriPathTemplateBuilder = new StringBuilder();
-		if (application != null) {
+		if (application != null && application.getApplicationPath() != null) {
 			uriPathTemplateBuilder.append(application.getApplicationPath());
 		}
 		for (JaxrsResourceMethod resourceMethod : resourceMethods) {
@@ -266,8 +266,10 @@
 		for (Iterator<JavaMethodParameter> iterator = matrixParameters.iterator(); iterator.hasNext();) {
 			JavaMethodParameter matrixParam = iterator.next();
 			final Annotation matrixParamAnnotation = matrixParam.getAnnotation(MatrixParam.class.getName());
-			uriPathTemplateBuilder.append(";").append(matrixParamAnnotation.getValue("value")).append("={")
-					.append(matrixParam.getTypeName()).append("}");
+			if(matrixParamAnnotation.getValue("value") != null) {
+				uriPathTemplateBuilder.append(";").append(matrixParamAnnotation.getValue("value")).append("={")
+						.append(matrixParam.getTypeName()).append("}");
+			}
 		}
 	}
 
@@ -286,18 +288,20 @@
 				JavaMethodParameter queryParam = iterator.next();
 				final Annotation queryParamAnnotation = queryParam.getAnnotation(QueryParam.class.getName());
 				final String paramName = queryParamAnnotation.getValue("value");
-				final String paramType = queryParam.getTypeName();
-				uriPathTemplateBuilder.append(paramName).append("={");
-				uriPathTemplateBuilder.append(paramName).append(":").append(paramType);
-				final Annotation defaultValueAnnotation = queryParam.getAnnotation(DefaultValue.class.getName());
-				if (defaultValueAnnotation != null) {
-					uriPathTemplateBuilder.append('=').append(defaultValueAnnotation.getValue("value"));
+				if(paramName != null) {
+					final String paramType = queryParam.getTypeName();
+					uriPathTemplateBuilder.append(paramName).append("={");
+					uriPathTemplateBuilder.append(paramName).append(":").append(paramType);
+					final Annotation defaultValueAnnotation = queryParam.getAnnotation(DefaultValue.class.getName());
+					if (defaultValueAnnotation != null) {
+						uriPathTemplateBuilder.append('=').append(defaultValueAnnotation.getValue("value"));
+					}
+					uriPathTemplateBuilder.append('}');
+	
+					if (iterator.hasNext()) {
+						uriPathTemplateBuilder.append('&');
+					}
 				}
-				uriPathTemplateBuilder.append('}');
-
-				if (iterator.hasNext()) {
-					uriPathTemplateBuilder.append('&');
-				}
 			}
 		}
 	}

Modified: trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsHttpMethod.java
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsHttpMethod.java	2012-06-04 15:38:47 UTC (rev 41686)
+++ trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsHttpMethod.java	2012-06-04 15:43:42 UTC (rev 41687)
@@ -172,6 +172,9 @@
 
 	@Override
 	public final int compareTo(final IJaxrsHttpMethod other) {
+		if(this.getHttpVerb() == null) {
+			return 1;
+		}
 		if (this.getHttpVerb().equals(other.getHttpVerb())) {
 			return 0;
 		}

Modified: trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsResourceMethod.java
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsResourceMethod.java	2012-06-04 15:38:47 UTC (rev 41686)
+++ trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsResourceMethod.java	2012-06-04 15:43:42 UTC (rev 41687)
@@ -276,7 +276,7 @@
 			for (JavaMethodParameter parameter : this.javaMethodParameters) {
 				final Annotation annotation = parameter
 						.getAnnotation(PathParam.class.getName());
-				if (annotation != null
+				if (annotation != null && annotation.getValue("value") != null
 						&& annotation.getValue("value").equals(proposal)) {
 					matching = true;
 					break;
@@ -309,14 +309,16 @@
 					.getAnnotation(PathParam.class.getName());
 			if (annotation != null) {
 				final String value = annotation.getValue("value");
-				if (!pathParamValueProposals.contains(value)) {
-					final String msg = NLS
-							.bind(ValidationMessages.INVALID_PATHPARAM_VALUE,
-									pathParamValueProposals);
-					final TypedRegion region = annotation.getRegion();
-					ValidatorMessage validationMsg = createValidationMessage(msg, IMarker.SEVERITY_ERROR, region.getOffset(), region.getLength());
-					hasErrors(true);
-					messages.add(validationMsg);
+				if(value != null) {
+					if (!pathParamValueProposals.contains(value)) {
+						final String msg = NLS
+								.bind(ValidationMessages.INVALID_PATHPARAM_VALUE,
+										pathParamValueProposals);
+						final TypedRegion region = annotation.getRegion();
+						ValidatorMessage validationMsg = createValidationMessage(msg, IMarker.SEVERITY_ERROR, region.getOffset(), region.getLength());
+						hasErrors(true);
+						messages.add(validationMsg);
+					}
 				}
 			}
 		}
@@ -484,7 +486,7 @@
 	public List<String> getPathParamValueProposals() {
 		final List<String> proposals = new ArrayList<String>();
 		final Annotation methodPathAnnotation = getPathAnnotation();
-		if (methodPathAnnotation != null) {
+		if (methodPathAnnotation != null && methodPathAnnotation.getValue("value") != null) {
 			final String value = methodPathAnnotation.getValue("value");
 			proposals.addAll(extractParamsFromUriTemplateFragment(value));
 		}

Modified: trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/jdt/JavaMethodSignaturesVisitor.java
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/jdt/JavaMethodSignaturesVisitor.java	2012-06-04 15:38:47 UTC (rev 41686)
+++ trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/jdt/JavaMethodSignaturesVisitor.java	2012-06-04 15:43:42 UTC (rev 41687)
@@ -138,12 +138,14 @@
 		final Map<String, List<String>> annotationElements = new HashMap<String, List<String>>();
 		for (IMemberValuePairBinding binding : annotationBinding.getAllMemberValuePairs()) {
 			final List<String> values = new ArrayList<String>();
-			if (binding.getValue() instanceof Object[]) {
-				for (Object v : (Object[]) binding.getValue()) {
-					values.add(v.toString());
+			if(binding.getValue() != null) {
+				if (binding.getValue() instanceof Object[]) {
+					for (Object v : (Object[]) binding.getValue()) {
+						values.add(v.toString());
+					}
+				} else {
+					values.add(binding.getValue().toString());
 				}
-			} else {
-				values.add(binding.getValue().toString());
 			}
 			annotationElements.put(binding.getName(), values);
 		}

Modified: trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/jdt/JdtUtilsTestCase.java
===================================================================
--- trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/jdt/JdtUtilsTestCase.java	2012-06-04 15:38:47 UTC (rev 41686)
+++ trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/jdt/JdtUtilsTestCase.java	2012-06-04 15:43:42 UTC (rev 41687)
@@ -30,6 +30,7 @@
 import javax.ws.rs.GET;
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.Response;
 
@@ -454,6 +455,22 @@
 	}
 
 	@Test
+	public void shouldResolveJavaMethodSignaturesWithNullAnnotationValue() throws CoreException {
+		// pre-condition
+		final IType type = getType("org.jboss.tools.ws.jaxrs.sample.services.CustomerResource");
+		IMethod method = WorkbenchUtils.getMethod(type, "getCustomer");
+		method = WorkbenchUtils.replaceFirstOccurrenceOfCode(method, "@PathParam(\"id\") Integer id", "@PathParam() Integer id",
+				false);
+		// operation
+		final JavaMethodSignature methodSignature = JdtUtils.resolveMethodSignature(method,
+				JdtUtils.parse(type, progressMonitor));
+		// verification
+		Assert.assertNotNull(methodSignature);
+		Assert.assertEquals(2, methodSignature.getMethodParameters().size());
+		Assert.assertNull(methodSignature.getMethodParameters().get(0).getAnnotation(PathParam.class.getName()).getValue("value"));
+	}
+	
+	@Test
 	public void shouldResolveJavaMethodSignaturesForParameterizedType() throws CoreException {
 		final IType type = getType("org.jboss.tools.ws.jaxrs.sample.services.ParameterizedResource");
 		// operation



More information about the jbosstools-commits mailing list