Skip to content

Commit

Permalink
issue related to namespace was fixed partially. Need to pass some unr…
Browse files Browse the repository at this point in the history
…elated test cases.
  • Loading branch information
vahdat-ab committed Apr 11, 2016
1 parent a7b231c commit 46c3dce
Show file tree
Hide file tree
Showing 11 changed files with 598 additions and 524 deletions.
207 changes: 131 additions & 76 deletions cruise.umple/src/UmpleInternalParser_CodeClass.ump
Expand Up @@ -92,14 +92,11 @@ class UmpleInternalParser
}
else if (t.is("namespace"))
{
if(!packageNameUsed && !t.getValue().equals(currentPackageName))
setFailedPosition(t.getPosition(),31,currentPackageName,t.getValue());
currentPackageName = t.getValue();
if (model.getDefaultNamespace() == null)
{
model.setDefaultNamespace(currentPackageName);
}
packageNameUsed = false;
}
else if (t.is("inlineComment"))
{
Expand Down Expand Up @@ -881,14 +878,13 @@ class UmpleInternalParser
{
aClass.setIsSingleton(true);
}
if(!"".equals(aClass.getPackageName()) && !currentPackageName.equals(aClass.getPackageName()) && !packageNameUsed){
if(!"".equals(aClass.getPackageName()) && !currentPackageName.equals(aClass.getPackageName())){
setFailedPosition(classToken.getPosition(), 30, aClass.getName(), currentPackageName);
aClass.setPackageName(currentPackageName);
}
if("".equals(aClass.getPackageName())){
aClass.setPackageName(currentPackageName);
String pkgName = getCurrentNameSpace(classToken);
aClass.setPackageName( pkgName!="" ? pkgName : currentPackageName);
}
packageNameUsed = true;
if (aClass.getIsSingleton())
{
classToken.setName(classToken.getName());
Expand Down Expand Up @@ -943,7 +939,7 @@ class UmpleInternalParser
//Checks list of extends tokens to prevent multiple class inheritance
if(numberOfExtendsClass(extendsTokenList) > 1)
{
Token t = extendsTokenList.get(0);
Token t = extendsTokenList.get(0);
getParseResult().addErrorMessage(new ErrorMessage(34,t.getPosition(),aClassifier.getName(),t.getValue()));
}
}
Expand All @@ -955,7 +951,7 @@ class UmpleInternalParser
for(Token t : extList)
{
if(isAnUmpleClass(t.getValue("extendsName")))
counter++;
counter++;
}
return counter;
}
Expand All @@ -967,9 +963,9 @@ class UmpleInternalParser
{
if(aClass != null)
{
String nam = aClass.getName();
if(nam.equals(name))
return true;
String nam = aClass.getName();
if(nam.equals(name))
return true;
}
}
return false;
Expand Down Expand Up @@ -1042,14 +1038,13 @@ class UmpleInternalParser
anInterface.addComment(new Comment("@umplesource " + path +" "+thePosition.getLineNumber()));
}

if(!"".equals(anInterface.getPackageName()) && !currentPackageName.equals(anInterface.getPackageName()) && !packageNameUsed){
if(!"".equals(anInterface.getPackageName()) && !currentPackageName.equals(anInterface.getPackageName())){
setFailedPosition(interfaceToken.getPosition(), 30, anInterface.getName(), currentPackageName);
anInterface.setPackageName(currentPackageName);
}
if("".equals(anInterface.getPackageName())){
anInterface.setPackageName(currentPackageName);
String pkgName = getCurrentNameSpace(interfaceToken);
anInterface.setPackageName( pkgName!="" ? pkgName : currentPackageName);
}
packageNameUsed = true;
analyzeInterface(interfaceToken,anInterface);
return anInterface;
}
Expand Down Expand Up @@ -1472,7 +1467,7 @@ class UmpleInternalParser
ArrayList<Association> visited = new ArrayList<Association>();
int aLLB, aLUB, aRLB, aRUB, bLLB, bLUB, bRLB, bRUB;
Boolean lLowerBoundOK, rLowerBoundOK, lUpperBoundOK, rUpperBoundOK, boundsOK, subclassOK, namesOK, reverseNames,
lMulChToOne, rMulChToOne, lMulChToN, rMulChToN, lNeedsSetCode, rNeedsSetCode;
lMulChToOne, rMulChToOne, lMulChToN, rMulChToN, lNeedsSetCode, rNeedsSetCode;
String aLName, aRName, bLName, bRName;
ArrayList<String> leftHierarchy, rightHierarchy;
UmpleClass currentLeftClass, currentRightClass, parentLeftClass, parentRightClass;
Expand Down Expand Up @@ -1570,7 +1565,7 @@ class UmpleInternalParser
rLowerBoundOK = (bRLB <= aRLB);
lUpperBoundOK = (bLUB >= aLUB);
rUpperBoundOK = (bRUB >= aRUB);
if (bLUB != 1 && aLUB == 1)
lMulChToOne = true;

