Ich habe ein Scala 2.9 Compiler-Plugin (Quellcode) und funktioniert gut in 2.9, aber kompiliert nicht mit 2.10. Es gibt Dutzende (vielleicht 100+) von Fehlern alle von der gleichen Art wie:Gibt es irgendwelche Informationen über die Migration eines Scala 2.9 Compiler Plugins auf 2.10?
[scalac] C:\***.scala:31: error: illegal cyclic reference involving class Global
[scalac] val fileSeparator = System.getProperty("file.separator");
[scalac] ^
..., die mit schließlich beenden:
[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)
...
Ich brauche einige Informationen oder helfen, was hat in 2.10 geändert oder wie man sonst damit umgeht ... Ich habe versucht herum zu googlen und in Foren zu suchen, habe aber sehr wenig Informationen zu diesem Thema gefunden.
Wir werden für jede Hilfe dankbar sein!
EDIT: Zusätzliche Informationen. Dies ist offensichtlich Ant-Task (siehe Stack-Trace). Diese Aufgabe definiert wurde:
<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: Weitere Zusatzinfo: ich es geschafft, dieses Plugin zu kompilieren zu bekommen (habe es noch nicht laufen, wie andere Dinge nicht) mithilfe von Befehlszeilen 2.10 Compiler (nicht vergessen - alles ist in 2.9 Welt in Ordnung) - Ameisen-basierte Build weiterhin auf die gleiche Weise scheitern (Bug?). Ich musste zwei Änderungen vornehmen. Erste Angebote mit Varargs. Es gibt ein Verfahren, wie:
def foo(arg: String*) { ... }
Es gibt eine andere Methode, die für sie ad effektiv ein Synonym ist wurde in 2,9 Scala geschrieben wie:
def bar = foo _;
ich die folgenden ändern musste um es zu arbeiten:
def bar(arg: String*) = foo(arg: *);
Ein weiteres behandelt ‚hasAssignedAnnotations‘ nicht vorhanden ist, in ValOrDefDef.symbol mehr (ich bemerkte nur, dass, um es zu bekommen kompilieren, keine echte Lösung).
Noch einmal, jemand weiß von einer Website oder einem Dokument da draußen, die mir bei der Migration helfen kann - d. H. Was sich von 2,9 zu 2,10 in den benötigten Begriffen geändert hat, einschließlich Compiler-Plugins.
Danke!
Nur raten, vielleicht gibt es eine neue Beschattung des Symbols "System" in der 2.10 Compiler. In 2.10 können Sie auch 'sys.props (" file.separator ")' verwenden, um diesen Fehler zu beheben. –
Der Fehler tritt in vielen Zeilen auf, die sehr unterschiedlich sind und überhaupt nicht verwandt zu sein scheinen. Die hier angegebene ist nur ein Beispiel. – Learner
Haben Sie einen Link zu Ihren Quellen? –