[jbosstools-dev] Fwd: [jbosstools-commits] JBoss Tools SVN: r5362 - trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation.
Denis Golovin
dgolovin at exadel.com
Wed Dec 19 01:29:58 EST 2007
Validators are also using IDocument implementation but they do it in a
wise way. The only IDocument instance per file is created during
validation. Look at
DelegatingSourceValidator.validate(IValidationContext, reporter). It
asks for IDOMDocument instance for validating resource and the
calculate lines for reporter messages by invoking getLineOffset(offcet)
on document.
StructuredModelManager IDomModel instance is obtained from
StructuredModelManager that has complicated caching and sharing mechanism.
For now I would place instance of TextFileDocumentProvider class in
SeamValidation Helper and call it in SeamValidator.addError
try {
coreHelper.getDocumentProvider().connect(target);
message.setLineNo(coreHelper.getDocumentProvider().getDocument(target).getLineOfOffset(offset)+1);
} catch (BadLocationException e) {
// TBD error logging
} catch (CoreException e) {
// TBD error logging
}
that means it will create at least one IDocument instance per file
during validation session, not for every error marker.
Denis.
Max Rydahl Andersen wrote:
> Parsing every file when there is an error !? I find that hard to
> belive being a proper solution to this.
> It will definitly not scale - you can have hundreds even thousands of
> warnings and each of them parsing that file yet another time is not a
> good way.
>
> Is that how all other validators does it ?
>
> -max
>
> ------- Forwarded message -------
> From: jbosstools-commits at lists.jboss.org
> To: jbosstools-commits at lists.jboss.org
> Cc:
> Subject: [jbosstools-commits] JBoss Tools SVN: r5362 -
> trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation.
>
> Date: Tue, 18 Dec 2007 18:25:47 +0100
>
> Author: dazarov
> Date: 2007-12-18 12:25:47 -0500 (Tue, 18 Dec 2007)
> New Revision: 5362
>
> Modified:
>
> trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidator.java
>
> Log:
> http://jira.jboss.com/jira/browse/JBIDE-1489
>
> Modified:
> trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidator.java
>
> ===================================================================
> ---
> trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidator.java
> 2007-12-18 16:41:55 UTC (rev 5361)
> +++
> trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidator.java
> 2007-12-18 17:25:47 UTC (rev 5362)
> @@ -12,15 +12,21 @@
>
> import java.util.Set;
>
> +
> +import org.eclipse.core.resources.IFile;
> import org.eclipse.core.resources.IResource;
> +import org.eclipse.core.runtime.CoreException;
> import org.eclipse.core.runtime.IStatus;
> import org.eclipse.core.runtime.Status;
> import org.eclipse.wst.validation.internal.core.Message;
> import org.eclipse.wst.validation.internal.provisional.core.IMessage;
> import org.eclipse.wst.validation.internal.provisional.core.IReporter;
> +import org.jboss.tools.common.util.FileUtil;
> import org.jboss.tools.seam.core.ISeamProject;
> import org.jboss.tools.seam.core.ISeamTextSourceReference;
> +import org.jboss.tools.seam.core.SeamCorePlugin;
> import org.jboss.tools.seam.core.SeamPreferences;
> +import org.eclipse.jface.text.Document;
>
> /**
> * Abstract implementation of ISeamvalidator
> @@ -71,10 +77,40 @@
> IMessage message = new Message(getBaseName(),
> messageSeverity, messageId, messageArguments, target,
> ISeamValidator.MARKED_SEAM_RESOURCE_MESSAGE_GROUP);
> message.setLength(length);
> message.setOffset(offset);
> + int lineNumber = getLineNumber(target, offset);
> + if(lineNumber != 0)message.setLineNo(lineNumber);
> if(!ignore) {
> reporter.addMessage(validationManager, message);
> }
> }
> +
> + private int getLineNumber(IResource resource, int offset){
> + if(resource.getType() == IResource.FILE){
> + IFile file = (IFile)resource;
> + String content;
> + try {
> + if(!file.isSynchronized(IResource.DEPTH_ZERO)) {
> + // The resource is out of sync with the file system
> + // Just ignore this resource.
> + return 0;
> + }
> + content = FileUtil.readStream(file.getContents());
> + } catch (CoreException e) {
> + SeamCorePlugin.getPluginLog().logError(e);
> + return 0;
> + }
> + Document document = new Document(content);
> + int lineNumber=0;
> + try{
> + lineNumber = document.getLineOfOffset(offset);
> + return lineNumber+1;
> + }catch(Exception e){
> + SeamCorePlugin.getPluginLog().logError(e);
> + return 0;
> + }
> + }
> + return 0;
> + }
>
> protected void displaySubtask(String messageId) {
> displaySubtask(messageId, null);
>
> _______________________________________________
> jbosstools-commits mailing list
> jbosstools-commits at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/jbosstools-commits
>
>
>
More information about the jbosstools-dev
mailing list