summaryrefslogblamecommitdiff
path: root/test/files/run/t2318.scala
blob: 4239c017b83b99a93a023e172d770ef73143fbc9 (plain) (tree)
1
2
3
4
5
6
7
8
9

                      

                                         

                             
 

                                                                 

                                                                                                 

                                                                                                                   
                                                                                                                                 
                                                                                                                          

     
 
              

                                               
                                                              

                   
              







                                                      
 

                                                    
            
                                               
 
        

   
import java.security._

import scala.language.{ reflectiveCalls }

object Test {
  trait Bar { def bar: Unit }

  object Mgr extends SecurityManager {
    override def checkPermission(perm: Permission) = perm match {
      case _: java.lang.RuntimePermission                                                   => ()
      case _: java.io.FilePermission                                                        => ()
      case x: java.security.SecurityPermission if x.getName contains ".networkaddress."     => () // generality ftw
      case x: java.util.PropertyPermission if x.getName == "sun.net.inetaddr.ttl"           => ()
      case _: java.lang.reflect.ReflectPermission                                           => () // needed for LambdaMetaFactory
      case _                                                                                => super.checkPermission(perm)
    }
  }

  def t1() = {
    val p = Runtime.getRuntime().exec("ls");
    type Destroyable = { def destroy() : Unit }
    def doDestroy( obj : Destroyable ) : Unit = obj.destroy();
    doDestroy( p );
  }
  def t2() = {
    System.setSecurityManager(Mgr)

    val b = new Bar { def bar = println("bar") }
    b.bar

    val structural = b.asInstanceOf[{ def bar: Unit }]
    structural.bar
  }

  def main(args: Array[String]) {
    // figuring this will otherwise break on windows
    try t1()
    catch { case _: java.io.IOException => () }

    t2()
  }
}