Author: xcoulon
Date: 2012-08-01 05:51:49 -0400 (Wed, 01 Aug 2012)
New Revision: 42827
Modified:
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/builder/JavaElementDeltaFilter.java
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/builder/JavaElementDeltaFilterTestCase.java
Log:
Fixed - JBIDE-12095
JAX-RS facet in JBoss Tools chokes on package-info.java
Modified:
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/builder/JavaElementDeltaFilter.java
===================================================================
---
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/builder/JavaElementDeltaFilter.java 2012-08-01
09:20:22 UTC (rev 42826)
+++
trunk/ws/plugins/org.jboss.tools.ws.jaxrs.core/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/builder/JavaElementDeltaFilter.java 2012-08-01
09:51:49 UTC (rev 42827)
@@ -37,6 +37,7 @@
import java.util.Iterator;
import java.util.List;
+import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.ElementChangedEvent;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaElementDelta;
@@ -122,7 +123,8 @@
int deltaKind = event.getDeltaKind();
IJavaElement element = event.getElement();
// prevent processing java elements in a closed java project
- if (element.getJavaProject() != null &&
!element.getJavaProject().getProject().isOpen()) {
+ // prevent processing of any file named 'package-info.java'
+ if (isProjectClosed(element) || isPackageInfoFile(element)) {
return false;
}
int flags = event.getFlags();
@@ -139,6 +141,24 @@
return match;
}
+ /**
+ * Returns true if the element resource is a file named 'package-info.java'
(whatever the containing folder)
+ * @param element
+ * @return
+ */
+ private boolean isPackageInfoFile(IJavaElement element) {
+ return element.getResource() != null && element.getResource().getType() ==
IResource.FILE &&
element.getResource().getName().equals("package-info.java");
+ }
+
+ /**
+ * Returns true if the enclosing project is closed
+ * @param element
+ * @return
+ */
+ private boolean isProjectClosed(IJavaElement element) {
+ return element.getJavaProject() != null &&
!element.getJavaProject().getProject().isOpen();
+ }
+
protected boolean apply(int elementKind, int deltaKind, int eventType, int flags,
boolean workingCopy) {
Rule matcher = new Rule(elementKind, deltaKind, eventType, workingCopy ? WORKING_COPY :
PRIMARY_COPY, flags);
for (Iterator<Rule> iterator = rules.iterator(); iterator.hasNext();) {
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-08-01
09:20:22 UTC (rev 42826)
+++
trunk/ws/tests/org.jboss.tools.ws.jaxrs.core.test/src/org/jboss/tools/ws/jaxrs/core/internal/metamodel/builder/JavaElementDeltaFilterTestCase.java 2012-08-01
09:51:49 UTC (rev 42827)
@@ -26,6 +26,7 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMethod;
@@ -100,5 +101,20 @@
IJavaElement element = createMock(IMethod.class, METHOD);
assertFalse("Wrong result", filter.apply(createEvent(element, CHANGED,
POST_RECONCILE, NO_FLAG)));
}
+
+ @Test
+ public void shouldNotAcceptChangesInPackageInfoFile() {
+ IJavaElement element = createMock(IType.class, ANNOTATION, workingCopy);
+ IResource resource = mock(IResource.class);
+ when(element.getResource()).thenReturn(resource);
+ when(resource.getType()).thenReturn(IResource.FILE);
+ when(resource.getName()).thenReturn("package-info.java");
+ 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)));
+ assertFalse("Wrong result", filter.apply(createEvent(element, CHANGED,
POST_CHANGE, NO_FLAG)));
+ assertFalse("Wrong result", filter.apply(createEvent(element, REMOVED,
POST_RECONCILE, NO_FLAG)));
+ assertFalse("Wrong result", filter.apply(createEvent(element, REMOVED,
POST_CHANGE, NO_FLAG)));
+ }
}