[jbosstools-commits] JBoss Tools SVN: r42508 - 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
Wed Jul 11 10:40:38 EDT 2012
Author: vrubezhny
Date: 2012-07-11 10:40:38 -0400 (Wed, 11 Jul 2012)
New Revision: 42508
Modified:
trunk/common/plugins/org.jboss.tools.common.validation/src/org/jboss/tools/common/validation/java/JavaDirtyRegionProcessor.java
Log:
JBIDE-10611
As-you-type CDI validation
Improved Dirty Regions Processing due to exclude extra validation calls.
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-11 13:07:36 UTC (rev 42507)
+++ trunk/common/plugins/org.jboss.tools.common.validation/src/org/jboss/tools/common/validation/java/JavaDirtyRegionProcessor.java 2012-07-11 14:40:38 UTC (rev 42508)
@@ -335,7 +335,7 @@
}
int start = dirtyRegion.getOffset();
- int end = dirtyRegion.getOffset() + dirtyRegion.getLength();
+ int end = DirtyRegion.REMOVE.equals(dirtyRegion.getType()) ? dirtyRegion.getOffset() : dirtyRegion.getOffset() + dirtyRegion.getLength();
// Check the document boundaries
int docLen = doc.getLength();
@@ -376,9 +376,6 @@
ITypedRegion[] partitions = computePartitioning(start, end - start);
- if (fReporter != null) {
- fReporter.clearAnnotations(start, end);
- }
for (ITypedRegion partition : partitions) {
if (partition != null && !fIsCanceled) {
if (IJavaPartitions.JAVA_STRING.equals(partition.getType()) && !fPartitionsToProcess.contains(partition)) {
@@ -404,7 +401,7 @@
fValidatorManager.validateString(partition, fHelper, fReporter);
}
- if (isJavaElementValidationRequired(fStartRegionToProcess, fEndRegionToProcess)) {
+ if (isJavaElementValidationRequired()) {
// try {
// System.out.println("validateJavaElement: " + fStartRegionToProcess + "->" + fEndRegionToProcess + ": [" + fDocument.get(fStartRegionToProcess, fEndRegionToProcess - fStartRegionToProcess)+ "]");
// } catch (BadLocationException e) {
@@ -414,13 +411,27 @@
}
}
- private boolean isJavaElementValidationRequired(int start, int end) {
+ private boolean isJavaElementValidationRequired() {
ICompilationUnit unit = fReporter.getCompilationUnit();
if (unit == null)
return false;
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;
try {
IJavaElement element = null;
@@ -431,12 +442,18 @@
position = 0;
while (position < end) {
+ ITypedRegion partition = findPartitionByOffset(partitions, position);
+ if(!isProcessingRequiredForPartition(partition)) {
+ position = partition.getOffset() + partition.getLength();
+ continue;
+ }
+
element = unit.getElementAt(position++);
- if (element != null) {
- atLeastOneElementIsProcessed = true;
- if (element.getElementType() == IJavaElement.METHOD)
- continue;
-
+ if (element == null)
+ continue;
+
+ atLeastOneElementIsProcessed = true;
+ if (element.getElementType() != IJavaElement.METHOD) {
IJavaElement parent = element.getParent();
boolean doSkipThisElement = false;
while (parent != null && parent.getElementType() != IJavaElement.COMPILATION_UNIT) {
@@ -455,8 +472,26 @@
LogHelper.logError(CommonValidationPlugin.getDefault(), e);
}
- result = atLeastOneElementIsProcessed ? result : true;
- return result ;
+ return atLeastOneElementIsProcessed ? result : true;
}
+ private ITypedRegion findPartitionByOffset(ITypedRegion[] partitions, int offset) {
+ if (partitions == null)
+ return null;
+
+ for (ITypedRegion partition : partitions) {
+ if (offset >= partition.getOffset() && offset < partition.getOffset() + partition.getLength())
+ return partition;
+ }
+
+ return null;
+ }
+
+ private boolean isProcessingRequiredForPartition(ITypedRegion partition) {
+ String type = partition.getType();
+ return !(IJavaPartitions.JAVA_STRING.equals(type) || IJavaPartitions.JAVA_CHARACTER.equals(type) ||
+ IJavaPartitions.JAVA_SINGLE_LINE_COMMENT.equals(type) ||
+ IJavaPartitions.JAVA_MULTI_LINE_COMMENT.equals(type) || IJavaPartitions.JAVA_DOC.equals(type));
+ }
+
}
\ No newline at end of file
More information about the jbosstools-commits
mailing list