Skip to content

Instantly share code, notes, and snippets.

View oehme's full-sized avatar

Stefan Oehme oehme

View GitHub Profile
@oehme
oehme / Stacktrace
Created October 7, 2016 16:54
IDEA hanging during sync
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.pickClosureMethod(ClosureMetaClass.java:212)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:270)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1024)
at groovy.lang.Closure.call(Closure.java:414)
at groovy.lang.Closure.call(Closure.java:430)
at org.gradle.api.specs.internal.ClosureSpec.isSatisfiedBy(ClosureSpec.java:32)
at org.gradle.api.internal.collections.CollectionFilter.filter(CollectionFilter.java:48)
at org.gradle.api.internal.collections.FilteredCollection$FilteringIterator.findNext(FilteredCollection.java:101)
at org.gradle.api.internal.collections.FilteredCollection$FilteringIterator.<init>(FilteredCollection.java:95)
at org.gradle.api.internal.collections.FilteredCollection.iterator(FilteredCollection.java:130)
@oehme
oehme / ListsAreNotCovariant.java
Created July 12, 2016 16:28
Why ignoring type safety warnings is bad
List<Foo> specialThings = Lists.newArrayList(); //Foo extends Base
Bean bean = new Bean();
// normally you would correctly get a compile error here,
//but the setter in your example does an unsafe cast that makes this line compile
bean.setStuff(specialThings);
List<Base> things = bean.getStuff();
things.add(new Bar()); // Bar extends Base
plugins {
id 'java'
id 'com.github.oehme.sobula.bintray-release' version '0.4.1'
}
group = "my.group.id"
description = "My really cool project"
contacts {
"me@mysite.org" {
require 'travis'
Travis.access_token = Travis.github_auth(ENV['TRAVIS_TOKEN'])
repos = Travis::Repository.find_all(owner_name: 'oehme')
keys = ['ORG_GRADLE_PROJECT_bintrayApiKey', 'ORG_GRADLE_PROJECT_signingPassword', 'ORG_GRADLE_PROJECT_sonatypePassword']
repos.each do |repo|
keys.each do |key|
puts "Setting env var '#{key}' on project '#{repo.slug}'"
repo.env_vars.upsert(key, "'#{ENV[key]}'", public: false)
end
end
@oehme
oehme / MyMessages.xtend
Created November 28, 2014 14:51
Usage of @message annotation
@Messages class MyMessages {}
class Test {
def static void main(String[] args) {
val messages = new MyMessages(Locale.GERMAN)
println(messages.hello("Stefan", new Date))
print(messages.trains(3))
}
}
@oehme
oehme / Helpers.xtend
Created November 28, 2014 14:44
Helper functions for the method name and parameter types
def keyToMethodName(String key) {
CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, key).toFirstLower
}
def argumentType(Format format, extension TypeReferenceProvider typeRefs) {
switch format {
NumberFormat: Number.newTypeReference
DateFormat: Date.newTypeReference
default: object
}
@oehme
oehme / MessageMethods.xtend
Created November 28, 2014 14:43
Generating Methods from Messagekeys
Iterators.forEnumeration(resourceBundle.keys).forEach [ key |
cls.addMethod(key.keyToMethodName) [
patternVariables.forEach [ patternVariable, index |
addParameter("arg" + index, patternVariable.argumentType(context))
]
returnType = string
body = '''
«String» pattern = bundle.getString("«key»");
«MessageFormat» format = new «MessageFormat»(pattern);
return format.format(new «Object»[]{«parameters.join(", ")[simpleName]»});
@oehme
oehme / ReadingPropertiesInCompiler.xtend
Created November 28, 2014 14:39
Loading the ResourceBundle in the Compiler
val propertyFile = cls.compilationUnit.filePath.parent.append(cls.simpleName + ".properties")
if (!propertyFile.exists) {
cls.addError('''Property file «propertyFile» does not exist''')
return
}
val resourceBundle = new PropertyResourceBundle(propertyFile.contentsAsStream)
@oehme
oehme / MyMessages.java
Last active August 29, 2015 14:10
Localization ResourceBundle
public class MyMessages {
private ResourceBundle bundle;
public MyMessages(Locale locale) {
this.bundle = ResourceBundle.getBundle("MyMessages", locale);
}
public String trains(Number arg0) {
String pattern = bundle.getString("Trains");
MessageFormat format = new MessageFormat(pattern);
@oehme
oehme / MyMessages.properties
Created November 28, 2014 14:31
Localization properties
Hello=Hello {0}, the time currently is {1, time}!
Trains={0,number} trains spotted.