You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by pk...@apache.org on 2013/04/26 13:43:49 UTC
svn commit: r1476150 - in /uima/sandbox/textmarker/trunk:
example-projects/textmarker-ep-example-extensions/
example-projects/textmarker-ep-example-extensions/src/main/java/org/apache/uima/textmarker/example/extensions/
textmarker-ep-ide/src/main/java/...
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;
}