Author: akazakov
Date: 2007-07-21 13:11:16 -0400 (Sat, 21 Jul 2007)
New Revision: 2579
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/META-INF/MANIFEST.MF
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamPreferences.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamELCompletionEngine.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/preferences/SeamPreferenceInitializer.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/SeamELValidationHelper.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/SeamValidationHelper.java
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/messages.properties
Log:
http://jira.jboss.com/jira/browse/EXIN-327 EL Validation
Modified: trunk/seam/plugins/org.jboss.tools.seam.core/META-INF/MANIFEST.MF
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.core/META-INF/MANIFEST.MF 2007-07-21 05:06:23
UTC (rev 2578)
+++ trunk/seam/plugins/org.jboss.tools.seam.core/META-INF/MANIFEST.MF 2007-07-21 17:11:16
UTC (rev 2579)
@@ -24,7 +24,9 @@
org.eclipse.jst.j2ee.web,
org.eclipse.jst.j2ee,
org.eclipse.jst.ws,
- org.eclipse.jface.text
+ org.eclipse.jface.text,
+ org.eclipse.wst.sse.core,
+ org.eclipse.wst.xml.core
Provide-Package: org.jboss.tools.seam.core,
org.jboss.tools.seam.internal.core,
org.jboss.tools.seam.internal.core.scanner,
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamPreferences.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamPreferences.java 2007-07-21
05:06:23 UTC (rev 2578)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamPreferences.java 2007-07-21
17:11:16 UTC (rev 2579)
@@ -77,7 +77,10 @@
//Context variables
public static final String DUPLICATE_VARIABLE_NAME =
createSeverityOption("duplicateVariableName");
public static final String UNKNOWN_VARIABLE_NAME =
createSeverityOption("unknownVariableName");
-
+
+ // Seam Expression language
+ public static final String INVALID_EXPRESSION =
createSeverityOption("invalidExpression");
+
private static String createSeverityOption(String shortName) {
String name = SeamCorePlugin.PLUGIN_ID + ".validator.problem." + shortName;
severityOptionNames.add(name);
@@ -120,5 +123,4 @@
if(p == null) return null;
return p.get(key, null);
}
-
-}
+}
\ No newline at end of file
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamELCompletionEngine.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamELCompletionEngine.java 2007-07-21
05:06:23 UTC (rev 2578)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/el/SeamELCompletionEngine.java 2007-07-21
17:11:16 UTC (rev 2579)
@@ -117,7 +117,11 @@
if (areEqualExpressions(resolvedExpressionPart, tokens)) {
// First segment is the last one
for (ISeamContextVariable var : resolvedVariables) {
- res.add(var.getName().substring(prefix.toString().length()));
+ String varName = var.getName();
+ String prefixString = prefix.toString();
+ if(prefixString.length()<varName.length()) {
+ res.add(varName.substring(prefixString.length()));
+ }
}
return res;
}
@@ -552,8 +556,9 @@
private CharSequence getCharSequence(int start, int length) {
String text = "";
try {
- text.substring(start, length);
+ text = documentContent.substring(start, start + length);
} catch (StringIndexOutOfBoundsException e) {
+ SeamCorePlugin.getDefault().logError(e);
text = ""; // For sure
}
return text.subSequence(0, text.length());
@@ -737,7 +742,8 @@
if (tokens == null || tokens.size() == 0)
return null;
- return documentContent.substring(tokens.get(0).start, offset - tokens.get(0).start);
+ return documentContent.substring(tokens.get(0).start, offset);
+// return documentContent.substring(tokens.get(0).start, tokens.get(0).start +
tokens.get(0).length);
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/preferences/SeamPreferenceInitializer.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/preferences/SeamPreferenceInitializer.java 2007-07-21
05:06:23 UTC (rev 2578)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/preferences/SeamPreferenceInitializer.java 2007-07-21
17:11:16 UTC (rev 2579)
@@ -21,7 +21,7 @@
* @author Viacheslav Kabanovich
*/
public class SeamPreferenceInitializer extends AbstractPreferenceInitializer {
-
+
public SeamPreferenceInitializer() {}
@Override
@@ -31,7 +31,7 @@
for (String name : SeamPreferences.severityOptionNames) {
defaultPreferences.put(name, SeamPreferences.ERROR);
}
-
+ defaultPreferences.put(SeamPreferences.INVALID_EXPRESSION, SeamPreferences.WARNING);
+ defaultPreferences.put(SeamPreferences.UNKNOWN_VARIABLE_NAME,
SeamPreferences.WARNING);
}
-
-}
+}
\ No newline at end of file
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 2007-07-21
05:06:23 UTC (rev 2578)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamCoreValidator.java 2007-07-21
17:11:16 UTC (rev 2579)
@@ -59,8 +59,6 @@
*/
public class SeamCoreValidator extends SeamValidator {
- private static final String MARKED_SEAM_RESOURCE_MESSAGE_GROUP =
"markedSeamCoreResource";
-
/* (non-Javadoc)
* @see
org.jboss.tools.seam.internal.core.validation.SeamValidator#validate(java.util.Set)
*/
@@ -209,7 +207,7 @@
validateFactoryName(factory, factoryName, markedDuplicateFactoryNames, true);
}
} catch (JavaModelException e) {
- SeamCorePlugin.getDefault().logError(e);
+ SeamCorePlugin.getDefault().logError("Error validating Seam Core", e);
}
} else {
// factory must be java method!
@@ -379,7 +377,7 @@
validationContext.addLinkedResource(componentName,
type.getResource().getFullPath());
}
} catch (JavaModelException e) {
- SeamCorePlugin.getDefault().logError(e);
+ SeamCorePlugin.getDefault().logError("Error validating Seam Core", e);
}
// validate properties
Collection<ISeamProperty> properties = declaration.getProperties();
@@ -428,7 +426,7 @@
length = declaration.getSourceMember().getNameRange().getLength();
offset = declaration.getSourceMember().getNameRange().getOffset();
} catch (JavaModelException e) {
- SeamCorePlugin.getDefault().logError(e);
+ SeamCorePlugin.getDefault().logError("Error validating Seam Core", e);
}
return new SeamTextSourceReference(length, offset);
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamELValidationHelper.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamELValidationHelper.java 2007-07-21
05:06:23 UTC (rev 2578)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamELValidationHelper.java 2007-07-21
17:11:16 UTC (rev 2579)
@@ -10,10 +10,15 @@
******************************************************************************/
package org.jboss.tools.seam.internal.core.validation;
+import java.util.Collection;
+
/**
* Helper for EL Seam valodator
* @author Alexey Kazakov
*/
public class SeamELValidationHelper extends SeamValidationHelper {
+ public Collection getAllFilesForValidation() {
+ return getFiles(SeamELValidator.class.getName());
+ }
}
\ No newline at end of file
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 2007-07-21
05:06:23 UTC (rev 2578)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamELValidator.java 2007-07-21
17:11:16 UTC (rev 2579)
@@ -11,25 +11,34 @@
package org.jboss.tools.seam.internal.core.validation;
import java.io.IOException;
+import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
-
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.internal.ui.text.FastJavaPartitionScanner;
+import org.eclipse.jdt.ui.text.IJavaPartitions;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.Token;
+import org.eclipse.wst.sse.core.StructuredModelManager;
+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
+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.xml.core.internal.provisional.document.IDOMModel;
+import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
import org.jboss.tools.common.util.FileUtil;
import org.jboss.tools.seam.core.SeamCorePlugin;
+import org.jboss.tools.seam.core.SeamPreferences;
import org.jboss.tools.seam.internal.core.el.SeamELCompletionEngine;
-import org.xml.sax.Attributes;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
/**
* EL Validator
@@ -37,14 +46,15 @@
*/
public class SeamELValidator extends SeamValidator {
- private SeamELCompletionEngine fEngine= new SeamELCompletionEngine();
+ private SeamELCompletionEngine engine= new SeamELCompletionEngine();
+ private IJavaProject javaProject = null;
/* (non-Javadoc)
* @see
org.jboss.tools.seam.internal.core.validation.SeamValidator#validate(java.util.Set)
*/
@Override
public IStatus validate(Set<IFile> changedFiles) throws ValidationException {
- // TODO
+ // TODO Incremental validation
validateAll();
return OK_STATUS;
}
@@ -54,14 +64,14 @@
*/
@Override
public IStatus validateAll() throws ValidationException {
- // TODO
- /*
- Set<IFile> files = validationContext.getRegisteredFiles();
- for (IFile file : files) {
- validateFile(file);
+ reporter.removeAllMessages(this);
+ SeamELValidationHelper vlh = (SeamELValidationHelper)coreHelper;
+ Collection files = vlh.getAllFilesForValidation();
+ for (Object file : files) {
+ if(file instanceof IFile && !reporter.isCancelled()) {
+ validateFile((IFile)file);
+ }
}
- */
-
return OK_STATUS;
}
@@ -71,119 +81,183 @@
try {
content = FileUtil.readStream(file.getContents());
} catch (CoreException e) {
- SeamCorePlugin.getDefault().logError(e);
+ SeamCorePlugin.getDefault().logError("Error validating Seam EL", e);
return;
}
- if(ext.equalsIgnoreCase("xml")) {
- validateXml(file, content);
- } else if(ext.equalsIgnoreCase("java")) {
- validateJava(file);
+ if(ext.equalsIgnoreCase("java")) {
+ validateJava(file, content);
} else {
- validateText(file);
+ validateDom(file, content);
}
}
- private void validateXml(IFile file, String content) {
- Document document = new Document(content);
- SeamSaxHandler handler = new SeamSaxHandler(file, document);
+ private void validateJava(IFile file, String content) {
try {
- SAXParserFactory.newInstance().newSAXParser().parse(file.getContents(), handler);
- } catch (SAXException e) {
- SeamCorePlugin.getDefault().logError(e);
- return;
- } catch (IOException e) {
- SeamCorePlugin.getDefault().logError(e);
- return;
- } catch (ParserConfigurationException e) {
- SeamCorePlugin.getDefault().logError(e);
- return;
+ FastJavaPartitionScanner scaner = new FastJavaPartitionScanner();
+ Document document = new Document(content);
+ scaner.setRange(document, 0, document.getLength());
+ IToken token = scaner.nextToken();
+ while(token!=null && token!=Token.EOF && !reporter.isCancelled()) {
+ if(IJavaPartitions.JAVA_STRING.equals(token.getData())) {
+ int length = scaner.getTokenLength();
+ int offset = scaner.getTokenOffset();
+ String value = document.get(offset, length);
+ if(value.indexOf('{')>-1) {
+ validateString(file, value, offset);
+ }
+ }
+ token = scaner.nextToken();
+ }
+ } catch (BadLocationException e) {
+ SeamCorePlugin.getDefault().logError("Error validating Seam EL", e);
+ }
+ }
+
+ private void validateDom(IFile file, String content) {
+ IStructuredModel model = null;
+ try {
+ model = StructuredModelManager.getModelManager().getModelForRead(file);
+ if (model instanceof IDOMModel) {
+ IDOMModel domModel = (IDOMModel) model;
+ IStructuredDocument structuredDoc = domModel.getStructuredDocument();
+ IStructuredDocumentRegion curNode =
structuredDoc.getFirstStructuredDocumentRegion();
+ while (curNode !=null && !reporter.isCancelled()) {
+ if (curNode.getFirstRegion().getType() == DOMRegionContext.XML_TAG_OPEN) {
+ validateNodeContent(file, curNode, DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE);
+ }
+ if (curNode.getFirstRegion().getType() == DOMRegionContext.XML_CONTENT) {
+ validateNodeContent(file, curNode, DOMRegionContext.XML_CONTENT);
+ }
+ curNode = curNode.getNext();
+ }
+ }
} catch (CoreException e) {
- SeamCorePlugin.getDefault().logError(e);
+ SeamCorePlugin.getDefault().logError("Error validating Seam EL", e);
+ } catch (IOException e) {
+ SeamCorePlugin.getDefault().logError("Error validating Seam EL", e);
+ } finally {
+ if (model != null) {
+ model.releaseFromRead();
+ }
}
return;
}
- private void validateJava(IFile file) {
-
+ private void validateNodeContent(IFile file, IStructuredDocumentRegion node, String
regionType) {
+ ITextRegionList regions = node.getRegions();
+ for(int i=0; i<regions.size(); i++) {
+ ITextRegion region = regions.get(i);
+ if(region.getType() == regionType) {
+ String text = node.getFullText(region);
+ if(text.indexOf("{")>-1) {
+ int offset = node.getStartOffset() + region.getStart();
+ validateString(file, text, offset);
+ }
+ }
+ }
}
- private void validateText(IFile file) {
-
- }
-
/**
* @param offset - offset of string in file
* @param length - length of string in file
*/
- private void validateString(IFile file, String string, int offset, int length) {
- if((string.startsWith("#{") || string.startsWith("${")) &&
!validateEl(file, string)) {
- // Mark
- System.out.println("Error: " + string);
+ private void validateString(IFile file, String string, int offset) {
+ Set<EL> els = new HashSet<EL>();
+ String localString = string;
+ while(!reporter.isCancelled()) {
+ int startEl = localString.indexOf("#{");
+ int endEl = -1;
+// if(startEl==-1) {
+// startEl = localString.indexOf("${");
+// }
+ if(startEl>-1) {
+ endEl = localString.indexOf('}', startEl);
+ if(endEl>-1) {
+ String value = localString.substring(startEl+2, endEl);
+ int os = offset + startEl + 2;
+ int ln = value.length();
+ els.add(new EL(value, ln, os));
+ localString = localString.substring(endEl);
+ offset = offset + endEl;
+ continue;
+ }
+ }
+ break;
}
+
+ for(EL el: els) {
+ if(!validateEl(file, el)) {
+ // Mark EL
+ addError(INVALID_EXPRESSION_MESSAGE_ID, SeamPreferences.INVALID_EXPRESSION, new
String[]{el.getValue()}, el.getLength(), el.getOffset(), file,
MARKED_SEAM_RESOURCE_MESSAGE_GROUP);
+ }
+ }
}
- private boolean validateEl(IFile file, String el) {
+ private boolean validateEl(IFile file, EL el) {
try {
- String exp = el;
- int offset = exp.length()-1;
- String prefix= SeamELCompletionEngine.getPrefix(el, offset);
- prefix = (prefix == null ? "" : prefix);
+ String exp = el.value;
+// int offset = exp.length()-1;
+// String prefix= SeamELCompletionEngine.getPrefix(exp, offset);
+// prefix = (prefix == null ? "" : prefix);
+ String prefix = el.value;
+ int possition = prefix.length();
+
// TODO ?
- List<String> suggestions = fEngine.getCompletions(project, file, el, prefix,
offset - prefix.length(), true);
+ List<String> suggestions = engine.getCompletions(project, file, exp, prefix,
possition, true);
if (suggestions != null && suggestions.size() > 0) {
return true;
}
} catch (BadLocationException e) {
- SeamCorePlugin.getDefault().logError(e);
+ SeamCorePlugin.getDefault().logError("Error validating Seam EL", e);
} catch (StringIndexOutOfBoundsException e) {
- SeamCorePlugin.getDefault().logError(e);
+ SeamCorePlugin.getDefault().logError("Error validating Seam EL", e);
}
return false;
}
- public class SeamSaxHandler extends DefaultHandler {
+ private IJavaProject getJavaProject() {
+ if(javaProject == null) {
+ javaProject = coreHelper.getJavaProject();
+ }
+ return javaProject;
+ }
- private IFile source;
- private Locator locator;
- private Document document;
+ public static class EL {
+ private String value;
+ private int length;
+ private int offset;
- public SeamSaxHandler(IFile source, Document document) {
- super();
- this.source = source;
- this.document = document;
+ public EL(String value, int length, int offset) {
+ this.value = value;
+ this.length = length;
+ this.offset = offset;
}
- private int[] getAttributeRange(int attributeIndex, String attributeValue) {
- try {
- int lineOffset = document.getLineOffset(locator.getLineNumber());
- String line = document.get(lineOffset, locator.getColumnNumber()-1);
- } catch (BadLocationException e) {
- throw new RuntimeException(e);
- }
- int[] result = new int[2];
- return result;
+ public String getValue() {
+ return value;
}
- @Override
- public void setDocumentLocator(Locator locator) {
- this.locator = locator;
+ public void setValue(String value) {
+ this.value = value;
}
- @Override
- public void startElement(String uri, String localName, String name, Attributes
attributes) throws SAXException {
- for(int i=0; i<attributes.getLength(); i++) {
- String value = attributes.getValue(i);
- SeamELValidator.this.validateString(source, value, 0, 0);
- }
+ public int getLength() {
+ return length;
}
- @Override
- public void characters (char[] ch, int start, int length) throws SAXException {
- String value = new String(ch, start, length).trim();
- SeamELValidator.this.validateString(source, value, start, length);
- }
+ public void setLength(int length) {
+ this.length = length;
+ }
+
+ public int getOffset() {
+ return offset;
+ }
+
+ public void setOffset(int offset) {
+ this.offset = offset;
+ }
}
}
\ No newline at end of file
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidationHelper.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidationHelper.java 2007-07-21
05:06:23 UTC (rev 2578)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidationHelper.java 2007-07-21
17:11:16 UTC (rev 2579)
@@ -57,6 +57,13 @@
}
/**
+ * @return Java project
+ */
+ public IJavaProject getJavaProject() {
+ return EclipseResourceUtil.getJavaProject(getProject());
+ }
+
+ /**
* @param element
* @return Resource of seam model element
*/
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-07-21
05:06:23 UTC (rev 2578)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/SeamValidator.java 2007-07-21
17:11:16 UTC (rev 2579)
@@ -33,6 +33,8 @@
*/
public abstract class SeamValidator implements IValidatorJob {
+ protected static final String MARKED_SEAM_RESOURCE_MESSAGE_GROUP =
"markedSeamCoreResource";
+
protected static final String NONUNIQUE_COMPONENT_NAME_MESSAGE_ID =
"NONUNIQUE_COMPONENT_NAME_MESSAGE";
protected static final String UNKNOWN_VARIABLE_NAME_MESSAGE_ID =
"UNKNOWN_VARIABLE_NAME";
protected static final String
STATEFUL_COMPONENT_DOES_NOT_CONTAIN_METHOD_SUFIX_MESSAGE_ID =
"STATEFUL_COMPONENT_DOES_NOT_CONTAIN_";
@@ -51,6 +53,7 @@
protected static final String UNKNOWN_DATA_MODEL_MESSAGE_ID =
"UNKNOWN_DATA_MODEL";
protected static final String UNKNOWN_COMPONENT_CLASS_NAME_MESSAGE_ID =
"UNKNOWN_COMPONENT_CLASS_NAME";
protected static final String UNKNOWN_COMPONENT_PROPERTY_MESSAGE_ID =
"UNKNOWN_COMPONENT_PROPERTY";
+ protected static final String INVALID_EXPRESSION_MESSAGE_ID =
"INVALID_EXPRESSION";
protected SeamValidationHelper coreHelper;
protected IReporter reporter;
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/messages.properties
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/messages.properties 2007-07-21
05:06:23 UTC (rev 2578)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/validation/messages.properties 2007-07-21
17:11:16 UTC (rev 2579)
@@ -38,4 +38,7 @@
#Context variables
DUPLICATE_VARIABLE_NAME=Duplicate variable name: {0}
-UNKNOWN_VARIABLE_NAME=Unknown context variable name: {0}
\ No newline at end of file
+UNKNOWN_VARIABLE_NAME=Unknown context variable name: {0}
+
+#Seam Expression language
+INVALID_EXPRESSION=Invalid Expression: {0}
\ No newline at end of file