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 2014/02/07 20:18:39 UTC
svn commit: r1565767 - in
/uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator:
LanguageCheckerVisitor.java RutaCheckerDefaultProblem.java
RutaCheckerProblemFactory.java
Author: pkluegl
Date: Fri Feb 7 19:18:39 2014
New Revision: 1565767
URL: http://svn.apache.org/r1565767
Log:
UIMA-3533
- fixed unexpanded type names that cause false problem reports
Modified:
uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java
uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/RutaCheckerDefaultProblem.java
uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/RutaCheckerProblemFactory.java
Modified: uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java?rev=1565767&r1=1565766&r2=1565767&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java (original)
+++ uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java Fri Feb 7 19:18:39 2014
@@ -42,6 +42,7 @@ import org.apache.uima.resource.Resource
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.resource.metadata.impl.FeatureDescription_impl;
import org.apache.uima.ruta.UIMAConstants;
import org.apache.uima.ruta.ide.RutaIdeUIPlugin;
import org.apache.uima.ruta.ide.core.IRutaKeywords;
@@ -177,6 +178,8 @@ public class LanguageCheckerVisitor exte
private ResourceManager resourceManager;
+ private Set<String> allLongTypeNames;
+
public LanguageCheckerVisitor(IProblemReporter problemReporter, ISourceLineTracker linetracker,
ISourceModule sourceModule) {
super();
@@ -188,6 +191,7 @@ public class LanguageCheckerVisitor exte
namespaces = new HashMap<String, String>();
ambiguousTypeAlias = new HashMap<String, Set<String>>();
+ allLongTypeNames = new HashSet<String>();
knownLocalVariables = new Stack<Map<String, Integer>>();
knownLocalVariables.push(new HashMap<String, Integer>());
blocks = new Stack<String>();
@@ -262,6 +266,7 @@ public class LanguageCheckerVisitor exte
if (parent != null && parent instanceof RutaVariableReference) {
RutaVariableReference p = (RutaVariableReference) parent;
String name = p.getName();
+ // TODO remember name for new types and their features!
if (finalTypes.contains(name)) {
IProblem problem = problemFactory.createInheritenceFinalProblem(p);
pr.reportProblem(problem);
@@ -292,10 +297,14 @@ public class LanguageCheckerVisitor exte
return false;
}
List<RutaFeatureDeclaration> features = newType.getFeatures();
+ Set<FeatureDescription> feats = new HashSet<FeatureDescription>();
+ // TODO add feature description of parent!
if (features != null) {
-
for (RutaFeatureDeclaration each : features) {
+ // TODO create correct feature description!
String type = each.getType();
+ FeatureDescription f = new FeatureDescription_impl(each.getName(), "", type);
+ feats.add(f);
if (type.equals("INT") || type.equals("STRING") || type.equals("DOUBLE")
|| type.equals("FLOAT") || type.equals("BOOLEAN")) {
continue;
@@ -304,7 +313,9 @@ public class LanguageCheckerVisitor exte
IProblem problem = problemFactory.createUnknownFeatureTypeProblem(each);
pr.reportProblem(problem);
}
+
}
+ featureDescriptionMap.put(longName, feats);
}
addDeclaredType(shortName);
return false;
@@ -334,7 +345,7 @@ public class LanguageCheckerVisitor exte
if (struct != null) {
structure = sourceModule.getSource().substring(struct.sourceStart(), struct.sourceEnd());
String string = namespaces.get(structure);
- if(string != null) {
+ if (string != null) {
structure = string;
}
}
@@ -361,22 +372,23 @@ public class LanguageCheckerVisitor exte
processCompleteTypeSystemImport(sRef, localPath, null, null, null);
}
- private void processCompleteTypeSystemImport(SimpleReference sRef, String localPath, Token typeToken,
- Token pkgToken, Token aliasToken) throws CoreException {
+ private void processCompleteTypeSystemImport(SimpleReference sRef, String localPath,
+ Token typeToken, Token pkgToken, Token aliasToken) throws CoreException {
try {
IFile ifile = RutaCheckerUtils.checkTypeSystemImport(localPath,
sourceModule.getScriptProject());
if (ifile == null) {
pr.reportProblem(problemFactory.createFileNotFoundProblem(sRef, localPath));
- }
- IPath location = ifile.getLocation();
- TypeSystemDescription tsDesc = importTypeSystem(location, typeToken, pkgToken ,aliasToken);
+ } else {
+ IPath location = ifile.getLocation();
+ TypeSystemDescription tsDesc = importTypeSystem(location, typeToken, pkgToken, aliasToken);
- if (reportWarningOnShortNames) {
- List<String> checkDuplicateShortNames = checkOnAmbiguousShortNames(tsDesc);
- if (!checkDuplicateShortNames.isEmpty()) {
- pr.reportProblem(problemFactory.createDuplicateShortNameInImported(sRef, localPath,
- checkDuplicateShortNames, ProblemSeverity.WARNING));
+ if (reportWarningOnShortNames) {
+ List<String> checkDuplicateShortNames = checkOnAmbiguousShortNames(tsDesc);
+ if (!checkDuplicateShortNames.isEmpty()) {
+ pr.reportProblem(problemFactory.createDuplicateShortNameInImported(sRef, localPath,
+ checkDuplicateShortNames, ProblemSeverity.WARNING));
+ }
}
}
} catch (IOException e) {
@@ -399,8 +411,9 @@ public class LanguageCheckerVisitor exte
return checkDuplicateShortNames;
}
- private TypeSystemDescription importTypeSystem(IPath path, Token typeToken, Token pkgToken, Token aliasToken)
- throws InvalidXMLException, IOException, MalformedURLException, CoreException {
+ private TypeSystemDescription importTypeSystem(IPath path, Token typeToken, Token pkgToken,
+ Token aliasToken) throws InvalidXMLException, IOException, MalformedURLException,
+ CoreException {
File file = path.toFile();
TypeSystemDescription tsDesc = UIMAFramework.getXMLParser().parseTypeSystemDescription(
new XMLInputSource(file));
@@ -409,21 +422,21 @@ public class LanguageCheckerVisitor exte
for (TypeDescription each : tsDesc.getTypes()) {
String longName = each.getName();
String shortName = getShortName(longName);
- if(pkgToken != null) {
+ if (pkgToken != null) {
String pkg = pkgToken.getText();
- if(!longName.startsWith(pkg + ".")) {
+ if (!longName.startsWith(pkg + ".")) {
continue;
}
}
- if(typeToken != null) {
+ if (typeToken != null) {
String type = typeToken.getText();
- if(!longName.equals(type)) {
+ if (!longName.equals(type)) {
continue;
}
}
if (aliasToken != null) {
String alias = aliasToken.getText();
- if(typeToken == null) {
+ if (typeToken == null) {
shortName = alias + "." + shortName;
} else {
shortName = alias;
@@ -485,12 +498,17 @@ public class LanguageCheckerVisitor exte
if ((ref.getType() & RutaTypeConstants.RUTA_TYPE_AT) != 0) {
// types
String name = ref.getName();
+ if (name.equals("Document")) {
+ return false;
+ }
+
Set<String> set = ambiguousTypeAlias.get(name);
if (set != null && !set.isEmpty()) {
pr.reportProblem(problemFactory.createAmbiguousShortName(ref, set, ProblemSeverity.ERROR));
return false;
}
- if (namespaces.keySet().contains(name) || namespaces.values().contains(name)) {
+ if (namespaces.keySet().contains(name) || namespaces.values().contains(name)
+ || allLongTypeNames.contains(name)) {
return false;
}
if (isFeatureMatch(ref.getName()) != null) {
@@ -562,7 +580,7 @@ public class LanguageCheckerVisitor exte
if (struct != null) {
structure = sourceModule.getSource().substring(struct.sourceStart(), struct.sourceEnd());
String string = namespaces.get(structure);
- if(string != null) {
+ if (string != null) {
structure = string;
}
}
@@ -652,6 +670,14 @@ public class LanguageCheckerVisitor exte
String aref = featText.substring(0, lastIndexOf);
String fref = featText.substring(lastIndexOf + 1, featText.length());
String match = isFeatureMatch(aref);
+ if(match == null && getVariableType(aref) == RutaTypeConstants.RUTA_TYPE_AT) {
+ // do not check on variables!
+ return;
+ }
+ String string = namespaces.get(match);
+ if (string != null) {
+ match = string;
+ }
if (match != null) {
int kind = -1;
if (fme.getValue() != null) {
@@ -768,6 +794,13 @@ public class LanguageCheckerVisitor exte
* Short type name (without namespace).
*/
private void importType(String longName, String shortName) {
+ if (allLongTypeNames.contains(longName)) {
+ // TODO: in conflict with double import
+ // pr.reportProblem(problemFactory.createIdenticalLongTypeNameProblem(longName,
+ // sourceModule));
+ } else {
+ allLongTypeNames.add(longName);
+ }
Set<String> targets = ambiguousTypeAlias.get(shortName);
if (targets != null) {
// shortName is already ambiguous, add longName to its list of possible targets
@@ -966,13 +999,13 @@ public class LanguageCheckerVisitor exte
}
private String isFeatureMatch(String text) {
- for (String each : namespaces.keySet()) {
+ for (String each : namespaces.values()) {
String t = checkFeatureMatch(text, each);
if (t != null) {
return t;
}
}
- for (String each : namespaces.values()) {
+ for (String each : namespaces.keySet()) {
String t = checkFeatureMatch(text, each);
if (t != null) {
return t;
@@ -989,6 +1022,10 @@ public class LanguageCheckerVisitor exte
String[] split = tail.split("[.]");
String typeToCheck = type;
for (String feat : split) {
+ String string = namespaces.get(typeToCheck);
+ if (string != null) {
+ typeToCheck = string;
+ }
typeToCheck = checkFSFeatureOfType(feat, typeToCheck);
foundAll &= (typeToCheck != null);
if (!foundAll) {
Modified: uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/RutaCheckerDefaultProblem.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/RutaCheckerDefaultProblem.java?rev=1565767&r1=1565766&r2=1565767&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/RutaCheckerDefaultProblem.java (original)
+++ uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/RutaCheckerDefaultProblem.java Fri Feb 7 19:18:39 2014
@@ -48,4 +48,9 @@ public class RutaCheckerDefaultProblem e
line);
}
+ public RutaCheckerDefaultProblem(String fileName, String message) {
+ super(fileName, message, RutaProblemIdentifier.PROBLEM, new String[] {}, ProblemSeverity.ERROR,
+ 0, 0, 0, 0);
+ }
+
}
Modified: uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/RutaCheckerProblemFactory.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/RutaCheckerProblemFactory.java?rev=1565767&r1=1565766&r2=1565767&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/RutaCheckerProblemFactory.java (original)
+++ uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/RutaCheckerProblemFactory.java Fri Feb 7 19:18:39 2014
@@ -216,4 +216,10 @@ public class RutaCheckerProblemFactory i
return new RutaCheckerDefaultProblem(this.fileName, message.toString(), ref, getLine(ref));
}
+ public IProblem createIdenticalLongTypeNameProblem(String longName, ISourceModule sourceModule) {
+ StringBuilder message = new StringBuilder(longName);
+ message.append(" is ambiguous!");
+ return new RutaCheckerDefaultProblem(this.fileName, message.toString());
+ }
+
}