[jbosstools-commits] JBoss Tools SVN: r42571 - 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
Fri Jul 13 07:30:27 EDT 2012


Author: vrubezhny
Date: 2012-07-13 07:30:26 -0400 (Fri, 13 Jul 2012)
New Revision: 42571

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 

NPE is fixed

JBIDE-12319
As you type does not restore marker state when editor is returned to unmodified stade by Undo/Redo actions 

Issue is fixed


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-07-13 10:27:41 UTC (rev 42570)
+++ trunk/common/plugins/org.jboss.tools.common.validation/src/org/jboss/tools/common/validation/java/JavaDirtyRegionProcessor.java	2012-07-13 11:30:26 UTC (rev 42571)
@@ -65,6 +65,7 @@
 	private JavaELProblemReporter fReporter;
 	private AsYouTypeValidatorManager fValidatorManager;
 
+	private boolean fDocumentJustSetup = false;
 	private boolean fIsCanceled = false;
 	private boolean fInRewriteSession = false;
 	private IDocumentRewriteSessionListener fDocumentRewriteSessionListener = new DocumentRewriteSessionListener();
@@ -301,6 +302,7 @@
 				fReporter.update();
 			}
 		}
+		fDocumentJustSetup = true;
 	}
 
 	@Override
@@ -328,9 +330,17 @@
 		fEndPartitionsToProcess = -1;
 	}
 
+	private boolean isEditorDirty() {
+		if (fDocumentJustSetup && fEditor.isDirty()) {
+			fDocumentJustSetup = false;
+		}
+		
+		return !fDocumentJustSetup;
+	}
+
 	protected void process(DirtyRegion dirtyRegion) {
 		IDocument doc = getDocument();
-		if (!fEditor.isDirty() || !isInstalled() || isInRewrite() || dirtyRegion == null || doc == null || fIsCanceled) {
+		if (!isEditorDirty() || !isInstalled() || isInRewrite() || dirtyRegion == null || doc == null || fIsCanceled) {
 			return;
 		}
 
@@ -419,20 +429,7 @@
 		boolean result = false;
 		boolean atLeastOneElementIsProcessed = false;
 		
-		int start = fStartRegionToProcess;
-		int end = fEndRegionToProcess;
-		
-		ITypedRegion[] partitions = computePartitioning(fStartPartitionsToProcess, fEndPartitionsToProcess - fStartPartitionsToProcess);
-		
-		ITypedRegion startPartition = findPartitionByOffset(partitions, start);
-		ITypedRegion endPartition = (startPartition != null && end >= startPartition.getOffset() && end < startPartition.getOffset() + startPartition.getLength()) ?
-				startPartition : findPartitionByOffset(partitions, end);
-		
-		if (startPartition != null && startPartition.equals(endPartition) && !isProcessingRequiredForPartition(startPartition)) {
-			return false;
-		}
-		
-		int position = start;
+		int position = fStartRegionToProcess;
 		try {
 			IJavaElement element = null;
 			while (position >= 0 && (element = unit.getElementAt(position--)) == null)
@@ -441,7 +438,18 @@
 			if (position < 0)
 				position = 0;
 
-			while (position < end) {
+			ITypedRegion[] partitions = computePartitioning(position, fEndPartitionsToProcess - position);
+			
+			ITypedRegion startPartition = findPartitionByOffset(partitions, position);
+			ITypedRegion endPartition = (startPartition != null && fEndRegionToProcess >= startPartition.getOffset() && 
+					fEndRegionToProcess < startPartition.getOffset() + startPartition.getLength()) ?
+					startPartition : findPartitionByOffset(partitions, fEndRegionToProcess);
+			
+			if (startPartition != null && startPartition.equals(endPartition) && !isProcessingRequiredForPartition(startPartition)) {
+				return false;
+			}
+
+			while (position <= fEndRegionToProcess) {
 				ITypedRegion partition = findPartitionByOffset(partitions, position);
 				if(!isProcessingRequiredForPartition(partition)) {
 					position = partition.getOffset() + partition.getLength();
@@ -488,6 +496,9 @@
 	}
 	
 	private boolean isProcessingRequiredForPartition(ITypedRegion partition) {
+		if (partition == null)
+			return false;
+		
 		String type = partition.getType();
 		return !(IJavaPartitions.JAVA_STRING.equals(type) || IJavaPartitions.JAVA_CHARACTER.equals(type) ||
 				IJavaPartitions.JAVA_SINGLE_LINE_COMMENT.equals(type) || 



More information about the jbosstools-commits mailing list