public void start(BundleContext context) throws Exception {
		super.start(context);
		
	   IWorkspace workspace = ResourcesPlugin.getWorkspace();
	   
	   IResourceChangeListener listener = new IResourceChangeListener() {
		  @Override
	      public void resourceChanged(IResourceChangeEvent event) {
			  // blocking double check after replacing
			  if (!listenerLocked) {
		         IResourceDeltaVisitor visitor = new IResourceDeltaVisitor() {
		             public boolean visit(IResourceDelta delta) {
		                //only interested in changed resources (not added or removed)
		                if (delta.getKind() != IResourceDelta.CHANGED)
		                   return true;
		                //only interested in content changes
		                if ((delta.getFlags() & IResourceDelta.CONTENT) == 0)
		                   return true;
		                IResource resource = delta.getResource();
		                //only interested in files
		                if (resource.getType() == IResource.FILE) {
		                	ApexCheckstyleOnFilesJob job = 
		                			new ApexCheckstyleOnFilesJob((IFile)resource, false);
		                	job.setRule(ResourcesPlugin.getWorkspace().getRoot());
		                	job.schedule();
		                }
		                return true;
		             }
		          };
				try {
					event.getDelta().accept(visitor);
				} catch (CoreException e) {
					e.printStackTrace();
				}
			}
			
			listenerLocked = false;
	      }
		
	   };
	   
	   workspace.addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE);
	}