2021-07-18 13:13:47 +00:00
/ *
* This file is part of fabric - loom , licensed under the MIT License ( MIT ) .
*
* Copyright ( c ) 2021 FabricMC
*
* 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 net.fabricmc.loom.extension ;
import java.util.AbstractMap ;
import java.util.Collection ;
import java.util.Collections ;
import java.util.Map ;
import java.util.function.Function ;
import java.util.stream.Collectors ;
import java.util.stream.Stream ;
2021-07-26 19:08:03 +00:00
import javax.inject.Inject ;
2021-07-18 13:13:47 +00:00
import org.gradle.api.Project ;
import org.gradle.api.Task ;
import org.gradle.api.UnknownTaskException ;
import org.gradle.api.artifacts.Configuration ;
2021-12-17 15:37:00 +00:00
import org.gradle.api.plugins.BasePluginExtension ;
import org.gradle.api.plugins.JavaPluginExtension ;
2021-07-26 19:08:03 +00:00
import org.gradle.api.provider.Property ;
import org.gradle.api.provider.Provider ;
2021-07-18 13:13:47 +00:00
import org.gradle.api.tasks.Input ;
import org.gradle.api.tasks.SourceSet ;
import org.gradle.api.tasks.util.PatternSet ;
import org.jetbrains.annotations.NotNull ;
2021-09-07 10:28:51 +00:00
public class MixinExtensionImpl extends MixinExtensionApiImpl implements MixinExtension {
2021-07-18 13:13:47 +00:00
private boolean isDefault ;
2021-07-26 19:08:03 +00:00
private final Property < String > defaultRefmapName ;
2021-07-18 13:13:47 +00:00
2021-07-26 19:08:03 +00:00
@Inject
2021-09-07 10:28:51 +00:00
public MixinExtensionImpl ( Project project ) {
super ( project ) ;
2021-07-18 13:13:47 +00:00
this . isDefault = true ;
2021-07-26 19:08:03 +00:00
this . defaultRefmapName = project . getObjects ( ) . property ( String . class )
. convention ( project . provider ( this : : getDefaultMixinRefmapName ) ) ;
2021-07-18 13:13:47 +00:00
}
@Override
2021-07-26 19:08:03 +00:00
public Property < String > getDefaultRefmapName ( ) {
2021-09-07 10:28:51 +00:00
if ( ! super . getUseLegacyMixinAp ( ) . get ( ) ) throw new IllegalStateException ( "You need to set useLegacyMixinAp = true to configure Mixin annotation processor." ) ;
2021-07-26 19:08:03 +00:00
return defaultRefmapName ;
}
private String getDefaultMixinRefmapName ( ) {
2021-12-17 15:37:00 +00:00
String defaultRefmapName = project . getExtensions ( ) . getByType ( BasePluginExtension . class ) . getArchivesName ( ) . get ( ) + "-refmap.json" ;
2021-09-07 10:28:51 +00:00
project . getLogger ( ) . info ( "Could not find refmap definition, will be using default name: " + defaultRefmapName ) ;
2021-07-26 19:08:03 +00:00
return defaultRefmapName ;
}
@Override
protected PatternSet add0 ( SourceSet sourceSet , Provider < String > refmapName ) {
2021-09-07 10:28:51 +00:00
if ( ! super . getUseLegacyMixinAp ( ) . get ( ) ) throw new IllegalStateException ( "You need to set useLegacyMixinAp = true to configure Mixin annotation processor." ) ;
2021-07-28 07:50:14 +00:00
PatternSet pattern = new PatternSet ( ) . setIncludes ( Collections . singletonList ( "*.json" ) ) ;
2021-09-07 10:28:51 +00:00
MixinExtension . setMixinInformationContainer ( sourceSet , new MixinExtension . MixinInformationContainer ( sourceSet , refmapName , pattern ) ) ;
2021-07-18 13:13:47 +00:00
isDefault = false ;
return pattern ;
}
@Override
@NotNull
public Stream < SourceSet > getMixinSourceSetsStream ( ) {
2021-12-17 15:37:00 +00:00
return project . getExtensions ( ) . getByType ( JavaPluginExtension . class ) . getSourceSets ( ) . stream ( )
2021-09-07 10:28:51 +00:00
. filter ( sourceSet - > MixinExtension . getMixinInformationContainer ( sourceSet ) ! = null ) ;
2021-07-18 13:13:47 +00:00
}
@Override
@NotNull
public Stream < Configuration > getApConfigurationsStream ( Function < String , String > getApConfigNameFunc ) {
return getMixinSourceSetsStream ( )
. map ( sourceSet - > project . getConfigurations ( ) . getByName ( getApConfigNameFunc . apply ( sourceSet . getName ( ) ) ) ) ;
}
@Override
@NotNull
public Stream < Map . Entry < SourceSet , Task > > getInvokerTasksStream ( String compileTaskLanguage ) {
return getMixinSourceSetsStream ( )
. flatMap ( sourceSet - > {
try {
Task task = project . getTasks ( ) . getByName ( sourceSet . getCompileTaskName ( compileTaskLanguage ) ) ;
return Stream . of ( new AbstractMap . SimpleEntry < > ( sourceSet , task ) ) ;
} catch ( UnknownTaskException ignored ) {
return Stream . empty ( ) ;
}
} ) ;
}
@Override
@NotNull
@Input
public Collection < SourceSet > getMixinSourceSets ( ) {
return getMixinSourceSetsStream ( ) . collect ( Collectors . toList ( ) ) ;
}
@Override
public void init ( ) {
if ( isDefault ) {
2021-12-17 15:37:00 +00:00
project . getExtensions ( ) . getByType ( JavaPluginExtension . class ) . getSourceSets ( ) . forEach ( this : : add ) ;
2021-07-18 13:13:47 +00:00
}
isDefault = false ;
}
}