Author: xcoulon
Date: 2012-10-17 15:20:11 -0400 (Wed, 17 Oct 2012)
New Revision: 44566
Modified:
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsJavaElement.java
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsMetamodel.java
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsWebxmlApplication.java
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/AbstractJaxrsElementValidatorDelegate.java
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsJavaApplicationValidatorDelegate.java
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsMetamodelValidator.java
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/metamodel/IJaxrsElement.java
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/builder/JavaElementDeltaFilterTestCase.java
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsApplicationValidatorTestCase.java
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsHttpMethodValidatorTestCase.java
Log:
Fixed - JBIDE-12885 - JAX-RS validator shouldn't care about binary classes
https://issues.jboss.org/browse/JBIDE-12885
Modified:
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsJavaElement.java
===================================================================
---
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsJavaElement.java 2012-10-17
19:10:53 UTC (rev 44565)
+++
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsJavaElement.java 2012-10-17
19:20:11 UTC (rev 44566)
@@ -100,6 +100,14 @@
}
}
+ @Override
+ public boolean isBinary() {
+ if(this.javaElement == null) {
+ return true;
+ }
+ return this.javaElement.isBinary();
+ }
+
public Annotation getAnnotation(String className) {
return annotations.get(className);
}
Modified:
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsMetamodel.java
===================================================================
---
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsMetamodel.java 2012-10-17
19:10:53 UTC (rev 44565)
+++
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsMetamodel.java 2012-10-17
19:20:11 UTC (rev 44566)
@@ -120,6 +120,12 @@
}
@Override
+ public boolean isBinary() {
+ // Metamodel is never binary
+ return false;
+ }
+
+ @Override
public EnumElementKind getElementKind() {
return EnumElementKind.METAMODEL;
}
Modified:
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsWebxmlApplication.java
===================================================================
---
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsWebxmlApplication.java 2012-10-17
19:10:53 UTC (rev 44565)
+++
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/domain/JaxrsWebxmlApplication.java 2012-10-17
19:20:11 UTC (rev 44566)
@@ -3,6 +3,8 @@
import static
org.jboss.tools.ws.jaxrs.core.internal.metamodel.builder.JaxrsElementDelta.F_APPLICATION_PATH_VALUE;
import org.eclipse.core.resources.IResource;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.jboss.tools.ws.jaxrs.core.jdt.EnumJaxrsClassname;
import org.jboss.tools.ws.jaxrs.core.metamodel.EnumElementCategory;
import org.jboss.tools.ws.jaxrs.core.metamodel.EnumElementKind;
@@ -28,6 +30,17 @@
this.javaClassName = applicationClassName;
}
+
+ @Override
+ public boolean isBinary() {
+ final IJavaProject javaProject = getMetamodel().getJavaProject();
+ IPackageFragmentRoot fragment = javaProject.getPackageFragmentRoot(webxmlResource);
+ if(fragment != null && fragment.exists() && fragment.isArchive()) {
+ return true;
+ }
+ return false;
+
+ }
/**
* @return true if the applicationClassName given in the constructor matches an existing
Java Application in the
Modified:
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/AbstractJaxrsElementValidatorDelegate.java
===================================================================
---
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/AbstractJaxrsElementValidatorDelegate.java 2012-10-17
19:10:53 UTC (rev 44565)
+++
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/AbstractJaxrsElementValidatorDelegate.java 2012-10-17
19:20:11 UTC (rev 44566)
@@ -15,6 +15,7 @@
import org.eclipse.core.runtime.CoreException;
import org.jboss.tools.common.validation.TempMarkerManager;
import org.jboss.tools.ws.jaxrs.core.internal.utils.Logger;
+import org.jboss.tools.ws.jaxrs.core.metamodel.IJaxrsElement;
/**
* Abstract validator delegate with bits of generics for better readability in
subclasses
@@ -22,7 +23,7 @@
* @author Xavier Coulon
*
*/
-public abstract class AbstractJaxrsElementValidatorDelegate<T extends Object> {
+public abstract class AbstractJaxrsElementValidatorDelegate<T extends
IJaxrsElement> {
private final T element;
Modified:
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsJavaApplicationValidatorDelegate.java
===================================================================
---
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsJavaApplicationValidatorDelegate.java 2012-10-17
19:10:53 UTC (rev 44565)
+++
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsJavaApplicationValidatorDelegate.java 2012-10-17
19:20:11 UTC (rev 44566)
@@ -42,8 +42,11 @@
public void validate() throws CoreException {
final JaxrsJavaApplication application = getElement();
JaxrsMetamodelValidator.deleteJaxrsMarkers(application);
+ if(application.getJavaElement().isBinary()) {
+ Logger.debug("Skipping validation on binary element {}", getElement());
+ return;
+ }
Logger.debug("Validating element {}", getElement());
-
final Annotation applicationPathAnnotation = application
.getAnnotation(EnumJaxrsClassname.APPLICATION_PATH.qualifiedName);
final IType appJavaElement = application.getJavaElement();
Modified:
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsMetamodelValidator.java
===================================================================
---
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsMetamodelValidator.java 2012-10-17
19:10:53 UTC (rev 44565)
+++
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsMetamodelValidator.java 2012-10-17
19:20:11 UTC (rev 44566)
@@ -113,15 +113,13 @@
Logger.debug("*** Validating project {} after files {} changed... ***",
project.getName(),
changedFiles.toString());
final JaxrsMetamodel jaxrsMetamodel = JaxrsMetamodelLocator.get(project);
- final Set<IResource> allResources = completeValidationSet(jaxrsMetamodel,
changedFiles.toArray(new IFile[changedFiles.size()]));
- for (IResource changedResource : allResources) {
- validate(reporter, changedResource, jaxrsMetamodel);
+ if(jaxrsMetamodel != null) { // prevent failure in case validation would be called at
workbench startup, even before metamodel is built.
+ final Set<IResource> allResources = completeValidationSet(jaxrsMetamodel,
changedFiles.toArray(new IFile[changedFiles.size()]));
+ for (IResource changedResource : allResources) {
+ validate(reporter, changedResource, jaxrsMetamodel);
+ }
}
}
- // trigger a full validation instead
- else {
- //validateAll(project, validationHelper, context, manager, reporter);
- }
} catch (CoreException e) {
Logger.error("Failed to validate changed files " + changedFiles + " in
project " + project, e);
} finally {
@@ -235,6 +233,10 @@
*/
@SuppressWarnings("incomplete-switch")
private void validate(IJaxrsElement element) throws CoreException {
+ // skip validation on binary JAX-RS elements (if metamodel contains any)
+ if(element.isBinary()) {
+ return;
+ }
switch (element.getElementCategory()) {
case METAMODEL:
new JaxrsMetamodelValidatorDelegate(this, (JaxrsMetamodel)element).validate();
Modified:
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/metamodel/IJaxrsElement.java
===================================================================
---
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/metamodel/IJaxrsElement.java 2012-10-17
19:10:53 UTC (rev 44565)
+++
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/metamodel/IJaxrsElement.java 2012-10-17
19:20:11 UTC (rev 44566)
@@ -28,6 +28,8 @@
public abstract IResource getResource();
public abstract String getName();
+
+ public abstract boolean isBinary();
}
Modified:
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/builder/JavaElementDeltaFilterTestCase.java
===================================================================
---
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/builder/JavaElementDeltaFilterTestCase.java 2012-10-17
19:10:53 UTC (rev 44565)
+++
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/builder/JavaElementDeltaFilterTestCase.java 2012-10-17
19:20:11 UTC (rev 44566)
@@ -125,6 +125,7 @@
when(element.getResource()).thenReturn(resource);
when(element.isArchive()).thenReturn(true);
when(resource.getType()).thenReturn(IResource.FILE);
+ when(resource.getName()).thenReturn("somearchive.jar");
assertFalse("Wrong result", filter.apply(createEvent(element, ADDED,
POST_RECONCILE, NO_FLAG)));
assertFalse("Wrong result", filter.apply(createEvent(element, ADDED,
POST_CHANGE, NO_FLAG)));
assertFalse("Wrong result", filter.apply(createEvent(element, CHANGED,
POST_RECONCILE, NO_FLAG)));
Modified:
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsApplicationValidatorTestCase.java
===================================================================
---
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsApplicationValidatorTestCase.java 2012-10-17
19:10:53 UTC (rev 44565)
+++
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsApplicationValidatorTestCase.java 2012-10-17
19:20:11 UTC (rev 44566)
@@ -12,6 +12,13 @@
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
+import static
org.jboss.tools.ws.jaxrs.core.internal.metamodel.validation.MarkerUtils.deleteJaxrsMarkers;
+import static
org.jboss.tools.ws.jaxrs.core.internal.metamodel.validation.MarkerUtils.findJaxrsMarkers;
+import static
org.jboss.tools.ws.jaxrs.core.internal.metamodel.validation.MarkerUtils.hasPreferenceKey;
+import static
org.jboss.tools.ws.jaxrs.core.preferences.JaxrsPreferences.APPLICATION_NO_OCCURRENCE_FOUND;
+import static
org.jboss.tools.ws.jaxrs.core.preferences.JaxrsPreferences.APPLICATION_TOO_MANY_OCCURRENCES;
+import static
org.jboss.tools.ws.jaxrs.core.preferences.JaxrsPreferences.JAVA_APPLICATION_INVALID_TYPE_HIERARCHY;
+import static
org.jboss.tools.ws.jaxrs.core.preferences.JaxrsPreferences.JAVA_APPLICATION_MISSING_APPLICATION_PATH_ANNOTATION;
import static org.junit.Assert.assertThat;
import java.util.List;
@@ -40,11 +47,8 @@
import org.jboss.tools.ws.jaxrs.core.jdt.JdtUtils;
import org.jboss.tools.ws.jaxrs.core.metamodel.EnumElementKind;
import org.jboss.tools.ws.jaxrs.core.metamodel.IJaxrsApplication;
-import static org.jboss.tools.ws.jaxrs.core.preferences.JaxrsPreferences.*;
import org.junit.Test;
-import static org.jboss.tools.ws.jaxrs.core.internal.metamodel.validation.MarkerUtils.*;
-
/**
* @author Xi
*
@@ -88,7 +92,7 @@
final IMarker[] markers = findJaxrsMarkers(project);
assertThat(markers.length, equalTo(0));
}
-
+
@Test
public void shouldNotReportProblemIfOneWebxmlApplicationExists() throws CoreException,
ValidationException {
// preconditions
Modified:
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsHttpMethodValidatorTestCase.java
===================================================================
---
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsHttpMethodValidatorTestCase.java 2012-10-17
19:10:53 UTC (rev 44565)
+++
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/validation/JaxrsHttpMethodValidatorTestCase.java 2012-10-17
19:20:11 UTC (rev 44566)
@@ -42,8 +42,10 @@
import org.jboss.tools.ws.jaxrs.core.WorkbenchUtils;
import org.jboss.tools.ws.jaxrs.core.builder.AbstractMetamodelBuilderTestCase;
import org.jboss.tools.ws.jaxrs.core.internal.metamodel.domain.JaxrsBaseElement;
+import org.jboss.tools.ws.jaxrs.core.internal.metamodel.domain.JaxrsElementFactory;
import org.jboss.tools.ws.jaxrs.core.internal.metamodel.domain.JaxrsHttpMethod;
import org.jboss.tools.ws.jaxrs.core.jdt.Annotation;
+import org.jboss.tools.ws.jaxrs.core.jdt.JdtUtils;
import org.junit.Test;
/**
@@ -79,6 +81,21 @@
}
@Test
+ public void shouldSkipValidationOnBinaryHttpMethod() throws CoreException,
ValidationException {
+ // preconditions: create an HttpMethod from the binary annotation, then try to
validate
+ final IType getType = WorkbenchUtils.getType("javax.ws.rs.GET",
javaProject);
+ final JaxrsHttpMethod httpMethod = new JaxrsElementFactory().createHttpMethod(getType,
JdtUtils.parse(getType, null), metamodel);
+ metamodel.add(httpMethod);
+ assertThat(findJaxrsMarkers(httpMethod).length, equalTo(0));
+ deleteJaxrsMarkers(httpMethod);
+ // operation
+ new JaxrsMetamodelValidator().validate(toSet(httpMethod.getResource()), project,
validationHelper, context,
+ validatorManager, reporter);
+ // validation
+ assertThat(findJaxrsMarkers(httpMethod).length, equalTo(0));
+ }
+
+ @Test
public void shouldReportProblemWhenHttpMethodVerbIsEmpty() throws CoreException,
ValidationException {
// preconditions
final IType fooType =
WorkbenchUtils.getType("org.jboss.tools.ws.jaxrs.sample.services.FOO",
javaProject);