All Downloads are FREE. Search and download functionalities are using the official Maven repository.

manifold.internal.javac.BootstrapPackages Maven / Gradle / Ivy

The newest version!
package manifold.internal.javac;

import com.sun.tools.javac.processing.JavacProcessingEnvironment;

import javax.tools.Diagnostic;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.StringTokenizer;

import static manifold.internal.javac.BootstrapPackages.Kind.*;

public class BootstrapPackages
{
  enum Kind { Whitelist, Blacklist, All }

  private final Kind _kind;
  private final Set _packages;

  public BootstrapPackages( Set values, JavacProcessingEnvironment jpe )
  {
    if( values == null || values.isEmpty() )
    {
      // no packages indicate all packages
      _kind = All;
      _packages = null;
      return;
    }

    char kindChar = values.iterator().next().charAt( 0 );
    _kind = kindChar == '+' ? Whitelist : Blacklist;
    if( values.stream().anyMatch( e -> e.charAt( 0 ) != kindChar ) )
    {
      jpe.getMessager().printMessage( Diagnostic.Kind.ERROR,
        "Manifold plugin --bootstrap arguments must be consistently + or -, not both" );
    }

    _packages = parsePackages( values );
  }

  private Set parsePackages( Set values )
  {
    final Set packages = new LinkedHashSet<>();
    for( String value: values )
    {
      for( StringTokenizer tokenizer = new StringTokenizer( value.substring( 1 ), ";, " ); tokenizer.hasMoreTokens(); )
      {
        String pkg = tokenizer.nextToken();
        if( !pkg.isEmpty() )
        {
          packages.add( pkg );
        }
      }
    }
    return packages;
  }

  public boolean contains( String pkg )
  {
    switch( _kind )
    {
      case Whitelist:
        return _packages.stream().anyMatch( e -> pkg.equals( e ) || pkg.startsWith( e + '.' ) );
      case Blacklist:
        return _packages.stream().noneMatch( e -> pkg.equals( e ) || pkg.startsWith( e + '.' ) );
      case All:
        return true;
    }
    throw new IllegalStateException( "Unknown kind: " + _kind );
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy