Skip to content

Commit

Permalink
encodings #363 #383 #194 #201 and alike. 5/6 completed
Browse files Browse the repository at this point in the history
  • Loading branch information
elucash committed Jul 21, 2016
1 parent 5451c3f commit c95efb9
Show file tree
Hide file tree
Showing 17 changed files with 4,452 additions and 3,671 deletions.
62 changes: 29 additions & 33 deletions encode/src/org/immutables/encode/Encoding.java
Expand Up @@ -12,37 +12,33 @@
@Retention(RetentionPolicy.SOURCE)
public @interface Encoding {

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.SOURCE)
public @interface Impl {}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Naming {
String value();
}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Expose {}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Init {}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Copy {}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Stringify {}

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Builder {}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Build {}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.SOURCE)
public @interface Impl {}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Naming {
String value();
}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Expose {}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Init {}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Copy {}

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Builder {}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Build {}
}
43 changes: 27 additions & 16 deletions encode/src/org/immutables/encode/EncodingMetadata.java
Expand Up @@ -8,20 +8,31 @@
@Target(ElementType.ANNOTATION_TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface EncodingMetadata {
String name();
String[] imports();
String[] typeParams();
Element[] elements();

@Target({})
@Retention(RetentionPolicy.CLASS)
public @interface Element {
String name();
String type();
String naming();
String[] params();
String[] typeParams();
String[] tags();
String code();
}
String name();

String[] imports();

String[] typeParams();

Element[] elements();

@Target({})
@Retention(RetentionPolicy.CLASS)
public @interface Element {
String name();

String type();

String naming();

String[] tags();

String[] typeParams();

String[] params();

String[] thrown();

String code();
}
}
107 changes: 58 additions & 49 deletions encode/test/org/immutables/encode/fixture/TableEncoding.java
@@ -1,70 +1,79 @@
package org.immutables.encode.fixture;

import java.io.Serializable;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableTable;
import com.google.common.collect.Table;
import java.io.Serializable;
import org.immutables.encode.Encoding;

@Encoding
class TableEncoding<R, C, V> {

@Encoding.Impl
ImmutableTable<R, C, V> value = ImmutableTable.of();
@Encoding.Impl
ImmutableTable<R, C, V> value = ImmutableTable.of();

@Encoding.Expose
Table<R, C, V> accessor() {
return value;
}

@Override
public String toString() {
return value.toString();
}

@Encoding.Expose
Table<R, C, V> accessor() {
return value;
}
@Override
public int hashCode() {
return value.hashCode();
}

@Encoding.Stringify
String stringify() {
return value.toString();
}
boolean equals(TableEncoding<R, C, V> other) {
return value.equals(other.value);
}

private static <V extends Object & Serializable> V helper(V param) {
return param;
}
private static <V extends Object & Serializable> V helper(V param) throws java.lang.Exception, java.lang.Error {
return param;
}

@Encoding.Init
ImmutableTable<R, C, V> init(Table<? extends R, ? extends C, ? extends V> table) {
return ImmutableTable.copyOf(table);
}
@Encoding.Init
static <R, C, V> ImmutableTable<R, C, V> init(Table<? extends R, ? extends C, ? extends V> table) {
return ImmutableTable.copyOf(table);
}

@Encoding.Copy
@Encoding.Naming("with*Put")
Table<R, C, V> withPut(R row, C column, V value) {
return ImmutableTable.<R, C, V>builder()
.put(row, column, value)
.build();
}
@Encoding.Copy
@Encoding.Naming("with*Put")
Table<R, C, V> withPut(R row, C column, V value) {
return ImmutableTable.<R, C, V>builder()
.put(row, column, value)
.build();
}

@Encoding.Naming("*CellSet")
ImmutableSet<Table.Cell<R, C, V>> cellSet() {
return value.cellSet();
}
@Encoding.Naming("*CellSet")
ImmutableSet<Table.Cell<R, C, V>> cellSet() {
return value.cellSet();
}

@Encoding.Builder
class Builder {
ImmutableTable.Builder<R, C, V> builder = ImmutableTable.<R, C, V>builder();
@Encoding.Builder
static class Builder<R, C, V> {
ImmutableTable.Builder<R, C, V> builder = ImmutableTable.<R, C, V>builder();

@Encoding.Naming("put*")
@Encoding.Init
Builder put(R row, C column, V value) {
builder.put(row, column, value);
return this;
}
@Encoding.Naming("put*")
@Encoding.Init
Builder<R, C, V> put(R row, C column, V value) {
builder.put(row, column, value);
return this;
}

@Encoding.Naming("putAll*")
@Encoding.Init
Builder putAll(Table<R, C, V> table) {
builder.putAll(table);
return this;
}
@Encoding.Naming("putAll*")
@Encoding.Init
Builder<R, C, V> putAll(Table<R, C, V> table) {
builder.putAll(table);
return this;
}

@Encoding.Build
ImmutableTable<R, C, V> build() {
return builder.build();
}
}
@Encoding.Build
ImmutableTable<R, C, V> build() {
return builder.build();
}
}
}

0 comments on commit c95efb9

Please sign in to comment.