Author: pkluegl
Date: Fri Apr 26 11:43:48 2013
New Revision: 1476150

URL: http://svn.apache.org/r1476150
Log:
UIMA-2834
- fixed syntax checking of external language elements

Modified:
    
uima/sandbox/textmarker/trunk/example-projects/textmarker-ep-example-extensions/pom.xml
    
uima/sandbox/textmarker/trunk/example-projects/textmarker-ep-example-extensions/src/main/java/org/apache/uima/textmarker/example/extensions/ExampleActionIDEExtension.java
    
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/extensions/ITextMarkerExtension.java
    
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/extensions/TextMarkerExternalFactory.java
    
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/parser/TextMarkerSourceElementRequestVisitor.java
    
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerAbstractDeclaration.java
    
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerExpression.java
    
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerFeatureDeclaration.java
    
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerTypeDeclaration.java
    
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerVariableDeclaration.java
    
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerCheckerProblemFactory.java
    
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerTypeChecker.java
    
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerVarRefChecker.java

Modified: 
uima/sandbox/textmarker/trunk/example-projects/textmarker-ep-example-extensions/pom.xml
URL: 
http://svn.apache.org/viewvc/uima/sandbox/textmarker/trunk/example-projects/textmarker-ep-example-extensions/pom.xml?rev=1476150&r1=1476149&r2=1476150&view=diff
==============================================================================
--- 
uima/sandbox/textmarker/trunk/example-projects/textmarker-ep-example-extensions/pom.xml
 (original)
+++ 
uima/sandbox/textmarker/trunk/example-projects/textmarker-ep-example-extensions/pom.xml
 Fri Apr 26 11:43:48 2013
@@ -109,7 +109,8 @@
                 <Require-Bundle>
                   org.apache.uima.runtime,
                   org.apache.uima.textmarker.engine,
-                  org.apache.uima.textmarker.ide
+                  org.apache.uima.textmarker.ide,
+                  org.eclipse.dltk.core;bundle-version="[3.0.0,5.0.0)"
                 </Require-Bundle>
                 <Import-Package>
                 </Import-Package>

Modified: 
uima/sandbox/textmarker/trunk/example-projects/textmarker-ep-example-extensions/src/main/java/org/apache/uima/textmarker/example/extensions/ExampleActionIDEExtension.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/textmarker/trunk/example-projects/textmarker-ep-example-extensions/src/main/java/org/apache/uima/textmarker/example/extensions/ExampleActionIDEExtension.java?rev=1476150&r1=1476149&r2=1476150&view=diff
==============================================================================
--- 
uima/sandbox/textmarker/trunk/example-projects/textmarker-ep-example-extensions/src/main/java/org/apache/uima/textmarker/example/extensions/ExampleActionIDEExtension.java
 (original)
+++ 
uima/sandbox/textmarker/trunk/example-projects/textmarker-ep-example-extensions/src/main/java/org/apache/uima/textmarker/example/extensions/ExampleActionIDEExtension.java
 Fri Apr 26 11:43:48 2013
@@ -3,19 +3,43 @@ package org.apache.uima.textmarker.examp
 import java.util.List;
 
 import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.Token;
 import org.apache.uima.textmarker.ide.core.extensions.IIDEActionExtension;
+import org.apache.uima.textmarker.ide.parser.ast.TMTypeConstants;
+import org.apache.uima.textmarker.ide.parser.ast.TextMarkerAction;
+import 
org.apache.uima.textmarker.ide.validator.TextMarkerCheckerProblemFactory;
 import org.eclipse.dltk.ast.expressions.Expression;
