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
10 changes: 10 additions & 0 deletions javaDSL/src/main/grammars/de/monticore/java/JavaDSL.mc4
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,16 @@ ClassCreatorRest
= Arguments ClassBody?
;

// Add support for 'var'
@Override
LocalVariableDeclaration
= MCModifier* (["var"] | MCType) (VariableDeclarator || ",")+ ;

@Override
LambdaParameter implements Variable = (["var"] | MCType)? Name;

nokeyword "var";

/*
* TODO Remove this
* This is a workaround to a questionable behavior in the core grammar JavaLight
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public class ParsableAndCompilableModelsTest extends AbstractTest {
"src/test/resources/parsableAndCompilableModels/simpleTestClasses/types/SimpleInterfaceTestModel.java",
"src/test/resources/parsableAndCompilableModels/simpleTestClasses/EmptyClass.java",
"src/test/resources/parsableAndCompilableModels/simpleTestClasses/HelloWorld.java",
"src/test/resources/parsableAndCompilableModels/simpleTestClasses/VarVariables.java",
"src/test/resources/parsableAndCompilableModels/simpleTestClasses/OneFieldClass.java",
"src/test/resources/parsableAndCompilableModels/simpleTestClasses/QualifiedNameTestClass.java",
// Stressful package
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/* (c) https://github.com/MontiCore/monticore */

package simpleTestClasses;

import java.util.function.Function;

