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
20 changes: 7 additions & 13 deletions javaDSL/src/main/grammars/de/monticore/java/JavaDSL.mc4
Original file line number Diff line number Diff line change
Expand Up @@ -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
;
Expand Down Expand Up @@ -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?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -107,11 +106,11 @@ public static List<ISymbol> cleanReferences(String name, List<ISymbol> infixList
return result;
}

public static Optional<ASTJavaAnnotation> getInfoJavaAnnot(List<ASTJavaModifier> mods) {
public static Optional<ASTAnnotation> getInfoJavaAnnot(List<ASTJavaModifier> 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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -39,7 +41,7 @@ public void setAllTypeDeclarations(Set<ASTTypeDeclaration> typeDeclarationSet) {
@Override
public Optional<CodeMatching> getMatchedType(ASTTypeDeclaration type) {

Optional<ASTJavaAnnotation> annotation = Optional.empty();
Optional<ASTAnnotation> annotation = Optional.empty();
if (type instanceof ASTClassDeclaration) {
annotation = getInfoJavaAnnot(((ASTClassDeclaration) type).getJavaModifierList());
} else if (type instanceof ASTInterfaceDeclaration) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public Optional<CodeMatching> getMatchedLocalVariable(
@Override
public Optional<CodeMatching> getMatchedFormalParameter(
ASTTypeDeclaration type, ASTMethodDeclaration method, ASTFormalParameter param) {
return getInfoJavaAnnot(param.getJavaModifierList())
return getInfoAnnotation(param.getMCModifierList())
.map(annot -> mkMatchingFromAnnotation(annot, cd));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public void visit(ASTFieldDeclaration node) {

@Override
public void visit(ASTFormalParameter param) {
removeJavaInfoAnnot(param.getJavaModifierList());
removeInfoAnnot(param.getMCModifierList());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,6 @@ public Optional<CodeMatching> 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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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) {
Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -46,13 +50,13 @@ public void check(ASTMethodDeclaration node) {
@Override
public void check(ASTFieldDeclaration node) {
String srcName = node.getVariableDeclarator(0).getDeclarator().getName();
Optional<ASTJavaAnnotation> annotation = getInfoJavaAnnot(node.getJavaModifierList());
Optional<ASTAnnotation> annotation = getInfoJavaAnnot(node.getJavaModifierList());
annotation.ifPresent(astJavaAnnotation -> checkTemplate(astJavaAnnotation, srcName));
}

@Override
public void check(ASTTypeDeclaration node) {
Optional<ASTJavaAnnotation> annotation = Optional.empty();
Optional<ASTAnnotation> annotation = Optional.empty();
if (node instanceof ASTClassDeclaration) {
annotation = getInfoJavaAnnot(((ASTClassDeclaration) node).getJavaModifierList());
} else if (node instanceof ASTInterfaceDeclaration) {
Expand All @@ -66,7 +70,7 @@ public void check(ASTTypeDeclaration node) {

@Override
public void check(ASTFormalParameter node) {
Optional<ASTJavaAnnotation> annotation = getInfoJavaAnnot(node.getJavaModifierList());
Optional<ASTAnnotation> annotation = getInfoAnnotation(node.getMCModifierList());
annotation.ifPresent(
astJavaAnnotation -> checkTemplate(astJavaAnnotation, node.getDeclarator().getName()));
}
Expand Down
Loading