2013-01-16 8 views
16

Ho un plugin per compilatore di Scala 2.9 (codice sorgente) e funziona perfettamente con 2.9 ma non lo compilo nemmeno con 2.10. Ci sono decine (forse più di 100) di errori tutti dello stesso tipo, quali:Qualche informazione là fuori sulla migrazione di un plugin per compilatore di Scala 2.9 a 2.10?

[scalac] C:\***.scala:31: error: illegal cyclic reference involving class Global 
    [scalac] val fileSeparator = System.getProperty("file.separator"); 
    [scalac]      ^

... che alla fine terminano con:

[scalac] scala.reflect.internal.Types$TypeError: illegal cyclic reference involving class Global 
    [scalac]  at scala.reflect.internal.Types$class.defineBaseClassesOfCompoundType(Types.scala:1731) 
    [scalac]  at scala.reflect.internal.SymbolTable.defineBaseClassesOfCompoundType(SymbolTable.scala:12) 
    [scalac]  at scala.reflect.internal.Types$CompoundType.baseClasses(Types.scala:1581) 
    [scalac]  at scala.reflect.internal.Types$TypeRef.baseClasses(Types.scala:2369) 
    [scalac]  at scala.reflect.internal.Types$SimpleTypeProxy$class.baseClasses(Types.scala:248) 
    [scalac]  at scala.reflect.internal.Types$SingletonType.baseClasses(Types.scala:1292) 
    [scalac]  at scala.reflect.internal.Types$Type.findMembers(Types.scala:1058) 
    [scalac]  at scala.reflect.internal.Types$Type.membersBasedOnFlags(Types.scala:683) 
    [scalac]  at scala.reflect.internal.Types$Type.implicitMembers(Types.scala:637) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.collect$1(Contexts.scala:630) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.collectImplicitImports(Contexts.scala:642) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:670) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.bestImplicit(Implicits.scala:1378) 
    [scalac]  at scala.tools.nsc.typechecker.Implicits$class.inferImplicit(Implicits.scala:82) 
    [scalac]  at scala.tools.nsc.Global$$anon$1.inferImplicit(Global.scala:490) 
    [scalac]  at scala.tools.nsc.typechecker.Implicits$class.inferImplicit(Implicits.scala:37) 
    [scalac]  at scala.tools.nsc.Global$$anon$1.inferImplicit(Global.scala:490) 
    [scalac]  at scala.tools.nsc.typechecker.Typers$Typer.hasImport$1(Typers.scala:764) 
    [scalac]  at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$action$1(Typers.scala:766) 
    [scalac]  at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$checkFeature$1.apply$mcV$sp(Typers.scala:788) 
    [scalac]  at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3$$anonfun$apply$1.apply(Analyzer.scala:100) 
    [scalac]  at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3$$anonfun$apply$1.apply(Analyzer.scala:100) 
    [scalac]  at scala.collection.immutable.List.foreach(List.scala:309) 
    [scalac]  at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32) 
    [scalac]  at scala.collection.mutable.ListBuffer.foreach(ListBuffer.scala:45) 
    [scalac]  at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.apply(Analyzer.scala:100) 
    [scalac]  at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:461) 
    [scalac]  at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3$$anonfun$run$1.apply(Analyzer.scala:90) 
    [scalac]  at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3$$anonfun$run$1.apply(Analyzer.scala:90) 
    [scalac]  at scala.collection.Iterator$class.foreach(Iterator.scala:727) 
    [scalac]  at scala.collection.AbstractIterator.foreach(Iterator.scala:1156) 
    [scalac]  at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.run(Analyzer.scala:90) 
    [scalac]  at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1574) 
    [scalac]  at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1548) 
    [scalac]  at scala.tools.nsc.Global$Run.compileSources(Global.scala:1544) 
    [scalac]  at scala.tools.nsc.Global$Run.compile(Global.scala:1654) 
    [scalac]  at scala.tools.ant.Scalac.executeInternal(Scalac.scala:699) 
    [scalac]  at scala.tools.ant.Scalac.execute(Scalac.scala:647) 
    ... 

Ho bisogno di informazioni o di aiuto come di quanto è cambiato in 2.10 o come trattare diversamente con questo ... Ho provato a cercare su Google e guardare nei forum ma ho trovato pochissime informazioni su questo argomento.

Sarà grato per qualsiasi aiuto!

MODIFICA: Ulteriori informazioni. Questo ovviamente sta usando l'attività ant (vedi traccia dello stack). Questo compito è stato definito:

<taskdef resource="scala/tools/ant/antlib.xml"> 
     <classpath> 
      <pathelement location=".../scala-library.jar" /> 
      <pathelement location=".../scala-reflect.jar" /> 
      <pathelement location=".../scala-compiler.jar" /> 
     </classpath> 
    </taskdef> 

EDIT 2: Ulteriori informazioni sulla aggiuntive: sono riuscito ad ottenere questo plugin per compilare (non funzionare ancora come fallito le altre cose) usando il comando-line 2.10 del compilatore (ricordate - tutto va bene in 2.9 mondo) - la build basata su form continua a fallire allo stesso modo (bug?). Ho dovuto fare due cambiamenti. Prima si occupa di vararg. C'è un metodo come:

def foo(arg: String*) { ... } 

c'è un altro metodo che è effettivamente sinonimo di esso annuncio stato scritto in 2.9 Scala come:

def bar = foo _; 

ho dovuto cambiare questo al seguente per farlo funzionare:

def bar(arg: String*) = foo(arg: *); 

Un altro affrontato 'hasAssignedAnnotations' non essere presente in ValOrDefDef.symbol più (ho appena commentato che fuori per ottenerlo compilare, non una vera soluzione).

Ancora una volta, qualcuno sa di un sito Web o di un documento là fuori che può aiutarmi con la migrazione, cioè cosa è cambiato da 2.9 a 2.10 in termini di cui ho bisogno, inclusi i plugin del compilatore.

Grazie!

+0

Solo supposizioni, forse c'è un nuovo ombreggiamento del simbolo 'Sistema' nel 2.10 compilatore. In 2.10, puoi anche usare 'sys.props (" file.separator ")', potrebbe correggere quell'errore. –

+0

L'errore appare su molte linee che sono molto diverse e non sembrano affatto correlate. Quello che ho incluso qui è solo un esempio. – Learner

+0

Hai un link alle tue fonti? –

risposta

2

Non penso che ci sia alcuna documentazione utilizzabile. Se ricordo bene, Martin Odersky ha detto nello this presentation che sono stati modificati più di 1000 file. Per 2.10 hanno riscritto grandi parti del compilatore per supportare una migliore riflessione. Come effetto collaterale, macros è stato creato. L'altro effetto collaterale, naturalmente, è che molti plugin del compilatore smettono di funzionare.

In teoria è possibile sfogliare/cercare la cronologia git di scala source code, in pratica questo probabilmente richiederà troppo tempo. Alcuni plug-in del compilatore sono stati convertiti in macro, poiché sono un po 'più facili da spedire. Non so se questa è un'opzione per te.

La soluzione migliore potrebbe essere quella di esaminare le modifiche apportate ai plugin forniti con scala. Ho trovato this commit (Il nuovo riflesso - Visualizzazione di 190 file modificati con 9.001 aggiunte e 6.403 delezioni) del plug-in di continuazione che contiene molte informazioni e modifiche. Spero che questo sia di qualche aiuto.

Problemi correlati