diff --git a/.idea/runConfigurations/Publish_To_Maven_Local.xml b/.idea/runConfigurations/Publish_To_Maven_Local.xml index a46db3b..cc5081b 100644 --- a/.idea/runConfigurations/Publish_To_Maven_Local.xml +++ b/.idea/runConfigurations/Publish_To_Maven_Local.xml @@ -4,7 +4,7 @@ diff --git a/build.gradle b/build.gradle index 1bbfa25..ac9fe9b 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ apply plugin: 'forge' apply plugin: 'maven-publish' apply plugin: 'com.github.johnrengelman.shadow' -version = '1.1.2' +version = '1.1.3' group = 'io.github.tox1cozz.mixinbooterlegacy' sourceCompatibility = targetCompatibility = '1.8' @@ -146,6 +146,11 @@ compileJava { archivesBaseName = '!mixinbooterlegacy' +def changedMixinsClasses = [ + 'org/spongepowered/asm/bridge/**', + 'org/spongepowered/tools/obfuscation/**' +] + jar { manifest { attributes 'FMLCorePlugin': 'io.github.tox1cozz.mixinbooterlegacy.MixinBooterLegacyPlugin' @@ -156,7 +161,7 @@ jar { exclude 'LICENSE.txt' exclude 'META-INF/services/*.Processor' // Replaced by custom classes - exclude 'org/spongepowered/asm/bridge/**' + exclude changedMixinsClasses } from mixinRefMap @@ -181,7 +186,7 @@ task sourcesJar(type: Jar, dependsOn: classes) { exclude 'LICENSE.txt' exclude 'META-INF/services/*.Processor' // Replaced by custom classes - exclude 'org/spongepowered/asm/bridge/**' + exclude changedMixinsClasses } } diff --git a/gradle/configurations/v1.gradle b/gradle/configurations/v1.gradle index 77d4c4f..07bc074 100644 --- a/gradle/configurations/v1.gradle +++ b/gradle/configurations/v1.gradle @@ -60,8 +60,8 @@ repositories { } dependencies { - implementation 'com.github.tox1cozZ:mixin-booter-legacy:1.1.2' - annotationProcessor 'com.github.tox1cozZ:mixin-booter-legacy:1.1.2:processor' + implementation 'com.github.tox1cozZ:mixin-booter-legacy:1.1.3' + annotationProcessor 'com.github.tox1cozZ:mixin-booter-legacy:1.1.3:processor' } tasks.register('mixin', MixinTask) diff --git a/src/main/java/io/github/tox1cozz/mixinbooterlegacy/MixinBooterLegacyPlugin.java b/src/main/java/io/github/tox1cozz/mixinbooterlegacy/MixinBooterLegacyPlugin.java index 08702f4..323f648 100644 --- a/src/main/java/io/github/tox1cozz/mixinbooterlegacy/MixinBooterLegacyPlugin.java +++ b/src/main/java/io/github/tox1cozz/mixinbooterlegacy/MixinBooterLegacyPlugin.java @@ -88,7 +88,7 @@ public Container() { ModMetadata meta = getMetadata(); meta.modId = "mixinbooterlegacy"; meta.name = "MixinBooterLegacy"; - meta.version = "1.1.2"; + meta.version = "1.1.3"; meta.description = "A Mixin library and loader."; meta.logoFile = "/icon.png"; meta.authorList.addAll(Lists.newArrayList("Rongmario", "tox1cozZ")); diff --git a/src/main/java/org/spongepowered/tools/obfuscation/MixinObfuscationProcessor.java b/src/main/java/org/spongepowered/tools/obfuscation/MixinObfuscationProcessor.java new file mode 100644 index 0000000..953618c --- /dev/null +++ b/src/main/java/org/spongepowered/tools/obfuscation/MixinObfuscationProcessor.java @@ -0,0 +1,107 @@ +/* + * This file is part of Mixin, licensed under the MIT License (MIT). + * + * Copyright (c) SpongePowered + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package org.spongepowered.tools.obfuscation; + +import java.util.Set; + +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.RoundEnvironment; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.TypeElement; +import javax.tools.Diagnostic.Kind; + +import org.spongepowered.asm.mixin.Mixin; + +/** + * Base class for mixin annotation processor modules + */ +public abstract class MixinObfuscationProcessor extends AbstractProcessor { + + /** + * Mixin info manager + */ + protected AnnotatedMixins mixins; + + /* (non-Javadoc) + * @see javax.annotation.processing.AbstractProcessor + * #init(javax.annotation.processing.ProcessingEnvironment) + */ + @Override + public synchronized void init(ProcessingEnvironment processingEnv) { + super.init(processingEnv); + this.mixins = AnnotatedMixins.getMixinsForEnvironment(processingEnv); + } + + /** + * Searches and catalogues all annotated mixin classes + * + * @param roundEnv round environment + */ + protected void processMixins(RoundEnvironment roundEnv) { + this.mixins.onPassStarted(); + + if (roundEnv == null) { + this.mixins.printMessage(Kind.ERROR, "RoundEnvironment in processMixins is null"); + return; + } + + for (Element elem : roundEnv.getElementsAnnotatedWith(Mixin.class)) { + if (elem == null) { + this.mixins.printMessage(Kind.ERROR, "Element in processMixins (roundEnv.getElementsAnnotatedWith(Mixin.class)) is null"); + continue; + } + + if (elem.getKind() == ElementKind.CLASS || elem.getKind() == ElementKind.INTERFACE) { + this.mixins.registerMixin((TypeElement)elem); + } else { + this.mixins.printMessage(Kind.ERROR, "Found an @Mixin annotation on an element which is not a class or interface", elem); + } + } + } + + protected void postProcess(RoundEnvironment roundEnv) { + this.mixins.onPassCompleted(roundEnv); + } + + @Override + public SourceVersion getSupportedSourceVersion() { + try { + return SourceVersion.valueOf("RELEASE_8"); + } catch (IllegalArgumentException ex) { + // Java 8 not supported + } + + return super.getSupportedSourceVersion(); + } + + @Override + public Set getSupportedOptions() { + return SupportedOptions.getAllOptions(); + } + +} \ No newline at end of file