diff --git a/javaDSL/src/main/grammars/de/monticore/java/JavaDSL.mc4 b/javaDSL/src/main/grammars/de/monticore/java/JavaDSL.mc4 index 06cc7ffe..dd9f9332 100644 --- a/javaDSL/src/main/grammars/de/monticore/java/JavaDSL.mc4 +++ b/javaDSL/src/main/grammars/de/monticore/java/JavaDSL.mc4 @@ -267,6 +267,13 @@ ArrayInitializer implements VariableInitializer // ANNOTATIONS +Annotation implements JavaModifier; + +astrule Annotation = + method public int getModifier() { + return -1; + }; + symbol scope AnnotationTypeDeclaration extends TypeDeclaration = JavaModifier* "@" "interface" Name AnnotationTypeBody ; @@ -381,19 +388,6 @@ LambdaParameter implements Variable = (["var"] | MCType)? Name; nokeyword "var"; -/* - * TODO Remove this - * This is a workaround to a questionable behavior in the core grammar JavaLight - * where the production "Annotation" does not extend "JavaModifier" whereas - * various productions use JavaModifier in places where annotations are allowed. - * - * We cannot override the Annotation production because we already extend - * JavaModifier either, so we'll have to live with a separate production for now. - */ -JavaAnnotation extends JavaModifier implements ElementValue - = "@" annotationName:MCQualifiedName - ( "(" AnnotationArguments? ")" )? - ; AnonymousClass implements Creator = MCType Arguments ClassBody? diff --git a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/matcher/MatcherHelper.java b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/matcher/MatcherHelper.java index b96c9d38..f5d44b5d 100644 --- a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/matcher/MatcherHelper.java +++ b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/matcher/MatcherHelper.java @@ -9,7 +9,6 @@ import de.monticore.codeAdaption.utils.AdapterUtils; import de.monticore.codeAdaption.utils.JavaLoader; import de.monticore.java.javadsl.JavaDSLMill; -import de.monticore.java.javadsl._ast.ASTJavaAnnotation; import de.monticore.java.javadsl._visitor.JavaDSLTraverser; import de.monticore.javalight._ast.*; import de.monticore.statements.mccommonstatements._ast.ASTJavaModifier; @@ -107,11 +106,11 @@ public static List cleanReferences(String name, List infixList return result; } - public static Optional getInfoJavaAnnot(List mods) { + public static Optional getInfoJavaAnnot(List mods) { for (ASTMCModifier mod : mods) { - if (mod instanceof ASTJavaAnnotation - && ((ASTJavaAnnotation) mod).getAnnotationName().getQName().equals(ANNOT_NAME)) { - return Optional.of((ASTJavaAnnotation) mod); + if (mod instanceof ASTAnnotation + && ((ASTAnnotation) mod).getAnnotationName().getQName().equals(ANNOT_NAME)) { + return Optional.of((ASTAnnotation) mod); } } return Optional.empty(); diff --git a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/matcher/annotMatcher/AnnotTypeMatcher.java b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/matcher/annotMatcher/AnnotTypeMatcher.java index dfdb364c..cda9dc4c 100644 --- a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/matcher/annotMatcher/AnnotTypeMatcher.java +++ b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/matcher/annotMatcher/AnnotTypeMatcher.java @@ -6,6 +6,8 @@ import de.monticore.codeAdaption.matcher.CodeMatching; import de.monticore.codeAdaption.matcher.TypeMatcher; import de.monticore.java.javadsl._ast.*; +import de.monticore.javalight._ast.ASTAnnotation; + import java.util.Optional; import java.util.Set; @@ -39,7 +41,7 @@ public void setAllTypeDeclarations(Set typeDeclarationSet) { @Override public Optional getMatchedType(ASTTypeDeclaration type) { - Optional annotation = Optional.empty(); + Optional annotation = Optional.empty(); if (type instanceof ASTClassDeclaration) { annotation = getInfoJavaAnnot(((ASTClassDeclaration) type).getJavaModifierList()); } else if (type instanceof ASTInterfaceDeclaration) { diff --git a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/matcher/annotMatcher/AnnotVariableMatcher.java b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/matcher/annotMatcher/AnnotVariableMatcher.java index 3da61422..8723215f 100644 --- a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/matcher/annotMatcher/AnnotVariableMatcher.java +++ b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/matcher/annotMatcher/AnnotVariableMatcher.java @@ -35,7 +35,7 @@ public Optional getMatchedLocalVariable( @Override public Optional getMatchedFormalParameter( ASTTypeDeclaration type, ASTMethodDeclaration method, ASTFormalParameter param) { - return getInfoJavaAnnot(param.getJavaModifierList()) + return getInfoAnnotation(param.getMCModifierList()) .map(annot -> mkMatchingFromAnnotation(annot, cd)); } } diff --git a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/utils/visitors/AnnotationRemover.java b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/utils/visitors/AnnotationRemover.java index 440d6d4b..2dbfc218 100644 --- a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/utils/visitors/AnnotationRemover.java +++ b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/utils/visitors/AnnotationRemover.java @@ -61,7 +61,7 @@ public void visit(ASTFieldDeclaration node) { @Override public void visit(ASTFormalParameter param) { - removeJavaInfoAnnot(param.getJavaModifierList()); + removeInfoAnnot(param.getMCModifierList()); } @Override diff --git a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/validator/CodeValidator.java b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/validator/CodeValidator.java index dc35fec5..fdd59d01 100644 --- a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/validator/CodeValidator.java +++ b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/validator/CodeValidator.java @@ -177,7 +177,6 @@ public Optional getMatchedParameter( protected void runCoCosPhase1(ASTOrdinaryCompilationUnit ast, ASTCDCompilationUnit refCD) { 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()); diff --git a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/validator/cocos/ValidAnnotation.java b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/validator/cocos/ValidAnnotation.java index e78822a9..03669393 100644 --- a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/validator/cocos/ValidAnnotation.java +++ b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/validator/cocos/ValidAnnotation.java @@ -9,8 +9,6 @@ import de.monticore.codeAdaption.utils.Constants; import de.monticore.codeAdaption.utils.JavaLoader; import de.monticore.java.javadsl.JavaDSLMill; -import de.monticore.java.javadsl._ast.ASTJavaAnnotation; -import de.monticore.java.javadsl._cocos.JavaDSLASTJavaAnnotationCoCo; import de.monticore.java.javadsl._visitor.JavaDSLTraverser; import de.monticore.javalight._ast.ASTAnnotation; import de.monticore.javalight._cocos.JavaLightASTAnnotationCoCo; @@ -23,7 +21,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -public class ValidAnnotation implements JavaDSLASTJavaAnnotationCoCo, JavaLightASTAnnotationCoCo { +public class ValidAnnotation implements JavaLightASTAnnotationCoCo { private final ASTCDCompilationUnit cd; public ValidAnnotation(ASTCDCompilationUnit cd) { @@ -39,12 +37,6 @@ public ValidAnnotation(ASTCDCompilationUnit cd) { protected String refNotFound = "0xRC001 %s Invalid annotation:the reference [%s] was not found in the class diagram [%s]"; - @Override - public void check(ASTJavaAnnotation node) { - if (JavaLoader.print(node.getAnnotationName()).endsWith(ANNOT_NAME)) { - checkAnnotation(node); - } - } @Override public void check(ASTAnnotation node) { diff --git a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/validator/cocos/ValidTemplate.java b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/validator/cocos/ValidTemplate.java index d8751254..26bdb84a 100644 --- a/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/validator/cocos/ValidTemplate.java +++ b/ref-code-adaptation/src/main/java/de/monticore/codeAdaption/validator/cocos/ValidTemplate.java @@ -14,11 +14,15 @@ import de.monticore.javalight._ast.ASTMethodDeclaration; import de.monticore.javalight._cocos.JavaLightASTMethodDeclarationCoCo; import de.monticore.statements.mccommonstatements._ast.ASTFormalParameter; +import de.monticore.statements.mccommonstatements._ast.ASTJavaModifier; import de.monticore.statements.mccommonstatements._cocos.MCCommonStatementsASTFormalParameterCoCo; import de.monticore.statements.mcstatementsbasis._ast.ASTMCModifier; import de.monticore.java.javadsl._ast.ASTLocalVariableDeclaration; import de.se_rwth.commons.logging.Log; + +import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; public class ValidTemplate implements JavaDSLASTFieldDeclarationCoCo, @@ -46,13 +50,13 @@ public void check(ASTMethodDeclaration node) { @Override public void check(ASTFieldDeclaration node) { String srcName = node.getVariableDeclarator(0).getDeclarator().getName(); - Optional annotation = getInfoJavaAnnot(node.getJavaModifierList()); + Optional annotation = getInfoJavaAnnot(node.getJavaModifierList()); annotation.ifPresent(astJavaAnnotation -> checkTemplate(astJavaAnnotation, srcName)); } @Override public void check(ASTTypeDeclaration node) { - Optional annotation = Optional.empty(); + Optional annotation = Optional.empty(); if (node instanceof ASTClassDeclaration) { annotation = getInfoJavaAnnot(((ASTClassDeclaration) node).getJavaModifierList()); } else if (node instanceof ASTInterfaceDeclaration) { @@ -66,7 +70,7 @@ public void check(ASTTypeDeclaration node) { @Override public void check(ASTFormalParameter node) { - Optional annotation = getInfoJavaAnnot(node.getJavaModifierList()); + Optional annotation = getInfoAnnotation(node.getMCModifierList()); annotation.ifPresent( astJavaAnnotation -> checkTemplate(astJavaAnnotation, node.getDeclarator().getName())); }