2013-01-16 14 views
16

मेरे पास एक स्कैला 2.9 कंपाइलर प्लगइन (स्रोत कोड) है और यह 2.9 में ठीक काम करता है लेकिन 2.10 के साथ भी संकलित नहीं करता है।2.10 के लिए स्कैला 2.9 कंपाइलर प्लगइन माइग्रेट करने पर वहां कोई जानकारी है?

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

... कि अंततः के साथ समाप्त: जैसे त्रुटियों के दर्जनों (शायद 100 +) एक ही तरह के सभी कर रहे हैं

[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) 
    ... 

मैं कुछ जानकारी की जरूरत है या नहीं है कि क्या करने के लिए के रूप में मदद 2.10 में बदल गया है या अन्यथा इससे निपटने के लिए कैसे ... मैंने चारों ओर गुगलिंग करने और मंचों को देखने की कोशिश की लेकिन इस विषय पर बहुत कम जानकारी मिली।

किसी भी मदद के लिए आभारी होंगे!

संपादित करें: अतिरिक्त जानकारी। यह स्पष्ट रूप से चींटी कार्य का उपयोग कर रहा है (स्टैक ट्रेस देखें)। यह कार्य परिभाषित किया गया है:

<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> 

संपादित करें 2: अधिक अतिरिक्त जानकारी: मैं को यह प्लगइन संकलन (के रूप में अन्य बातों के विफल रहा है यह अभी तक नहीं चला) कमांड लाइन 2.10 संकलक का उपयोग कर (याद पाने में कामयाब रहे - सब 2.9 दुनिया में ठीक है) - चींटी आधारित निर्माण एक ही तरह से विफल रहता है (बग?)। मुझे दो बदलाव करना पड़ा। पहले varargs के साथ सौदों।

def bar = foo _; 

मैं निम्नलिखित को यह बदलना पड़ा:

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

एक और तरीका है जो प्रभावी रूप से यह विज्ञापन के रूप में 2.9 स्काला में लिखा गया था के लिए एक पर्याय है नहीं है: वहाँ एक तरीका है इस तरह के रूप है यह काम करने के लिए प्राप्त करने के लिए:

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

एक अन्य के साथ 'hasAssignedAnnotations' नहीं ValOrDefDef.symbol किसी भी अधिक में मौजूद होने निपटा (मैं सिर्फ इतना है कि बाहर टिप्पणी की इसे पाने के लिए संकलित करने के लिए, असली फिक्स नहीं)।

फिर से, क्या किसी को किसी वेबसाइट या दस्तावेज़ के बारे में पता है जो माइग्रेशन के साथ मेरी मदद कर सकता है - यानी 2.9 से 2.10 में क्या बदल गया है, जिसमें मुझे कंपाइलर प्लगइन्स शामिल हैं।

धन्यवाद!

+0

बस अनुमान लगाया जा सकता है, शायद 2 में प्रतीक 'सिस्टम' की एक नई छाया है।10 कंपाइलर 2.10 में, आप 'sys.props (" file.separator ") का भी उपयोग कर सकते हैं, उस त्रुटि को ठीक कर सकते हैं। –

+0

त्रुटि कई रेखाओं पर दिखाई देती है जो बहुत अलग हैं और बिल्कुल संबंधित नहीं लगती हैं। यहां मैंने जो एक जोड़ा है वह सिर्फ एक उदाहरण है। – Learner

+0

क्या आपके पास अपने स्रोतों का लिंक है? –

उत्तर

2

मुझे नहीं लगता कि कोई उपयोगी दस्तावेज है। अगर मुझे सही ढंग से याद है मार्टिन ओडर्सकी ने this presentation में कहा कि 1000 से अधिक फाइलों को संपादित किया गया था। 2.10 के लिए उन्होंने बेहतर प्रतिबिंब का समर्थन करने के लिए कंपाइलर के बड़े हिस्सों को फिर से लिखा है। एक दुष्प्रभाव के रूप में macros अस्तित्व में popped। पाठ्यक्रम का दूसरा पक्ष प्रभाव यह है कि बहुत सारे कंपाइलर प्लगइन्स काम करना बंद कर देते हैं।

सिद्धांत में आप scala source code के गिट इतिहास को ब्राउज़/खोज सकते हैं, व्यावहारिक रूप से यह अधिक समय लेने वाला होगा। कुछ कंपाइलर प्लगइन्स को मैक्रो में परिवर्तित कर दिया गया है, क्योंकि वे जहाज के लिए थोड़ा आसान हैं। मुझे नहीं पता कि यह आपके लिए एक विकल्प है या नहीं।

आपकी सर्वश्रेष्ठ शर्त स्केल के साथ भेजे गए प्लगइन में किए गए परिवर्तनों को देखने के लिए हो सकती है। मुझे this commit मिला (नया प्रतिबिंब - निरंतरता प्लगइन के 9 0001 जोड़ों और 6,403 हटाने) के साथ 1 9 0 में फ़ाइलों को बदल दिया गया है जिसमें बहुत सारी जानकारी और परिवर्तन शामिल हैं। मुझे उम्मीद है कि यह किसी भी मदद की है।

संबंधित मुद्दे