From 426d1263a6fbf929fe0468c8c88f6368de4d8b14 Mon Sep 17 00:00:00 2001 From: Alexander Milster Date: Mon, 13 Jan 2025 21:34:29 +0100 Subject: [PATCH] Added contexts to languages --- .../src/main/java/de/jplag/Language.java | 5 +++++ .../src/main/java/de/jplag/cpp/CPPLanguage.java | 13 +++++++++++++ .../main/java/de/jplag/java/JavaLanguage.java | 17 +++++++++++++++++ .../java/de/jplag/kotlin/KotlinLanguage.java | 11 ++++++++++- 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/language-api/src/main/java/de/jplag/Language.java b/language-api/src/main/java/de/jplag/Language.java index ffe6aa9a6c..d7033d0ba5 100644 --- a/language-api/src/main/java/de/jplag/Language.java +++ b/language-api/src/main/java/de/jplag/Language.java @@ -1,6 +1,7 @@ package de.jplag; import java.io.File; +import java.util.Collections; import java.util.List; import java.util.Set; @@ -52,6 +53,10 @@ default List parse(Set files) throws ParsingException { */ List parse(Set files, boolean normalize) throws ParsingException; + default List> getTokenContexts() { + return Collections.emptyList(); + } + /** * Indicates whether the tokens returned by parse have semantic information added to them, i.e. whether the token * attribute semantics is null or not. diff --git a/languages/cpp/src/main/java/de/jplag/cpp/CPPLanguage.java b/languages/cpp/src/main/java/de/jplag/cpp/CPPLanguage.java index b76dfc823e..195af313bb 100644 --- a/languages/cpp/src/main/java/de/jplag/cpp/CPPLanguage.java +++ b/languages/cpp/src/main/java/de/jplag/cpp/CPPLanguage.java @@ -1,9 +1,16 @@ package de.jplag.cpp; +import java.util.List; + import org.kohsuke.MetaInfServices; import de.jplag.Language; import de.jplag.antlr.AbstractAntlrLanguage; +import de.jplag.tokentypes.ArraySyntaxTokenTypes; +import de.jplag.tokentypes.ExceptionHandlingTokenTypes; +import de.jplag.tokentypes.ImperativeTokenAttribute; +import de.jplag.tokentypes.InlineIfTokenTypes; +import de.jplag.tokentypes.ObjectOrientationTokens; /** * The entry point for the ANTLR parser based C++ language module. @@ -46,4 +53,10 @@ public boolean tokensHaveSemantics() { public boolean supportsNormalization() { return true; } + + @Override + public List> getTokenContexts() { + return List.of(ArraySyntaxTokenTypes.class, ExceptionHandlingTokenTypes.class, ImperativeTokenAttribute.class, InlineIfTokenTypes.class, + ObjectOrientationTokens.class); + } } diff --git a/languages/java/src/main/java/de/jplag/java/JavaLanguage.java b/languages/java/src/main/java/de/jplag/java/JavaLanguage.java index 79d32f502c..2b4fa72de2 100644 --- a/languages/java/src/main/java/de/jplag/java/JavaLanguage.java +++ b/languages/java/src/main/java/de/jplag/java/JavaLanguage.java @@ -8,6 +8,16 @@ import de.jplag.ParsingException; import de.jplag.Token; +import de.jplag.tokentypes.AnnotationTokenTypes; +import de.jplag.tokentypes.ArraySyntaxTokenTypes; +import de.jplag.tokentypes.AssertTokenTypes; +import de.jplag.tokentypes.CodeStructureTokenTypes; +import de.jplag.tokentypes.ExceptionHandlingTokenTypes; +import de.jplag.tokentypes.ImperativeTokenAttribute; +import de.jplag.tokentypes.InlineIfTokenTypes; +import de.jplag.tokentypes.ObjectOrientationTokens; +import de.jplag.tokentypes.ObjectOrientationWithInterfacesTokenAttributes; +import de.jplag.tokentypes.SynchronizedTokenTypes; /** * Language for Java 9 and newer. @@ -62,4 +72,11 @@ public boolean supportsNormalization() { public String toString() { return this.getIdentifier(); } + + @Override + public List> getTokenContexts() { + return List.of(AnnotationTokenTypes.class, ArraySyntaxTokenTypes.class, AssertTokenTypes.class, CodeStructureTokenTypes.class, + ExceptionHandlingTokenTypes.class, ImperativeTokenAttribute.class, InlineIfTokenTypes.class, ObjectOrientationTokens.class, + SynchronizedTokenTypes.class, ObjectOrientationWithInterfacesTokenAttributes.class); + } } diff --git a/languages/kotlin/src/main/java/de/jplag/kotlin/KotlinLanguage.java b/languages/kotlin/src/main/java/de/jplag/kotlin/KotlinLanguage.java index ac3b248f56..e68e4c5810 100644 --- a/languages/kotlin/src/main/java/de/jplag/kotlin/KotlinLanguage.java +++ b/languages/kotlin/src/main/java/de/jplag/kotlin/KotlinLanguage.java @@ -1,8 +1,14 @@ package de.jplag.kotlin; +import java.util.List; + import org.kohsuke.MetaInfServices; import de.jplag.antlr.AbstractAntlrLanguage; +import de.jplag.tokentypes.CodeStructureTokenTypes; +import de.jplag.tokentypes.ExceptionHandlingTokenTypes; +import de.jplag.tokentypes.ImperativeTokenType; +import de.jplag.tokentypes.ObjectOrientationTokens; /** * This represents the Kotlin language as a language supported by JPlag. @@ -39,5 +45,8 @@ public int minimumTokenMatch() { return DEFAULT_MIN_TOKEN_MATCH; } - // TODO contexts + @Override + public List> getTokenContexts() { + return List.of(CodeStructureTokenTypes.class, ExceptionHandlingTokenTypes.class, ImperativeTokenType.class, ObjectOrientationTokens.class); + } }