Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@
import de.monticore.cd4codebasis._cocos.CD4CodeBasisCoCoChecker;
import de.monticore.cd4codebasis.cocos.ebnf.CD4CodeEnumConstantParameterMatchConstructorArguments;
import de.monticore.cd4codebasis.cocos.ebnf.CDMethodSignatureParameterNamesUnique;
import de.monticore.cdbasis._cocos.CDBasisASTCDTargetImportStatementCoCo;
import de.monticore.cdbasis.cocos.CDOnlyResolvableImportStatements;
import de.monticore.cdbasis.cocos.ConstructorNameEqualsClassNameCoCo;
import de.monticore.types.check.AbstractDerive;
import de.monticore.types.mcbasictypes._cocos.MCBasicTypesASTMCImportStatementCoCo;

public class CD4CodeBasisCoCos extends CoCoParent<CD4CodeBasisCoCoChecker> {

Expand All @@ -28,6 +31,16 @@ protected void addCheckerForAllCoCos(CD4CodeBasisCoCoChecker checker) {
addCheckerForMcg2EbnfCoCos(checker);
}

@Override
protected void addMcgCoCos(CD4CodeBasisCoCoChecker checker) {
super.addMcgCoCos(checker);

// CDImport Statements
CDOnlyResolvableImportStatements resolvableImports = new CDOnlyResolvableImportStatements();
checker.addCoCo((CDBasisASTCDTargetImportStatementCoCo) resolvableImports);
checker.addCoCo((MCBasicTypesASTMCImportStatementCoCo) resolvableImports);
}

@Override
protected void addEbnfCoCos(CD4CodeBasisCoCoChecker checker) {
super.addEbnfCoCos(checker);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/* (c) https://github.com/MontiCore/monticore */
package de.monticore.cdbasis.cocos;

import de.monticore.cdbasis.CDBasisMill;
import de.monticore.cdbasis._ast.ASTCDTargetImportStatement;
import de.monticore.cdbasis._cocos.CDBasisASTCDTargetImportStatementCoCo;
import de.monticore.types.mcbasictypes._ast.ASTMCImportStatement;
import de.monticore.types.mcbasictypes._cocos.MCBasicTypesASTMCImportStatementCoCo;
import de.se_rwth.commons.logging.Log;

public class CDOnlyResolvableImportStatements implements CDBasisASTCDTargetImportStatementCoCo,
MCBasicTypesASTMCImportStatementCoCo {

@Override
public void check(ASTCDTargetImportStatement node) {
if (node.isStar())
return; // TODO: Star imports can not be checked at the moment
String qName = node.getMCQualifiedName().getQName();
if (CDBasisMill.globalScope().resolveTypeMany(qName).isEmpty()) {
Log.warn("0xCDC40: Could not resolve target import ` " + qName
+ "` within the input models or symbol path.", node.get_SourcePositionStart(), node
.get_SourcePositionEnd());
}
}

@Override
public void check(ASTMCImportStatement node) {
if (node.isStar())
return; // TODO: Star imports can not be checked at the moment
String qName = node.getMCQualifiedName().getQName();
if (CDBasisMill.globalScope().resolveTypeMany(qName).isEmpty()) {
Log.error("0xCDC41: Could not resolve import `" + qName
+ "` within the input models or symbol path.", node.get_SourcePositionStart(), node
.get_SourcePositionEnd());
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/* (c) https://github.com/MontiCore/monticore */
package de.monticore.testcdbasis.cocos;

import de.monticore.cdbasis._cocos.CDBasisASTCDTargetImportStatementCoCo;
import de.monticore.cdbasis.cocos.CDOnlyResolvableImportStatements;
import de.monticore.cdbasis._ast.ASTCDCompilationUnit;
import de.monticore.runtime.junit.MCAssertions;
import de.monticore.testcdbasis.CDBasisTestBasis;
import de.monticore.types.mcbasictypes._cocos.MCBasicTypesASTMCImportStatementCoCo;
import de.se_rwth.commons.logging.Log;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class CDOnlyResolvableImportStatementsTest extends CDBasisTestBasis {

@Test
public void testInvalidTargetImportStatement() throws IOException {
CDOnlyResolvableImportStatements coCo = new CDOnlyResolvableImportStatements();
coCoChecker.addCoCo((CDBasisASTCDTargetImportStatementCoCo) coCo);
coCoChecker.addCoCo((MCBasicTypesASTMCImportStatementCoCo) coCo);
final Optional<ASTCDCompilationUnit> optAST = p.parse(getFilePath(
"cdbasis/cocos/CDUnresolvableTargetImportStatementsInvalid.cd"));
assertTrue(optAST.isPresent());
final ASTCDCompilationUnit ast = optAST.get();
Log.getFindings().clear();
coCoChecker.checkAll(ast);
MCAssertions.assertHasFindingsStartingWith("0xCDC40");
assertEquals(1, Log.getFindings().size());
}

@Test
public void testInvalidMCImportStatement() throws IOException {
CDOnlyResolvableImportStatements coCo = new CDOnlyResolvableImportStatements();
coCoChecker.addCoCo((CDBasisASTCDTargetImportStatementCoCo) coCo);
coCoChecker.addCoCo((MCBasicTypesASTMCImportStatementCoCo) coCo);
final Optional<ASTCDCompilationUnit> optAST = p.parse(getFilePath(
"cdbasis/cocos/CDUnresolvableMCImportStatementsInvalid.cd"));
assertTrue(optAST.isPresent());
final ASTCDCompilationUnit ast = optAST.get();
Log.getFindings().clear();
coCoChecker.checkAll(ast);
MCAssertions.assertHasFindingsStartingWith("0xCDC41");
assertEquals(1, Log.getFindings().size());
assertTrue(Log.getFindings().get(0).getMsg().startsWith("0xCDC41"));
}

@Override
public void after() {}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/* (c) https://github.com/MontiCore/monticore */
import this.path.doesnt.Exist;

classdiagram CDUnresolvableImportStatementsInvalid {

class A {
int number = 1;
}

class B extends A{
derived int number = 5;
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/* (c) https://github.com/MontiCore/monticore */
targetimport this.path.doesnt.Exist;

classdiagram CDUnresolvableTargetImportStatementsInvalid {

class A {
int number = 1;
}

class B extends A{
derived int number = 5;
}

}

Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/* (c) https://github.com/MontiCore/monticore */
import java.util.List;

classdiagram Valid {

Expand Down
6 changes: 5 additions & 1 deletion cdtool/src/test/java/de/monticore/ExampleCommandTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -175,8 +175,12 @@ public void testStoringSymbolsPerPathsExample1() {
tool.run(new String[] { "-i", fileName });

// Then
assertEquals(3, Log.getFindingsCount(), "Actual findings: " + Log.getFindings().toString());
assertEquals(4, Log.getFindingsCount(), "Actual findings: " + Log.getFindings().toString());
assertEquals("0xA0324 Cannot find symbol Address", Log.getFindings().get(0).getMsg());
assertEquals(
"0xCDC41: Could not resolve import `MyAddress.Address` within the input models or symbol path.",
Log.getFindings().get(3).getMsg());

Log.clearFindings();
}

Expand Down
Loading