Author: akazakov
Date: 2009-02-20 16:28:30 -0500 (Fri, 20 Feb 2009)
New Revision: 13712
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/IValidationErrorManager.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamCoreValidator.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamELValidator.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidationContext.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidatorManager.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/ValidationErrorManager.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-3336 - Seam validator is called too often
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/IValidationErrorManager.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/IValidationErrorManager.java 2009-02-20
19:19:21 UTC (rev 13711)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/IValidationErrorManager.java 2009-02-20
21:28:30 UTC (rev 13712)
@@ -13,6 +13,7 @@
import java.util.Set;
import org.eclipse.core.resources.IResource;
+import org.eclipse.wst.validation.internal.operations.WorkbenchReporter;
import org.jboss.tools.seam.core.ISeamProject;
import org.jboss.tools.seam.core.ISeamTextSourceReference;
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamCoreValidator.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamCoreValidator.java 2009-02-20
19:19:21 UTC (rev 13711)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamCoreValidator.java 2009-02-20
21:28:30 UTC (rev 13712)
@@ -11,10 +11,8 @@
package org.jboss.tools.seam.internal.core.validation;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Map;
import java.util.Set;
import org.eclipse.core.resources.IFile;
@@ -59,7 +57,6 @@
import org.jboss.tools.seam.core.project.facet.SeamRuntime;
import org.jboss.tools.seam.internal.core.DataModelSelectionAttribute;
import org.jboss.tools.seam.internal.core.SeamComponentDeclaration;
-import org.jboss.tools.seam.internal.core.SeamJavaComponentDeclaration;
import org.jboss.tools.seam.internal.core.SeamProject;
import org.jboss.tools.seam.internal.core.SeamTextSourceReference;
@@ -130,10 +127,9 @@
if(!validateUnnamedResources) {
String fileName = currentFile.getName().toLowerCase();
// We need to check only file names here.
- validateUnnamedResources = fileName.endsWith(".java") ||
fileName.equals("components.xml"); //$NON-NLS-1$ $NON-NLS-2$
+ validateUnnamedResources = fileName.endsWith(".java") ||
fileName.endsWith(".properties") || fileName.equals("components.xml");
//$NON-NLS-1$ $NON-NLS-2$
}
if (checkFileExtension(currentFile)) {
- validateXMLVersion(currentFile);
// Get all variable names which were linked with this resource.
Set<String> oldVariablesNamesOfChangedFile =
validationContext.getVariableNamesByCoreResource(currentFile.getFullPath());
if(oldVariablesNamesOfChangedFile!=null) {
@@ -171,12 +167,20 @@
// Validate all collected linked resources.
// Remove all links between collected resources and variables names because they will
be linked again during validation.
validationContext.removeLinkedCoreResources(resources);
+
+ IFile[] filesToValidate = new IFile[resources.size()];
+ int i = 0;
+ // We have to remove markers from all collected source files first
for (IPath linkedResource : resources) {
- // Remove markers from collected source file
- IFile sourceFile = root.getFile(linkedResource);
- reporter.removeMessageSubset(validationManager, sourceFile,
ISeamValidator.MARKED_SEAM_RESOURCE_MESSAGE_GROUP);
+ filesToValidate[i] = root.getFile(linkedResource);
+ removeAllMessagesFromResource(filesToValidate[i++]);
+ }
+ i = 0;
+ // Then we can validate them
+ for (IPath linkedResource : resources) {
validateComponent(linkedResource, checkedComponents, newResources);
validateFactory(linkedResource, markedDuplicateFactoryNames);
+ validateXMLVersion(filesToValidate[i++]);
}
// If changed files are *.java or component.xml then re-validate all unnamed
resources.
@@ -184,10 +188,16 @@
Set<IPath> unnamedResources = validationContext.getUnnamedCoreResources();
newResources.addAll(unnamedResources);
for (IPath path : newResources) {
- displaySubtask(VALIDATING_RESOURCE_MESSAGE_ID, new String[]{projectName,
path.toString()});
- Set<ISeamJavaComponentDeclaration> declarations =
((SeamProject)seamProject).findJavaDeclarations(path);
- for (ISeamJavaComponentDeclaration d : declarations) {
- validateMethodsOfUnknownComponent(d);
+ IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+ if(file!=null && file.exists()) {
+ if(!resources.contains(path)) {
+ removeAllMessagesFromResource(file);
+ }
+ displaySubtask(VALIDATING_RESOURCE_MESSAGE_ID, new String[]{projectName,
path.toString()});
+ Set<ISeamJavaComponentDeclaration> declarations =
((SeamProject)seamProject).findJavaDeclarations(path);
+ for (ISeamJavaComponentDeclaration d : declarations) {
+ validateMethodsOfUnknownComponent(d);
+ }
}
}
}
@@ -200,12 +210,19 @@
* @see org.jboss.tools.seam.internal.core.validation.ISeamValidator#validateAll()
*/
public IStatus validateAll() throws ValidationException {
+ removeAllMessagesFromResource(seamProject.getProject());
ISeamComponent[] components = seamProject.getComponents();
for (ISeamComponent component : components) {
if(reporter.isCancelled()) {
return OK_STATUS;
}
- validateComponent(component);
+ Set<ISeamComponentDeclaration> declarations = component.getAllDeclarations();
+ for (ISeamComponentDeclaration seamComponentDeclaration : declarations) {
+ if(project == seamComponentDeclaration.getResource().getProject()) {
+ validateComponent(component);
+ break;
+ }
+ }
}
ISeamFactory[] factories = seamProject.getFactories();
Set<String> markedDuplicateFactoryNames = new HashSet<String>();
@@ -213,7 +230,9 @@
if(reporter.isCancelled()) {
return OK_STATUS;
}
- validateFactory(factory, markedDuplicateFactoryNames);
+ if(project == factory.getResource().getProject()) {
+ validateFactory(factory, markedDuplicateFactoryNames);
+ }
}
ISeamJavaComponentDeclaration[] values =
((SeamProject)seamProject).getAllJavaComponentDeclarations();
@@ -222,7 +241,9 @@
return OK_STATUS;
}
displaySubtask(VALIDATING_CLASS_MESSAGE_ID, new String[]{projectName,
d.getClassName()});
- validateMethodsOfUnknownComponent(d);
+ if(project == d.getResource().getProject()) {
+ validateMethodsOfUnknownComponent(d);
+ }
}
return OK_STATUS;
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamELValidator.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamELValidator.java 2009-02-20
19:19:21 UTC (rev 13711)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamELValidator.java 2009-02-20
21:28:30 UTC (rev 13712)
@@ -12,6 +12,7 @@
import java.io.IOException;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -44,6 +45,7 @@
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList;
import org.eclipse.wst.validation.internal.core.ValidationException;
+import org.eclipse.wst.validation.internal.operations.WorkbenchReporter;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
@@ -114,17 +116,34 @@
IWorkspaceRoot wsRoot = ResourcesPlugin.getWorkspace().getRoot();
Set<IPath> files = validationContext.getElResourcesForValidation(changedFiles);
validationContext.removeLinkedElResources(files);
+
+ Set<IFile> filesToValidate = new HashSet<IFile>();
+ boolean containsJavaOrComponentsXml = false;
for (IPath path : files) {
- if(!reporter.isCancelled()) {
- validationContext.removeUnnamedElResource(path);
+ IFile file = wsRoot.getFile(path);
+ if(file.exists()) {
+ filesToValidate.add(file);
+ if(!containsJavaOrComponentsXml) {
+ String fileName = file.getName().toLowerCase();
+ containsJavaOrComponentsXml = fileName.endsWith(".java") ||
fileName.endsWith(".properties") || fileName.equals("components.xml");
//$NON-NLS-1$ $NON-NLS-2$ $NON-NLS-3$
+ }
+ }
+ }
+
+ if(containsJavaOrComponentsXml) {
+ Set<IPath> unnamedResources = validationContext.getUnnamedElResources();
+ for (IPath path : unnamedResources) {
IFile file = wsRoot.getFile(path);
if(file.exists()) {
- reporter.removeMessageSubset(validationManager, file,
ISeamValidator.MARKED_SEAM_RESOURCE_MESSAGE_GROUP);
- validateFile(file);
+ filesToValidate.add(file);
}
}
}
-
+ for (IFile file : filesToValidate) {
+ if(!reporter.isCancelled()) {
+ validateFile(file);
+ }
+ }
validationContext.clearOldVariableNameForElValidation();
return OK_STATUS;
}
@@ -196,6 +215,7 @@
if(!shouldFileBeValidated(file)) {
return;
}
+ WorkbenchReporter.removeAllMessages(file, new String[]{this.getClass().getName()},
null);
displaySubtask(VALIDATING_EL_FILE_MESSAGE_ID, new String[]{projectName,
file.getName()});
elVarSearcher.setFile(file);
String ext = file.getFileExtension();
@@ -354,16 +374,16 @@
SeamELOperandResolveStatus status =
engine.resolveELOperand(file, operandToken, true, varListForCurentValidatedNode,
elVarSearcher);
- if(status.getUsedVariables().size()==0 && status.isError()) {
+ if(status.isError()) {
// Save resources with unknown variables names
validationContext.addUnnamedElResource(file.getFullPath());
- } else {
- // Save links between resource and used variables names
- for(ISeamContextVariable variable: status.getUsedVariables()) {
- validationContext.addLinkedElResource(variable.getName(), file.getFullPath());
- }
}
+ // Save links between resource and used variables names
+ for(ISeamContextVariable variable: status.getUsedVariables()) {
+ validationContext.addLinkedElResource(variable.getName(), file.getFullPath());
+ }
+
// Check pair for getter/setter
if(status.getUnpairedGettersOrSetters().size()>0) {
TypeInfoCollector.MethodInfo unpairedMethod =
status.getUnpairedGettersOrSetters().values().iterator().next();
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidationContext.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidationContext.java 2009-02-20
19:19:21 UTC (rev 13711)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidationContext.java 2009-02-20
21:28:30 UTC (rev 13712)
@@ -185,7 +185,7 @@
}
}
}
- result.addAll(elLinks.getUnnamedResources());
+// result.addAll(elLinks.getUnnamedResources());
return result;
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidatorManager.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidatorManager.java 2009-02-20
19:19:21 UTC (rev 13711)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidatorManager.java 2009-02-20
21:28:30 UTC (rev 13712)
@@ -62,7 +62,7 @@
if(changedFiles.size()>0) {
status = validate(validators, changedFiles);
} else {
- reporter.removeAllMessages(this);
+// reporter.removeAllMessages(this);
validationContext.clearAllResourceLinks();
status = validateAll(validators);
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/ValidationErrorManager.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/ValidationErrorManager.java 2009-02-20
19:19:21 UTC (rev 13711)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/ValidationErrorManager.java 2009-02-20
21:28:30 UTC (rev 13712)
@@ -19,6 +19,7 @@
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.wst.validation.internal.core.Message;
+import org.eclipse.wst.validation.internal.operations.WorkbenchReporter;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
import org.eclipse.wst.validation.internal.provisional.core.IValidator;
@@ -158,7 +159,8 @@
}
}
- reporter.addMessage(validationManager, message);
+ WorkbenchReporter.addMessage(target, this.getClass(), message);
+// reporter.addMessage(validationManager, message);
}
/*
@@ -188,7 +190,8 @@
e);
return;
}
- reporter.addMessage(validationManager, message);
+ WorkbenchReporter.addMessage(target, this.getClass(), message);
+// reporter.addMessage(validationManager, message);
}
/*
@@ -219,7 +222,7 @@
*/
public void removeMessagesFromResources(Set<IResource> resources) {
for (IResource r : resources) {
- reporter.removeMessageSubset(validationManager, r, getMarkerId());
+ WorkbenchReporter.removeAllMessages(r, new String[]{this.getClass().getName()},
null);
}
}
@@ -228,7 +231,8 @@
* @see
org.jboss.tools.seam.internal.core.validation.IValidationErrorManager#removeAllMessagesFromResource(org.eclipse.core.resources.IResource)
*/
public void removeAllMessagesFromResource(IResource resource) {
- reporter.removeAllMessages(validationManager, resource);
+// reporter.removeAllMessages(validationManager, resource);
+ WorkbenchReporter.removeAllMessages(resource, new String[]{this.getClass().getName()},
null);
}
/*