public class VarVariables {
public boolean varTest() {
var x = 42;
final var y = 42 + 1;

int var = 42 + 2;

for (var i = 0; i < x; i++) {
var j = i * 2;
}

Function<String, String> q = (var p) -> "Hello " + p;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@
import de.monticore.codeAdaption.validator.CodeValidator;
import de.monticore.java.javadsl.JavaDSLMill;
import de.monticore.java.javadsl._ast.ASTFieldDeclaration;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTOrdinaryCompilationUnit;
import de.monticore.java.javadsl._ast.ASTTypeDeclaration;
import de.monticore.java.javadsl._visitor.JavaDSLTraverser;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import de.monticore.symbols.oosymbols._symboltable.FieldSymbol;
import de.monticore.symboltable.ISymbol;
import de.monticore.types.mcbasictypes._ast.ASTMCType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package de.monticore.codeAdaption.matcher;

import de.monticore.cdbasis._ast.ASTCDCompilationUnit;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTTypeDeclaration;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import java.util.Optional;

public interface VariableMatcher {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
import de.monticore.cdbasis._ast.ASTCDCompilationUnit;
import de.monticore.codeAdaption.matcher.CodeMatching;
import de.monticore.codeAdaption.matcher.VariableMatcher;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTTypeDeclaration;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import java.util.Optional;

/***
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
import de.monticore.cdbasis._ast.ASTCDCompilationUnit;
import de.monticore.codeAdaption.matcher.CodeMatching;
import de.monticore.codeAdaption.matcher.VariableMatcher;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTTypeDeclaration;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import java.util.List;
import java.util.Optional;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
import de.monticore.codeAdaption.matcher.CodeMatching;
import de.monticore.codeAdaption.matcher.VariableMatcher;
import de.monticore.codeAdaption.utils.AdapterUtils;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTTypeDeclaration;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import de.se_rwth.commons.logging.Log;
import java.util.Optional;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
import de.monticore.cdbasis._ast.ASTCDCompilationUnit;
import de.monticore.codeAdaption.matcher.CodeMatching;
import de.monticore.codeAdaption.matcher.VariableMatcher;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTTypeDeclaration;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import java.util.Optional;

/***
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import de.monticore.java.javadsl._ast.ASTTypeDeclaration;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.symboltable.ISymbol;
import java.util.List;
import java.util.Optional;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import de.monticore.java.javadsl._ast.ASTTypeDeclaration;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.types.mcbasictypes._ast.ASTMCType;
import java.io.File;
import java.nio.file.Path;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import de.monticore.java.javadsl._ast.ASTTypeDeclaration;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.types.mcbasictypes._ast.ASTMCType;
import java.io.File;
import java.nio.file.Path;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import de.monticore.java.javadsl._ast.ASTTypeDeclaration;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.types.mcbasictypes._ast.ASTMCType;
import java.io.File;
import java.nio.file.Path;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import de.monticore.statements.mccommonstatements._ast.ASTJavaModifier;
import de.monticore.statements.mccommonstatements._visitor.MCCommonStatementsVisitor2;
import de.monticore.statements.mcstatementsbasis._ast.ASTMCModifier;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.statements.mcvardeclarationstatements._visitor.MCVarDeclarationStatementsVisitor2;
import java.util.List;
import java.util.Optional;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
import de.monticore.javalight._visitor.JavaLightVisitor2;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mccommonstatements._visitor.MCCommonStatementsVisitor2;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import de.monticore.statements.mcvardeclarationstatements._visitor.MCVarDeclarationStatementsVisitor2;
import de.monticore.types.mcbasictypes._ast.ASTMCType;
import java.util.*;

Expand Down Expand Up @@ -123,8 +121,8 @@ public void visit(ASTMethodDeclaration node) {

JavaDSLTraverser traverser = JavaDSLMill.traverser();

MCVarDeclarationStatementsVisitor2 localVarCollector =
new MCVarDeclarationStatementsVisitor2() {
JavaDSLVisitor2 localVarCollector =
new JavaDSLVisitor2() {
@Override
public void visit(ASTLocalVariableDeclaration node) {
localVars.add(node);
Expand All @@ -139,7 +137,7 @@ public void visit(ASTFormalParameter node) {
}
};

traverser.add4MCVarDeclarationStatements(localVarCollector);
traverser.add4JavaDSL(localVarCollector);
traverser.add4MCCommonStatements(formalParamVisitor);
node.accept(traverser);
localVarsMap.put(node, localVars);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,20 +32,16 @@
import de.monticore.codeAdaption.validator.cocos.ValidTemplate;
import de.monticore.java.javadsl.JavaDSLMill;
import de.monticore.java.javadsl._ast.ASTFieldDeclaration;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTOrdinaryCompilationUnit;
import de.monticore.java.javadsl._ast.ASTTypeDeclaration;
import de.monticore.java.javadsl._cocos.JavaDSLASTFieldDeclarationCoCo;
import de.monticore.java.javadsl._cocos.JavaDSLASTJavaAnnotationCoCo;
import de.monticore.java.javadsl._cocos.JavaDSLASTTypeDeclarationCoCo;
import de.monticore.java.javadsl._cocos.JavaDSLCoCoChecker;
import de.monticore.java.javadsl._cocos.*;
import de.monticore.java.javadsl._visitor.JavaDSLTraverser;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.javalight._cocos.JavaLightASTAnnotationCoCo;
import de.monticore.javalight._cocos.JavaLightASTMethodDeclarationCoCo;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mccommonstatements._cocos.MCCommonStatementsASTFormalParameterCoCo;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import de.monticore.statements.mcvardeclarationstatements._cocos.MCVarDeclarationStatementsASTLocalVariableDeclarationCoCo;
import de.monticore.types.mcbasictypes._ast.ASTMCType;
import java.nio.file.Path;
import java.util.*;
Expand Down Expand Up @@ -183,19 +179,17 @@ protected void runCoCosPhase1(ASTOrdinaryCompilationUnit ast, ASTCDCompilationUn
JavaDSLCoCoChecker checker = new JavaDSLCoCoChecker();
checker.addCoCo((JavaDSLASTJavaAnnotationCoCo) new ValidAnnotation(refCD));
checker.addCoCo((JavaLightASTAnnotationCoCo) new ValidAnnotation(refCD));
// implicitly also adds CoCo to JavaDSLASTLocalVariableDeclaration
checker.addCoCo((JavaDSLASTFieldDeclarationCoCo) new OneVarInDeclaration());
checker.addCoCo(
(MCVarDeclarationStatementsASTLocalVariableDeclarationCoCo) new OneVarInDeclaration());
checker.checkAll(ast);
}

protected void runCoCosPhase2(ASTOrdinaryCompilationUnit ast, ASTCDCompilationUnit refCD) {
JavaDSLCoCoChecker checker = new JavaDSLCoCoChecker();
// implicitly also adds CoCo to JavaDSLASTLocalVariableDeclaration
checker.addCoCo((JavaDSLASTTypeDeclarationCoCo) new ValidTemplate(refCD));
checker.addCoCo((JavaLightASTMethodDeclarationCoCo) new ValidTemplate(refCD));
checker.addCoCo((MCCommonStatementsASTFormalParameterCoCo) new ValidTemplate(refCD));
checker.addCoCo(
(MCVarDeclarationStatementsASTLocalVariableDeclarationCoCo) new ValidTemplate(refCD));
checker.checkAll(ast);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,16 @@

import de.monticore.java.javadsl._ast.ASTFieldDeclaration;
import de.monticore.java.javadsl._cocos.JavaDSLASTFieldDeclarationCoCo;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import de.monticore.statements.mcvardeclarationstatements._cocos.MCVarDeclarationStatementsASTLocalVariableDeclarationCoCo;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._cocos.JavaDSLASTLocalVariableDeclarationCoCo;
import de.se_rwth.commons.logging.Log;

/**
* check if there are only one variable for each variable declaration. eg: "String a, b"; is not
* allowed. allow is "String a; String b";
*/
public class OneVarInDeclaration
implements JavaDSLASTFieldDeclarationCoCo,
MCVarDeclarationStatementsASTLocalVariableDeclarationCoCo {
implements JavaDSLASTFieldDeclarationCoCo, JavaDSLASTLocalVariableDeclarationCoCo {
protected String message =
"0xRC002 %s invalid variable declaration: expected just one variable per declaration but got more.";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@
import de.monticore.codeAdaption.utils.AdapterUtils;
import de.monticore.java.javadsl._ast.*;
import de.monticore.java.javadsl._cocos.JavaDSLASTFieldDeclarationCoCo;
import de.monticore.java.javadsl._cocos.JavaDSLASTLocalVariableDeclarationCoCo;
import de.monticore.java.javadsl._cocos.JavaDSLASTTypeDeclarationCoCo;
import de.monticore.javalight._ast.ASTAnnotation;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.javalight._cocos.JavaLightASTMethodDeclarationCoCo;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mccommonstatements._cocos.MCCommonStatementsASTFormalParameterCoCo;
import de.monticore.statements.mcstatementsbasis._ast.ASTMCModifier;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import de.monticore.statements.mcvardeclarationstatements._cocos.MCVarDeclarationStatementsASTLocalVariableDeclarationCoCo;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.se_rwth.commons.logging.Log;
import java.util.Optional;

Expand All @@ -25,7 +25,7 @@ public class ValidTemplate
JavaDSLASTTypeDeclarationCoCo,
JavaLightASTMethodDeclarationCoCo,
MCCommonStatementsASTFormalParameterCoCo,
MCVarDeclarationStatementsASTLocalVariableDeclarationCoCo {
JavaDSLASTLocalVariableDeclarationCoCo {
protected ASTCDCompilationUnit cd;

public ValidTemplate(ASTCDCompilationUnit cd) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
import de.monticore.codeAdaption.utils.AdapterParam;
import de.monticore.codeAdaption.validator.CodeValidator;
import de.monticore.java.javadsl._ast.ASTFieldDeclaration;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTTypeDeclaration;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import java.util.Optional;
import java.util.Set;
import org.junit.jupiter.api.Assertions;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

import de.monticore.codeAdaption.validator.CodeValidator;
import de.monticore.java.javadsl._ast.ASTFieldDeclaration;
import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration;
import de.monticore.java.javadsl._ast.ASTTypeDeclaration;
import de.monticore.javalight._ast.ASTMethodDeclaration;
import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter;
import de.monticore.statements.mcvardeclarationstatements._ast.ASTLocalVariableDeclaration;
import java.util.Optional;
import java.util.Set;
import org.junit.jupiter.api.*;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public void checkAnnotationPhase2(String filename, String errorCode) {
ASTOrdinaryCompilationUnit ast = JavaLoader.loadJava(new File(fileName));
validator.runCoCosPhase2(ast, cd);

Assertions.assertEquals(Log.getErrorCount(), 5);
Assertions.assertEquals(5, Log.getErrorCount());
Log.getFindings().forEach(f -> Assertions.assertTrue(f.getMsg().startsWith(errorCode)));
}
}