В Groovy можно проверить коллекции для нулевой и пустой, просто помещая переменную себя внутри, если как:Groovy CompileStatic на Android путает Groovy Правду
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: []
Это, кажется, не происходит при запуске настольной версии.
Чтобы предоставить больше контекста. Это сгенерированный проект LibGDX с тремя проектами (-core, -desktop, -android), где проект -core был преобразован в отличный проект. В проекте -core указывается ссылка и зависимости проектов -desktop и -android.
Desktop-версия работает без каких-либо проблем независимо от того, аннотируются ли классы с помощью аннотации @CompileStatic
, а Groovy Truth распознается правильно.
С другой стороны, на андроиде возникает вышеупомянутая ошибка.
Я не использую библиотеку grooney, потому что проект, который преобразуется в groovy, делится между обоими и Android.
Если это какой-либо ценности, вот содержание 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"
}
Есть, по-видимому, проблемы с путями репозитория grooney, 'compile 'org.codehaus.groovy: groovy: 2.4.1: grooid'' в gradle производит другой путь, чем реальный путь зависимости, поэтому я не могу его проверить , Когда я выясню, что не так, и как исправить это, я попробую ваше решение и правильно распределю его. Спасибо за вашу помощь. – MrPlow
Вы включаете основную зависимость от ядра в свой проект андроида. Это нужно исключить, так как groovy-all и grooid jars не могут быть скомпилированы вместе. – Pieces