Expand All @@ -1582,15 +1577,15 @@ class UmpleInternalParser

if (aRUB == aRLB && bRLB == 0 && bRUB > 1) // && aRUB > 1
rMulChToN = true;
// changed to MN (or M*) -- this may need to change when set method generation is fixed
if (aLUB >= aLLB && aLLB != 0 && aLUB > 1 && ((bLLB == 0 && bLUB > 1) || bLUB == -1))
lMulChToN = true;

// changed to MN (or M*)
if (aRUB >= aRLB && aRLB != 0 && aRUB > 1 && ((bRLB == 0 && bRUB > 1) || bRUB == -1))
rMulChToN = true;
// special case for * multiplicity
if ( bLUB == -1 )
{
Expand Down Expand Up @@ -2220,8 +2215,8 @@ class UmpleInternalParser
{
if( (cb.getCode("") != null) && (!cb.getCode("").equals("")) && (!cb.getCode("").equals("\n")))
getParseResult().addErrorMessage(new ErrorMessage(49,aMethod.getPosition(),
aMethod.getName(),aMethod.getClass().getName(), implementationPositions.get("").getLineNumber()+"", implementationPositions.get("").getFilename(),
token.getPosition().getLineNumber()+"", token.getPosition().getFilename(), ""));
aMethod.getName(),aMethod.getClass().getName(), implementationPositions.get("").getLineNumber()+"", implementationPositions.get("").getFilename(),
token.getPosition().getLineNumber()+"", token.getPosition().getFilename(), ""));
else
{
cb.setCode(token.getValue());
Expand All @@ -2238,11 +2233,11 @@ class UmpleInternalParser
{
if( (cb.getCode(str) != null) && (!cb.getCode(str).equals("")) && (!cb.getCode(str).equals("\n")))
getParseResult().addErrorMessage(new ErrorMessage(49,aMethod.getPosition(),
aMethod.getName(),aMethod.getClass().getName(), implementationPositions.get(str).getLineNumber()+"", implementationPositions.get(str).getFilename(),
token.getPosition().getLineNumber()+"", token.getPosition().getFilename(), str));
aMethod.getName(),aMethod.getClass().getName(), implementationPositions.get(str).getLineNumber()+"", implementationPositions.get(str).getFilename(),
token.getPosition().getLineNumber()+"", token.getPosition().getFilename(), str));
else
{
implementationPositions.put(iValue, iPosition);
implementationPositions.put(iValue, iPosition);
cb.setCode(str,/*(cb.getCode(str)!=null?cb.getCode(str)+"\n":"")+*/ token.getValue());
if("Java".equals(str))
{
Expand Down Expand Up @@ -2301,54 +2296,54 @@ class UmpleInternalParser
List<String> implementations = new ArrayList<String>();

for(String l : langsImplementation)
if(actualMethod.getExistsInLanguage(l))
implementations.add(l);
else
{
if(!l.equals(""))
actualMethod.getMethodBody().setExtraCode(l, aMethod.getMethodBody().getExtraCode(l));
else
actualMethod.getMethodBody().setExtraCode("", aMethod.getMethodBody().getExtraCode(l));
actualMethod.getMethodBody().getImplementationPositions().put(l, aMethod.getMethodBody().getImplementationPositions().get(l));
}
if(actualMethod.getExistsInLanguage(l))
implementations.add(l);
else
{
if(!l.equals(""))
actualMethod.getMethodBody().setExtraCode(l, aMethod.getMethodBody().getExtraCode(l));
else
actualMethod.getMethodBody().setExtraCode("", aMethod.getMethodBody().getExtraCode(l));
actualMethod.getMethodBody().getImplementationPositions().put(l, aMethod.getMethodBody().getImplementationPositions().get(l));
}
if(!implementations.isEmpty())
{
for(String l : implementations)
{
if((actualMethod.getMethodBody().getExtraCode(l).equals("") ||
actualMethod.getMethodBody().getExtraCode(l).equals("\n"))&&
(!aMethod.getMethodBody().getExtraCode(l).equals("") ||
!aMethod.getMethodBody().getExtraCode(l).equals("\n")) &&
(!actualMethod.getMethodBody().getExtraCode(l).equals(aMethod.getMethodBody().getExtraCode(l))))
{
actualMethod.getMethodBody().setExtraCode(l, aMethod.getMethodBody().getExtraCode(l));
actualMethod.getMethodBody().getImplementationPositions().put(l, aMethod.getMethodBody().getImplementationPositions().get(l));
}
else
{
getParseResult().addErrorMessage(new ErrorMessage(49,aMethod.getPosition(),
aMethod.getName(),uClass.getName(), actualMethod.getMethodBody().getImplementationPositions().get(l).getLineNumber()+"", actualMethod.getMethodBody().getImplementationPositions().get(l).getFilename(),
aMethod.getMethodBody().getImplementationPositions().get(l).getLineNumber()+"", aMethod.getPosition().getFilename(), l));
}
}
for(String l : implementations)
{
if((actualMethod.getMethodBody().getExtraCode(l).equals("") ||
actualMethod.getMethodBody().getExtraCode(l).equals("\n"))&&
(!aMethod.getMethodBody().getExtraCode(l).equals("") ||
!aMethod.getMethodBody().getExtraCode(l).equals("\n")) &&
(!actualMethod.getMethodBody().getExtraCode(l).equals(aMethod.getMethodBody().getExtraCode(l))))
{
actualMethod.getMethodBody().setExtraCode(l, aMethod.getMethodBody().getExtraCode(l));
actualMethod.getMethodBody().getImplementationPositions().put(l, aMethod.getMethodBody().getImplementationPositions().get(l));
}
else
{
getParseResult().addErrorMessage(new ErrorMessage(49,aMethod.getPosition(),
aMethod.getName(),uClass.getName(), actualMethod.getMethodBody().getImplementationPositions().get(l).getLineNumber()+"", actualMethod.getMethodBody().getImplementationPositions().get(l).getFilename(),
aMethod.getMethodBody().getImplementationPositions().get(l).getLineNumber()+"", aMethod.getPosition().getFilename(), l));
}
}
}

/*

if ((actualMethod.getMethodBody().getExtraCode().isEmpty()) &&
(!aMethod.getMethodBody().getExtraCode().isEmpty()))
{
actualMethod.setMethodBody(aMethod.getMethodBody());
actualMethod.setPosition(aMethod.getPosition());
actualMethod.setMethodBody(aMethod.getMethodBody());
actualMethod.setPosition(aMethod.getPosition());
}
else
{
getParseResult().addErrorMessage(new ErrorMessage(49,aMethod.getPosition(),
aMethod.getName(),uClass.getName(), actualMethod.getPosition().getLineNumber()+"", actualMethod.getPosition().getFilename(),
aMethod.getPosition().getLineNumber()+"", aMethod.getPosition().getFilename()));
aMethod.getName(),uClass.getName(), actualMethod.getPosition().getLineNumber()+"", actualMethod.getPosition().getFilename(),
aMethod.getPosition().getLineNumber()+"", aMethod.getPosition().getFilename()));
}

*/
Expand Down Expand Up @@ -2386,11 +2381,11 @@ class UmpleInternalParser
if (!uTrait.hasMethod(aMethod)) // && shouldAddMethod)
{
String msg = "Please do not modify the following method.";
aMethod.addCommentAt(new Comment(msg),0);
aMethod.addCommentAt(new Comment(msg),0);
msg = "The following method comes from trait "+uTrait.getName()+".";
aMethod.addCommentAt(new Comment(msg),1);
msg = "Trait "+uTrait.getName()+" has been used in classes: ";
aMethod.addCommentAt(new Comment(msg),2);
aMethod.addCommentAt(new Comment(msg),1);
msg = "Trait "+uTrait.getName()+" has been used in classes: ";
aMethod.addCommentAt(new Comment(msg),2);
uTrait.addMethod(aMethod);
}

Expand Down Expand Up @@ -2994,15 +2989,15 @@ class UmpleInternalParser
//Issue #449
UmpleClass child = aClass;
while(unlinkedExtends.get(child) != null){
for(Attribute parentAttribute : model.getUmpleClass(unlinkedExtends.get(child).get(0)).getAttributes())
{
if(parentAttribute.getName().equals(tokenVal))
{
tokenMatch = true;
break;
}
}
child = model.getUmpleClass(unlinkedExtends.get(child).get(0));
for(Attribute parentAttribute : model.getUmpleClass(unlinkedExtends.get(child).get(0)).getAttributes())
{
if(parentAttribute.getName().equals(tokenVal))
{
tokenMatch = true;
break;
}
}
child = model.getUmpleClass(unlinkedExtends.get(child).get(0));
}

if(!aClass.hasAttributes() && !aClass.hasAssociations() && !aClass.hasStateMachines() && !tokenMatch)
Expand Down Expand Up @@ -3453,9 +3448,9 @@ class UmpleInternalParser
String bound = "";
//case of mandatory constraint
if(nonConstraintEndLower.equals(nonConstraintEndUpper))
bound = nonConstraintEndLower;
bound = nonConstraintEndLower;
else
bound = "[" +nonConstraintEndLower+", "+nonConstraintEndUpper+"]";
bound = "[" +nonConstraintEndLower+", "+nonConstraintEndUpper+"]";
setFailedPosition(associationToken.getPosition(), 36, bound);
}
}
Expand Down Expand Up @@ -3489,7 +3484,7 @@ class UmpleInternalParser

