2015-02-16 14 views
7

ग्रूवी में यह बस की तरह है, तो अंदर से ही चर रखकर अशक्त और खाली के लिए संग्रह का परीक्षण करने के लिए संभव है:ग्रूवी CompileStatic को खराब करता ग्रूवी सत्य

def collection = [ 'test' ] 
if(!collection) { 
    //Collection is either null or empty, handle exceptional business here 
} 

हालांकि वर्ग जिसमें पर @CompileStatic रखने पर इस तरह कोड है, यह बंद हो जाता है एक त्रुटि के साथ (लेकिन केवल Android पर) काम कर रहे:

02-16 20:49:03.837: E/AndroidRuntime(9013): org.codehaus.groovy.runtime.metaclass.MissingMethodExceptionNoStack: No signature of method: java.util.ArrayList.asBoolean() is applicable for argument types:() values: [] 

यह प्रतीत नहीं होता है जब डेस्कटॉप संस्करण चला होने के लिये।

अधिक संदर्भ देने के लिए। यह एक जेनरेट की गई लिबजीडीएक्स परियोजना है जिसमें तीन परियोजनाएं (-कोर, -डेस्कटॉप,-एंड्रॉइड) हैं, जहां -कोर परियोजना को ग्रोवी प्रोजेक्ट में परिवर्तित कर दिया गया है। द -कोर परियोजना का संदर्भ दिया गया है, और दोनों -स्कोस्कटॉप और -android परियोजनाओं की निर्भरता

डेस्कटॉप संस्करण किसी भी मुद्दे के बिना काम करता है चाहे कक्षा @CompileStatic एनोटेशन के साथ एनोटेटेड हो, और ग्रोवी सत्य सही ढंग से पहचाना जाता है।

दूसरी ओर एंड्रॉइड पर, उपर्युक्त त्रुटि होती है।

मैं ग्रोइड लाइब्रेरी का उपयोग नहीं कर रहा हूं क्योंकि परियोजना जो ग्रोवी में परिवर्तित हो जाती है, दोनों डेस्कटॉप और एंड्रॉइड के बीच साझा की जाती है।

यह किसी भी मूल्य का है, तो यहां परियोजना स्तर पर build.gradle की सामग्री हैं:

buildscript { 
    repositories { 
     mavenCentral() 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:1.0.0' 
     classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.5'   
    } 
} 

allprojects { 
    apply plugin: "eclipse" 
    apply plugin: "idea" 

    version = '1.0' 
    ext { 
     appName = 'CastleShuffle' 
     gdxVersion = '1.5.4' 
     roboVMVersion = '1.0.0-beta-04' 
     box2DLightsVersion = '1.3' 
     ashleyVersion = '1.3.1' 
     aiVersion = '1.5.0' 
    } 

    repositories { 
     mavenCentral() 
     jcenter() 
     maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } 
     maven { url "https://oss.sonatype.org/content/repositories/releases/" } 
    } 
} 

project(":desktop") { 
    apply plugin: "java" 


    dependencies { 
     compile project(":core") 
     compile "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion" 
     compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" 
     compile "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop" 
     compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" 
    } 
} 

project(":android") { 
    apply plugin: "android" 
    //apply plugin: "groovyx.grooid.groovy-android" 

    configurations { natives } 

    dependencies {   
     compile project(":core")    
     compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion" 
     natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi" 
     natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a" 
     natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86" 
     compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion" 
     natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi" 
     natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi-v7a" 
     natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-x86" 
     compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" 
     natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi" 
     natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a" 
     natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86" 
    // compile 'org.codehaus.groovy:groovy:2.4.0:grooid' //Adding this causes a Dex exception where groovy class Bindable is referenced multiple times 
    // compile 'org.codehaus.groovy:groovy-all:2.4.0' 
    } 
} 

project(":core") { 
    apply plugin: "groovy"  

    dependencies { 
     compile 'org.codehaus.groovy:groovy-all:2.4.0' 
     compile "com.badlogicgames.gdx:gdx:$gdxVersion" 
     compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion" 
     compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" 
    } 
} 

tasks.eclipse.doLast { 
    delete ".project" 
} 

उत्तर

4

आप अपने सभी मॉड्यूल के लिए ग्रूवी की "grooid" संस्करण का उपयोग करने की जरूरत है, अन्यथा आप कोड उत्पन्न होगा जो सामान्य जेवीएम पर लक्षित रनटाइम का उपयोग करता है। आपके सभी मॉड्यूल के लिए '2.4.1-ग्रोइड' का उपयोग करना मुझे अच्छा लगता है।

+0

ग्रोइड रेपॉजिटरी पथ, 'संकलन' के साथ समस्याएं प्रतीत होती हैं, 'compile' org.codehaus.groovy: groovy: 2.4.1: ग्रेलेड में ग्रोइड 'वास्तविक निर्भरता पथ से अलग पथ उत्पन्न करता है, इसलिए मैं वास्तव में इसका परीक्षण नहीं कर सकता । जब मैं समझता हूं कि क्या गलत है और इसे कैसे ठीक किया जाए, तो मैं आपके समाधान का प्रयास करूंगा और बकाया राशि को उचित रूप से वितरित करूंगा। आपकी सहायता के लिए धन्यवाद. – MrPlow

+0

आप अपने एंड्रॉइड प्रोजेक्ट में कोर से ग्रोवी-सभी निर्भरता समेत शामिल हैं। ग्रोवी-ऑल और ग्रोइड जार को एक साथ संकलित नहीं किया जा सकता है क्योंकि इसे बाहर रखा जाना चाहिए। – Pieces

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