[jbosstools-commits] JBoss Tools SVN: r41969 - trunk/common/plugins/org.jboss.tools.common.validation/src/org/jboss/tools/common/validation/java.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Thu Jun 14 08:42:50 EDT 2012


Author: vrubezhny
Date: 2012-06-14 08:42:49 -0400 (Thu, 14 Jun 2012)
New Revision: 41969

Modified:
   trunk/common/plugins/org.jboss.tools.common.validation/src/org/jboss/tools/common/validation/java/JavaDirtyRegionProcessor.java
Log:
JBIDE-10738
As-you-type EL validation

Avoided multiple sequential validations on the same region

Modified: trunk/common/plugins/org.jboss.tools.common.validation/src/org/jboss/tools/common/validation/java/JavaDirtyRegionProcessor.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.validation/src/org/jboss/tools/common/validation/java/JavaDirtyRegionProcessor.java	2012-06-14 11:58:49 UTC (rev 41968)
+++ trunk/common/plugins/org.jboss.tools.common.validation/src/org/jboss/tools/common/validation/java/JavaDirtyRegionProcessor.java	2012-06-14 12:42:49 UTC (rev 41969)
@@ -11,8 +11,10 @@
 package org.jboss.tools.common.validation.java;
 
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.jdt.core.ICompilationUnit;
@@ -65,6 +67,10 @@
 	private boolean fIsCanceled = false;
 	private boolean fInRewriteSession = false;
 	private IDocumentRewriteSessionListener fDocumentRewriteSessionListener = new DocumentRewriteSessionListener();
+	private Set<ITypedRegion> fPartitionsToProcess = new HashSet<ITypedRegion>();
+	private int fStartPartitionsToProcess = -1;
+	private int fEndPartitionsToProcess = -1;
+
 	// AsYouType EL Validation 'marker type' name. 
 	// marker type is used in the quickFixProcessor extension point
 	public static final String MARKER_TYPE= "org.jboss.tools.common.validation.el"; //$NON-NLS-1$
@@ -421,6 +427,13 @@
 		super.uninstall();
 	}
 
+	@Override
+	protected void beginProcessing() {
+		fPartitionsToProcess.clear();
+		fStartPartitionsToProcess = -1;
+		fEndPartitionsToProcess = -1;
+	}
+
 	protected void process(DirtyRegion dirtyRegion) {
 		IDocument doc = getDocument();
 		
@@ -462,16 +475,31 @@
 			LogHelper.logError(CommonValidationPlugin.getDefault(), e);
 		}
 
+		fStartPartitionsToProcess = (fStartPartitionsToProcess == -1 || fStartPartitionsToProcess > start) ? start : fStartPartitionsToProcess;
+		fEndPartitionsToProcess = (fEndPartitionsToProcess == -1 || fEndPartitionsToProcess < end) ? end : fEndPartitionsToProcess;
+
 		ITypedRegion[] partitions = computePartitioning(start, end - start);
 
 		if (fReporter != null) {
 			fReporter.clearAnnotations(start, end);
 		}
-		for (int i = 0; i < partitions.length; i++) {
-			if (partitions[i] != null && !fIsCanceled && IJavaPartitions.JAVA_STRING.equals(partitions[i].getType())) {
-				if (fValidatorManager != null)
-					fValidatorManager.validate(partitions[i], fHelper, fReporter);
+		for (ITypedRegion partition : partitions) {
+			if (partition != null && !fIsCanceled && IJavaPartitions.JAVA_STRING.equals(partition.getType()) && !fPartitionsToProcess.contains(partition)) {
+				fPartitionsToProcess.add(partition);
 			}
 		}
 	}
+
+	@Override
+	protected void endProcessing() {
+		if (fValidatorManager == null || fPartitionsToProcess.isEmpty() || fStartPartitionsToProcess == -1 || fEndPartitionsToProcess == -1) 
+			return;
+		
+		if (fReporter != null) {
+			fReporter.clearAnnotations(fStartPartitionsToProcess, fEndPartitionsToProcess);
+		}
+		for (ITypedRegion partition : fPartitionsToProcess) {
+			fValidatorManager.validate(partition, fHelper, fReporter);
+		}
+	}
 }
\ No newline at end of file



More information about the jbosstools-commits mailing list