if(isAutounique || attributeToken.getValue("modifier") != null){
if(attributeAutouniqueImmutable == null)
attributeAutouniqueImmutable = new HashMap<Token, UmpleClass>();
attributeAutouniqueImmutable = new HashMap<Token, UmpleClass>();
attributeAutouniqueImmutable.put(attributeToken, aClass);
}

Expand Down Expand Up @@ -4058,4 +4053,64 @@ class UmpleInternalParser
setFailedPosition(position,1502,identifier);
}
}

private String getCurrentNameSpace(Token inToken) {
String currentNameSpace="";
boolean twice = false;
boolean resetClass = false;
int index=-1;
for(int i = 0; i<inToken.getParentToken().getSubTokens().size();i++){
Token t1 = inToken.getParentToken().getSubTokens().get(i);
if (t1.equals(inToken)) {
index=i;
break;
}
if (t1.getName().equals("classDefinition")) {
resetClass=true;
twice =false;
currentNameSpace="";
}
if (t1.getName().equals("namespace")&& !t1.getValue().equals("STATIC")) {
currentNameSpace = t1.getValue();
if (!twice){
twice = true;
resetClass = false;

} else {
if (!resetClass){
setFailedPosition(t1.getPosition(),31,currentPackageName,t1.getValue());
continue;
}
}
}
}
boolean finalCheck = false;
String extraNamespace = "";
int counter = -1;
Token forReport = null;
for (int j=index+1;j<inToken.getParentToken().getSubTokens().size();j++){
Token t1 = inToken.getParentToken().getSubTokens().get(j);
if (t1.getName().equals("classDefinition")) {
finalCheck = true;
} else if (t1.getName().equals("namespace") && !t1.getValue().equals("STATIC")){
extraNamespace = t1.getValue();
counter++;
forReport = t1;
}
}
if (finalCheck) return currentNameSpace;
if (counter<0) return currentNameSpace;
else if(counter==0 ) {
if (currentNameSpace!=""){
setFailedPosition(forReport.getPosition(),31,currentPackageName,forReport.getValue());
return currentNameSpace;
} else{
return extraNamespace;
}
} else {
setFailedPosition(forReport.getPosition(),31,currentPackageName,forReport.getValue());
return extraNamespace;
}
}

}
4 changes: 3 additions & 1 deletion cruise.umple/src/UmpleInternalParser_CodeTrait.ump
Expand Up @@ -117,10 +117,12 @@ class UmpleInternalParser
}

if("".equals(aTrait.getPackageName())){
//If one day traits are going to be a modular-runtime elements and there is a need for package use, the following code can be useful.
//setFailedPosition(classToken.getPosition(), 30, aClass.getName(), currentPackageName);
//aClass.setPackageName(currentPackageName);
aTrait.setPackageName(currentPackageName);
}

packageNameUsed = true;
if (aTrait.getIsSingleton())
{
traitToken.setName(traitToken.getName());
Expand Down
Expand Up @@ -2,4 +2,5 @@ namespace A;
class X {}
namespace B;
class Y {}

class X {}
Expand Up @@ -2385,7 +2385,7 @@ public void mixin_namespaces(){
Assert.assertEquals("B",parser.getModel().getUmpleClass("Y").getPackageName());

assertHasWarningsParse("213_mixin_namespaces_3.ump",30);
Assert.assertEquals("C",parser.getModel().getUmpleClass("X").getPackageName());
Assert.assertEquals("A",parser.getModel().getUmpleClass("X").getPackageName());
Assert.assertEquals("B",parser.getModel().getUmpleClass("Y").getPackageName());

}
Expand Down

0 comments on commit 46c3dce

Please sign in to comment.