+import org.eclipse.dltk.compiler.problem.IProblem;
+import org.eclipse.dltk.compiler.problem.IProblemReporter;
 
 public class ExampleActionIDEExtension implements IIDEActionExtension {
-  private final String[] strings = new String[] {"ExampleAction"};
+  private final String[] strings = new String[] { "ExampleAction" };
 
   public String[] getKnownExtensions() {
     return strings;
   }
 
-  public void checkSyntax(Token name, List<Expression> arguments) throws 
RecognitionException {
-//    TODO
+  public boolean checkSyntax(Expression element, 
TextMarkerCheckerProblemFactory problemFactory,
+          IProblemReporter rep) throws RecognitionException {
+    if (element instanceof TextMarkerAction) {
+      TextMarkerAction a = (TextMarkerAction) element;
+      String name = a.getName();
+      if (!name.equals(strings[0])) {
+        IProblem problem = problemFactory.createUnknownActionProblem(a);
+        rep.reportProblem(problem);
+        return false;
+      }
+      boolean ok = true;
+      List<Expression> childs = a.getChilds();
+      for (Expression expression : childs) {
+        if (expression.getKind() != TMTypeConstants.TM_TYPE_N) {
+          IProblem problem = 
problemFactory.createWrongArgumentTypeProblem(expression, "NumberExpression");
+          rep.reportProblem(problem);
+          ok = false;
+        }
+      }
+      return ok;
+    }
+    return false;
   }
 
 }

Modified: 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/extensions/ITextMarkerExtension.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/extensions/ITextMarkerExtension.java?rev=1476150&r1=1476149&r2=1476150&view=diff
==============================================================================
--- 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/extensions/ITextMarkerExtension.java
 (original)
+++ 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/extensions/ITextMarkerExtension.java
 Fri Apr 26 11:43:48 2013
@@ -19,16 +19,15 @@
 
 package org.apache.uima.textmarker.ide.core.extensions;
 
-import java.util.List;
-
 import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.Token;
+import 
org.apache.uima.textmarker.ide.validator.TextMarkerCheckerProblemFactory;
 import org.eclipse.dltk.ast.expressions.Expression;
+import org.eclipse.dltk.compiler.problem.IProblemReporter;
 
 public interface ITextMarkerExtension {
 
   String[] getKnownExtensions();
   
-  void checkSyntax(Token name, List<Expression> arguments) throws 
RecognitionException;
+  boolean checkSyntax(Expression element, TextMarkerCheckerProblemFactory 
problemFactory, IProblemReporter rep) throws RecognitionException;
 
 }

Modified: 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/extensions/TextMarkerExternalFactory.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/extensions/TextMarkerExternalFactory.java?rev=1476150&r1=1476149&r2=1476150&view=diff
==============================================================================
--- 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/extensions/TextMarkerExternalFactory.java
 (original)
+++ 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/extensions/TextMarkerExternalFactory.java
 Fri Apr 26 11:43:48 2013
@@ -19,13 +19,10 @@
 
 package org.apache.uima.textmarker.ide.core.extensions;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.antlr.runtime.RecognitionException;
 import org.antlr.runtime.Token;
-import org.apache.uima.textmarker.ide.core.TextMarkerExtensionManager;
 import org.apache.uima.textmarker.ide.parser.ast.ActionFactory;
 import org.apache.uima.textmarker.ide.parser.ast.ConditionFactory;
 import org.apache.uima.textmarker.ide.parser.ast.ExpressionFactory;
@@ -35,141 +32,39 @@ import org.eclipse.dltk.ast.expressions.
 
 public class TextMarkerExternalFactory {
 
-  private Map<String, IIDEConditionExtension> conditionExtensions;
-
-  private Map<String, IIDEActionExtension> actionExtensions;
-
-  private Map<String, IIDENumberFunctionExtension> numberFunctionExtensions;
-
-  private Map<String, IIDEBooleanFunctionExtension> booleanFunctionExtensions;
-
-  private Map<String, IIDEStringFunctionExtension> stringFunctionExtensions;
-
-  private Map<String, IIDETypeFunctionExtension> typeFunctionExtensions;
-
   public TextMarkerExternalFactory() {
     super();
-    conditionExtensions = new HashMap<String, IIDEConditionExtension>();
-    actionExtensions = new HashMap<String, IIDEActionExtension>();
-    numberFunctionExtensions = new HashMap<String, 
IIDENumberFunctionExtension>();
-    booleanFunctionExtensions = new HashMap<String, 
IIDEBooleanFunctionExtension>();
-    stringFunctionExtensions = new HashMap<String, 
IIDEStringFunctionExtension>();
-    typeFunctionExtensions = new HashMap<String, IIDETypeFunctionExtension>();
-    IIDEConditionExtension[] cextensions = 
TextMarkerExtensionManager.getDefault()
-            .getIDEConditionExtensions();
-    for (IIDEConditionExtension each : cextensions) {
-      String[] knownExtensions = each.getKnownExtensions();
-      for (String string : knownExtensions) {
-        conditionExtensions.put(string, each);
-      }
-    }
-    IIDEActionExtension[] aextensions = TextMarkerExtensionManager.getDefault()
-            .getIDEActionExtensions();
-    for (IIDEActionExtension each : aextensions) {
-      String[] knownExtensions = each.getKnownExtensions();
-      for (String string : knownExtensions) {
-        actionExtensions.put(string, each);
-      }
-    }
-    IIDENumberFunctionExtension[] nfextensions = 
TextMarkerExtensionManager.getDefault()
-            .getIDENumberFunctionExtensions();
-    for (IIDENumberFunctionExtension each : nfextensions) {
-      String[] knownExtensions = each.getKnownExtensions();
-      for (String string : knownExtensions) {
-        numberFunctionExtensions.put(string, each);
-      }
-    }
-    IIDEBooleanFunctionExtension[] bfextensions = 
TextMarkerExtensionManager.getDefault()
-            .getIDEBooleanFunctionExtensions();
-    for (IIDEBooleanFunctionExtension each : bfextensions) {
-      String[] knownExtensions = each.getKnownExtensions();
-      for (String string : knownExtensions) {
-        booleanFunctionExtensions.put(string, each);
-      }
-    }
-    IIDEStringFunctionExtension[] sfextensions = 
TextMarkerExtensionManager.getDefault()
-            .getIDEStringFunctionExtensions();
-    for (IIDEStringFunctionExtension each : sfextensions) {
-      String[] knownExtensions = each.getKnownExtensions();
-      for (String string : knownExtensions) {
-        stringFunctionExtensions.put(string, each);
-      }
-    }
-    IIDETypeFunctionExtension[] tfextensions = 
TextMarkerExtensionManager.getDefault()
-            .getIDETypeFunctionExtensions();
-    for (IIDETypeFunctionExtension each : tfextensions) {
-      String[] knownExtensions = each.getKnownExtensions();
-      for (String string : knownExtensions) {
-        typeFunctionExtensions.put(string, each);
-      }
-    }
-
   }
 
 
   public TextMarkerCondition createExternalCondition(Token id, 
List<Expression> args)
           throws RecognitionException {
-    String name = id.getText();
-    ITextMarkerExtension extension = conditionExtensions.get(name);
-    extension.checkSyntax(id, args);
     return ConditionFactory.createCondition(id, args);
   }
 
   public TextMarkerAction createExternalAction(Token id, List<Expression> args)
           throws RecognitionException {
-    String name = id.getText();
-    ITextMarkerExtension extension = actionExtensions.get(name);
-    extension.checkSyntax(id, args);
     return ActionFactory.createAction(id, args);
   }
 
   public Expression createExternalNumberFunction(Token id, List<Expression> 
args)
           throws RecognitionException {
-    String name = id.getText();
-    ITextMarkerExtension extension = numberFunctionExtensions.get(name);
-    extension.checkSyntax(id, args);
     return ExpressionFactory.createNumberFunction(id, args);
   }
 
   public Expression createExternalBooleanFunction(Token id, List<Expression> 
args)
           throws RecognitionException {
-    String name = id.getText();
-    ITextMarkerExtension extension = booleanFunctionExtensions.get(name);
-    extension.checkSyntax(id, args);
     return ExpressionFactory.createBooleanFunction(id, args);
   }
 
   public Expression createExternalStringFunction(Token id, List<Expression> 
args)
           throws RecognitionException {
-    String name = id.getText();
-    ITextMarkerExtension extension = stringFunctionExtensions.get(name);
-    extension.checkSyntax(id, args);
     return ExpressionFactory.createStringFunction(id, args);
   }
 
   public Expression createExternalTypeFunction(Token id, List<Expression> args)
           throws RecognitionException {
-    String name = id.getText();
-    ITextMarkerExtension extension = typeFunctionExtensions.get(name);
-    extension.checkSyntax(id, args);
     return ExpressionFactory.createTypeFunction(id, args);
   }
 
-  
-  public void addExtension(String id, ITextMarkerExtension extension) {
-    if (extension instanceof IIDEActionExtension) {
-      addActionExtension(id, (IIDEActionExtension) extension);
-    } else if (extension instanceof IIDEConditionExtension) {
-      addConditionExtension(id, (IIDEConditionExtension) extension);
-    }
-  }
-
-  public void addConditionExtension(String id, IIDEConditionExtension 
extension) {
-    conditionExtensions.put(id, extension);
-  }
-
-  public void addActionExtension(String id, IIDEActionExtension extension) {
-    actionExtensions.put(id, extension);
-  }
-
 }

Modified: 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/parser/TextMarkerSourceElementRequestVisitor.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/parser/TextMarkerSourceElementRequestVisitor.java?rev=1476150&r1=1476149&r2=1476150&view=diff
==============================================================================
--- 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/parser/TextMarkerSourceElementRequestVisitor.java
 (original)
+++ 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/core/parser/TextMarkerSourceElementRequestVisitor.java
 Fri Apr 26 11:43:48 2013
@@ -211,7 +211,7 @@ public class TextMarkerSourceElementRequ
     int modifier = Modifiers.AccDefault;
     if (fullDeclaration instanceof TextMarkerVariableDeclaration) {
       modifier = Modifiers.AccPrivate;
-      modifier |= ((TextMarkerVariableDeclaration) fullDeclaration).getType();
+      modifier |= ((TextMarkerVariableDeclaration) fullDeclaration).getKind();
     } else if (fullDeclaration instanceof TextMarkerBasicAnnotationType) {
       modifier = Modifiers.AccConstant;
       modifier |= TMTypeConstants.TM_TYPE_AT;

Modified: 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerAbstractDeclaration.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerAbstractDeclaration.java?rev=1476150&r1=1476149&r2=1476150&view=diff
==============================================================================
--- 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerAbstractDeclaration.java
 (original)
+++ 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerAbstractDeclaration.java
 Fri Apr 26 11:43:48 2013
@@ -42,7 +42,7 @@ public abstract class TextMarkerAbstract
   public int getKind() {
     return D_VAR_DECL;
   }
-
+  
   @Override
   public void traverse(ASTVisitor visitor) throws Exception {
     if (visitor.visit(this)) {

Modified: 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerExpression.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerExpression.java?rev=1476150&r1=1476149&r2=1476150&view=diff
==============================================================================
--- 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerExpression.java
 (original)
+++ 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerExpression.java
 Fri Apr 26 11:43:48 2013
@@ -47,10 +47,6 @@ public class TextMarkerExpression extend
     }
   }
 
-  public int getType() {
-    return this.type;
-  }
-
   @Override
   public void traverse(ASTVisitor visitor) throws Exception {
     if (visitor.visit(this)) {
@@ -67,7 +63,7 @@ public class TextMarkerExpression extend
 
   @Override
   public int getKind() {
-    return expression.getKind();
+    return type;
   }
 
   public boolean isInParantheses() {

Modified: 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerFeatureDeclaration.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerFeatureDeclaration.java?rev=1476150&r1=1476149&r2=1476150&view=diff
==============================================================================
--- 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerFeatureDeclaration.java
 (original)
+++ 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerFeatureDeclaration.java
 Fri Apr 26 11:43:48 2013
@@ -28,7 +28,7 @@ public class TextMarkerFeatureDeclaratio
   public TextMarkerFeatureDeclaration(String name, String type, int nameStart, 
int nameEnd,
           int declStart, int declEnd, SimpleReference ref) {
     super(name, nameStart, nameEnd, declStart, declEnd, ref);
-    this.setType(type);
+    this.type = type;
   }
 
   public void setType(String type) {

Modified: 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerTypeDeclaration.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerTypeDeclaration.java?rev=1476150&r1=1476149&r2=1476150&view=diff
==============================================================================
--- 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerTypeDeclaration.java
 (original)
+++ 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerTypeDeclaration.java
 Fri Apr 26 11:43:48 2013
@@ -50,6 +50,11 @@ public class TextMarkerTypeDeclaration e
     }
   }
 
+  @Override
+  public int getKind() {
+    return TMTypeConstants.TM_TYPE_AT;
+  }
+  
   public void setFeatures(List<TextMarkerFeatureDeclaration> features) {
     this.features = features;
   }

Modified: 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerVariableDeclaration.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerVariableDeclaration.java?rev=1476150&r1=1476149&r2=1476150&view=diff
==============================================================================
--- 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerVariableDeclaration.java
 (original)
+++ 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/parser/ast/TextMarkerVariableDeclaration.java
 Fri Apr 26 11:43:48 2013
@@ -63,11 +63,9 @@ public class TextMarkerVariableDeclarati
     return this.getName() + ":: TextMarkerIntVariable :: " + super.toString();
   }
 
-  /**
-   * @return see {@link TMTypeConstants}
-   */
-  public int getType() {
-    return this.type;
+  @Override
+  public int getKind() {
+    return type;
   }
 
   public boolean hasInitExpression() {

Modified: 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerCheckerProblemFactory.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerCheckerProblemFactory.java?rev=1476150&r1=1476149&r2=1476150&view=diff
==============================================================================
--- 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerCheckerProblemFactory.java
 (original)
+++ 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerCheckerProblemFactory.java
 Fri Apr 26 11:43:48 2013
@@ -160,6 +160,11 @@ public class TextMarkerCheckerProblemFac
     return new TextMarkerCheckerDefaultProblem(this.fileName, message, var, 
getLine(var));
   }
 
+  public IProblem createWrongArgumentTypeProblem(Expression was,String 
expected) {
+    String message = "Wrong kind of argument: expected "+expected;
+    return new TextMarkerCheckerDefaultProblem(this.fileName, message, was, 
getLine(was));
+  }
+  
   public IProblem createInheritenceFinalProblem(TextMarkerVariableReference 
parent) {
     String message = "Type \"" + parent.getName()
             + "\" is final and cannot be used as a parent type.";

Modified: 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerTypeChecker.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerTypeChecker.java?rev=1476150&r1=1476149&r2=1476150&view=diff
==============================================================================
--- 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerTypeChecker.java
 (original)
+++ 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerTypeChecker.java
 Fri Apr 26 11:43:48 2013
@@ -32,6 +32,7 @@ import java.util.TreeSet;
 
 import org.apache.uima.UIMAFramework;
 import org.apache.uima.resource.ResourceManager;
+import org.apache.uima.resource.metadata.FeatureDescription;
 import org.apache.uima.resource.metadata.TypeDescription;
 import org.apache.uima.resource.metadata.TypeSystemDescription;
 import org.apache.uima.textmarker.ide.TextMarkerIdePlugin;
@@ -154,6 +155,7 @@ public class TextMarkerTypeChecker imple
       } catch (Exception e) {
         TextMarkerIdePlugin.error(e);
       }
+      
       Preferences store = 
TextMarkerIdePlugin.getDefault().getPluginPreferences();
       reportWarningOnShortNames = !store
               
.getBoolean(TextMarkerCorePreferences.BUILDER_IGNORE_DUPLICATE_SHORTNAMES);
@@ -208,7 +210,7 @@ public class TextMarkerTypeChecker imple
           rep.reportProblem(problem);
           return false;
         }
-        if ((newVar.getType() & TMTypeConstants.TM_TYPE_AT) != 0) {
+        if ((newVar.getKind() & TMTypeConstants.TM_TYPE_AT) != 0) {
           typeVariables.add(newVar.getName());
           return false;
         }
@@ -407,7 +409,11 @@ public class TextMarkerTypeChecker imple
         }
         if (typeVariables.contains(ref.getName()) || 
completeTypes.contains(ref.getName())
                 || shortTypes.contains(ref.getName()) || 
otherTypes.contains(ref.getName())
-                || isLongLocalATRef(ref.getName()) || 
isLongExternalATRef(ref.getName())) {
+                || isLongLocalATRef(ref.getName()) || 
isLongExternalATRef(ref.getName())
+                ) {
+          return false;
+        }
+        if(isFeatureMatch(ref)) {
           return false;
         }
         rep.reportProblem(problemFactory.createTypeProblem(ref, currentFile));
@@ -416,6 +422,75 @@ public class TextMarkerTypeChecker imple
       return true;
     }
 
+    private boolean isFeatureMatch(TextMarkerVariableReference ref) {
+      String name = ref.getName();
+      for (String each : shortTypes) {
+        if(checkFeatureMatch(name, each)) return true;
+      }
+      for (String each : completeTypes) {
+        if(checkFeatureMatch(name, each)) return true;
+      }
+      return false;
+    }
+
+    private boolean checkFeatureMatch(String name, String type) {
+      if(name.startsWith(type)) {
+        boolean foundAll = true;
+        String tail = name.substring(type.length() + 1);
+        String[] split = tail.split("[.]");
+        String typeToCheck = type;
+        for (String feat : split) {
+          typeToCheck = checkFSFeatureOfType(feat, typeToCheck);
+          foundAll &= (typeToCheck != null);
+          if(!foundAll)  {
+            return false;
+          }
+        }
+        return true;
+      } else {
+        return false;
+      }
+    }
+
+    private String checkFSFeatureOfType(String feat, String type) {
+      if(type.indexOf(".") == -1) {
+        for (String each : completeTypes) {
+          String[] split = each.split("[.]");
+          if(split[split.length-1].equals(type)) {
+            type = each;
+            break;
+          }
+        }
+      }
+      TypeDescription t = description.getType(type);
+      if(t == null) return null;
+      FeatureDescription[] features = t.getFeatures();
+      for (FeatureDescription featureDescription : features) {
+        String name = featureDescription.getName();
+        String rangeTypeName = featureDescription.getRangeTypeName();
+        boolean isFS = isFeatureStructure(rangeTypeName);
+        if(name.equals(feat) && isFS) {
+          return rangeTypeName;
+        }
+      }
+      return null;
+    }
+
+    private boolean isFeatureStructure(String rangeTypeName) {
+      if(rangeTypeName.equals("uima.tcas.Annotation") || 
rangeTypeName.equals("uima.cas.TOP")) {
+        return true;
+      }
+      TypeDescription type = description.getType(rangeTypeName);
+      if(type == null) {
+        return false;
+      }
+      String supertypeName = type.getSupertypeName();
+      if(supertypeName != null) {
+        return isFeatureStructure(supertypeName);
+      }
+      return false;
+    }
+
     private boolean isLongExternalATRef(String name) {
       int lastIndexOf = name.lastIndexOf(".");
       if (lastIndexOf == -1) {

Modified: 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerVarRefChecker.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerVarRefChecker.java?rev=1476150&r1=1476149&r2=1476150&view=diff
==============================================================================
--- 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerVarRefChecker.java
 (original)
+++ 
uima/sandbox/textmarker/trunk/textmarker-ep-ide/src/main/java/org/apache/uima/textmarker/ide/validator/TextMarkerVarRefChecker.java
 Fri Apr 26 11:43:48 2013
@@ -36,14 +36,23 @@ import org.apache.uima.resource.metadata
 import org.apache.uima.resource.metadata.TypeDescription;
 import org.apache.uima.resource.metadata.TypeSystemDescription;
 import org.apache.uima.textmarker.ide.core.ITextMarkerKeywords;
+import org.apache.uima.textmarker.ide.core.TextMarkerExtensionManager;
 import org.apache.uima.textmarker.ide.core.TextMarkerKeywordsManager;
 import org.apache.uima.textmarker.ide.core.builder.TextMarkerProjectUtils;
+import org.apache.uima.textmarker.ide.core.extensions.IIDEActionExtension;
+import 
org.apache.uima.textmarker.ide.core.extensions.IIDEBooleanFunctionExtension;
+import org.apache.uima.textmarker.ide.core.extensions.IIDEConditionExtension;
+import 
org.apache.uima.textmarker.ide.core.extensions.IIDENumberFunctionExtension;
+import 
org.apache.uima.textmarker.ide.core.extensions.IIDEStringFunctionExtension;
+import 
org.apache.uima.textmarker.ide.core.extensions.IIDETypeFunctionExtension;
+import org.apache.uima.textmarker.ide.core.extensions.ITextMarkerExtension;
 import org.apache.uima.textmarker.ide.parser.ast.TMActionConstants;
 import org.apache.uima.textmarker.ide.parser.ast.TMTypeConstants;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerAction;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerBlock;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerCondition;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerExpression;
+import org.apache.uima.textmarker.ide.parser.ast.TextMarkerFunction;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerRuleElement;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerStringExpression;
 import org.apache.uima.textmarker.ide.parser.ast.TextMarkerStructureAction;
@@ -95,6 +104,18 @@ public class TextMarkerVarRefChecker imp
 
     private String matchedType;
 
+    private Map<String, IIDEActionExtension> actionExtensions;
+
+    private Map<String, IIDEConditionExtension> conditionExtensions;
+
+    private Map<String, IIDEBooleanFunctionExtension> 
booleanFunctionExtensions;
+
+    private Map<String, IIDENumberFunctionExtension> numberFunctionExtensions;
+
+    private Map<String, IIDEStringFunctionExtension> stringFunctionExtensions;
+
+    private Map<String, IIDETypeFunctionExtension> typeFunctionExtensions;
+
     public VarRefVisitor(IProblemReporter rep, ISourceLineTracker linetracker, 
ISourceModule curFile) {
       this.linetracker = linetracker;
       this.rep = rep;
@@ -105,6 +126,61 @@ public class TextMarkerVarRefChecker imp
       this.knownLocalTypeNames = new HashSet<String>();
       this.problemFactory = new 
TextMarkerCheckerProblemFactory(currentFile.getElementName(),
               linetracker);
+      conditionExtensions = new HashMap<String, IIDEConditionExtension>();
+      actionExtensions = new HashMap<String, IIDEActionExtension>();
+      numberFunctionExtensions = new HashMap<String, 
IIDENumberFunctionExtension>();
+      booleanFunctionExtensions = new HashMap<String, 
IIDEBooleanFunctionExtension>();
+      stringFunctionExtensions = new HashMap<String, 
IIDEStringFunctionExtension>();
+      typeFunctionExtensions = new HashMap<String, 
IIDETypeFunctionExtension>();
+      IIDEConditionExtension[] cextensions = 
TextMarkerExtensionManager.getDefault()
+              .getIDEConditionExtensions();
+      for (IIDEConditionExtension each : cextensions) {
+        String[] knownExtensions = each.getKnownExtensions();
+        for (String string : knownExtensions) {
+          conditionExtensions.put(string, each);
+        }
+      }
+      IIDEActionExtension[] aextensions = 
TextMarkerExtensionManager.getDefault()
+              .getIDEActionExtensions();
+      for (IIDEActionExtension each : aextensions) {
+        String[] knownExtensions = each.getKnownExtensions();
+        for (String string : knownExtensions) {
+          actionExtensions.put(string, each);
+        }
+      }
+      IIDENumberFunctionExtension[] nfextensions = 
TextMarkerExtensionManager.getDefault()
+              .getIDENumberFunctionExtensions();
+      for (IIDENumberFunctionExtension each : nfextensions) {
+        String[] knownExtensions = each.getKnownExtensions();
+        for (String string : knownExtensions) {
+          numberFunctionExtensions.put(string, each);
+        }
+      }
+      IIDEBooleanFunctionExtension[] bfextensions = 
TextMarkerExtensionManager.getDefault()
+              .getIDEBooleanFunctionExtensions();
+      for (IIDEBooleanFunctionExtension each : bfextensions) {
+        String[] knownExtensions = each.getKnownExtensions();
+        for (String string : knownExtensions) {
+          booleanFunctionExtensions.put(string, each);
+        }
+      }
+      IIDEStringFunctionExtension[] sfextensions = 
TextMarkerExtensionManager.getDefault()
+              .getIDEStringFunctionExtensions();
+      for (IIDEStringFunctionExtension each : sfextensions) {
+        String[] knownExtensions = each.getKnownExtensions();
+        for (String string : knownExtensions) {
+          stringFunctionExtensions.put(string, each);
+        }
+      }
+      IIDETypeFunctionExtension[] tfextensions = 
TextMarkerExtensionManager.getDefault()
+              .getIDETypeFunctionExtensions();
+      for (IIDETypeFunctionExtension each : tfextensions) {
+        String[] knownExtensions = each.getKnownExtensions();
+        for (String string : knownExtensions) {
+          typeFunctionExtensions.put(string, each);
+        }
+      }
+
       try {
         description = getTypeSystemOfScript();
       } catch (InvalidXMLException e) {
@@ -153,7 +229,7 @@ public class TextMarkerVarRefChecker imp
           rep.reportProblem(problem);
           return false;
         }
-        knownLocalVariables.peek().put(newVar.getName(), newVar.getType());
+        knownLocalVariables.peek().put(newVar.getName(), newVar.getKind());
         return false;
       }
       return true;
@@ -179,6 +255,7 @@ public class TextMarkerVarRefChecker imp
 
     @Override
     public boolean visit(Expression s) throws Exception {
+
       if (s instanceof TextMarkerRuleElement) {
         TextMarkerRuleElement re = (TextMarkerRuleElement) s;
         Expression head = re.getHead();
@@ -206,11 +283,18 @@ public class TextMarkerVarRefChecker imp
         String actionName = 
currentFile.getSource().substring(tma.getNameStart(), tma.getNameEnd());
         String[] keywords = 
TextMarkerKeywordsManager.getKeywords(ITextMarkerKeywords.ACTION);
         List<String> asList = Arrays.asList(keywords);
-        if (!StringUtils.isEmpty(actionName) && !"-".equals(actionName) && 
!asList.contains(actionName)) {
+        if (!StringUtils.isEmpty(actionName) && !"-".equals(actionName)
+                && !asList.contains(actionName)) {
           IProblem problem = problemFactory.createUnknownActionProblem(tma);
           rep.reportProblem(problem);
         }
-        
+
+        ITextMarkerExtension extension = actionExtensions.get(actionName);
+        if (extension != null) {
+          // boolean checkSyntax =
+          extension.checkSyntax(tma, problemFactory, rep);
+        }
+
         if (tma.getName().equals("GETFEATURE") || 
tma.getName().equals("SETFEATURE")) {
           List<?> childs = tma.getChilds();
           TextMarkerStringExpression stringExpr = (TextMarkerStringExpression) 
childs.get(0);
@@ -222,13 +306,13 @@ public class TextMarkerVarRefChecker imp
             rep.reportProblem(problem);
           }
         }
-        
+
         if (tma.getKind() == TMActionConstants.A_ASSIGN) {
           List<?> childs = tma.getChilds();
           try {
             TextMarkerVariableReference ref = (TextMarkerVariableReference) 
childs.get(0);
             TextMarkerExpression expr = (TextMarkerExpression) childs.get(1);
-            int type = expr.getType();
+            int type = expr.getKind();
             if (ref.getType() == TMTypeConstants.TM_TYPE_G) {
               ref.setType(type);
             }
@@ -279,6 +363,13 @@ public class TextMarkerVarRefChecker imp
           rep.reportProblem(problem);
         }
 
+        ITextMarkerExtension extension = 
conditionExtensions.get(conditionName);
+        if (extension != null) {
+          // boolean checkSyntax =
+          extension.checkSyntax(cond, problemFactory, rep);
+        }
+        
+        
         if (conditionName.equals("FEATURE")) {
           if (matchedType != null) {
             List<?> args = cond.getChilds();
@@ -293,6 +384,31 @@ public class TextMarkerVarRefChecker imp
           }
         }
       }
+      if(s instanceof TextMarkerFunction) {
+        TextMarkerFunction f = (TextMarkerFunction) s;
+        String name = f.getName();
+        if(s.getKind() == TMTypeConstants.TM_TYPE_AT) {
+          ITextMarkerExtension extension = typeFunctionExtensions.get(name);
+          if (extension != null) {
+            extension.checkSyntax(s, problemFactory, rep);
+          }
+        } else if(s.getKind() == TMTypeConstants.TM_TYPE_B) {
+          ITextMarkerExtension extension = booleanFunctionExtensions.get(name);
+          if (extension != null) {
+            extension.checkSyntax(s, problemFactory, rep);
+          }
+        } else if(s.getKind() == TMTypeConstants.TM_TYPE_N) {
+          ITextMarkerExtension extension = numberFunctionExtensions.get(name);
+          if (extension != null) {
+            extension.checkSyntax(s, problemFactory, rep);
+          }
+        } else if(s.getKind() == TMTypeConstants.TM_TYPE_S) {
+          ITextMarkerExtension extension = stringFunctionExtensions.get(name);
+          if (extension != null) {
+            extension.checkSyntax(s, problemFactory, rep);
+          }
+        } 
+      }
       return true;
     }
 
@@ -318,17 +434,18 @@ public class TextMarkerVarRefChecker imp
       if (description == null) {
         return true;
       }
-      if(structure == null) {
+      if (structure == null) {
         return false;
       }
-      
+
       // TODO HOTFIX
-      if(structure.equals("Document") || 
structure.equals("DocumentAnnotation") || 
structure.equals("uima.tcas.DocumentAnnotation")) {
-        if(feat.equals("language")) {
+      if (structure.equals("Document") || 
structure.equals("DocumentAnnotation")
+              || structure.equals("uima.tcas.DocumentAnnotation")) {
+        if (feat.equals("language")) {
           return true;
         }
       }
-      
+
       boolean featureFound = false;
       TypeDescription[] descriptions = description.getTypes();
       Map<String, TypeDescription> typeMap = new HashMap<String, 
TypeDescription>();
@@ -336,11 +453,11 @@ public class TextMarkerVarRefChecker imp
         String typeName = typeDescription.getName();
         typeMap.put(typeName, typeDescription);
       }
-      
+
       for (TypeDescription typeDescription : descriptions) {
         String typeName = typeDescription.getName();
         String shortName = getShortName(typeName);
-        if(typeName.equals(structure) || shortName.equals(structure)) {
+        if (typeName.equals(structure) || shortName.equals(structure)) {
           Collection<FeatureDescription> allFeatures = 
getAllDeclaredFeatures(typeDescription,
                   typeMap);
           for (FeatureDescription featureDescription : allFeatures) {
@@ -351,7 +468,7 @@ public class TextMarkerVarRefChecker imp
             }
           }
         }
-        
+
         if (featureFound) {
           break;
         }


Reply via email to