Skip to content
This repository was archived by the owner on Jan 8, 2023. It is now read-only.

Commit a016641

Browse files
committed
Global structure refactor and removing of Nullable / NonNull annotations
1 parent cf6d00b commit a016641

23 files changed

+388
-343
lines changed

pom.xml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,10 @@
4848
</properties>
4949

5050
<dependencies>
51-
<dependency>
52-
<groupId>com.google.code.findbugs</groupId>
53-
<artifactId>jsr305</artifactId>
54-
<version>3.0.2</version>
55-
</dependency>
5651
<dependency>
5752
<groupId>org.projectlombok</groupId>
5853
<artifactId>lombok</artifactId>
59-
<version>1.16.20</version>
54+
<version>1.18.2</version>
6055
<scope>provided</scope>
6156
</dependency>
6257
<dependency>
@@ -107,7 +102,7 @@
107102
<plugin>
108103
<groupId>org.projectlombok</groupId>
109104
<artifactId>lombok-maven-plugin</artifactId>
110-
<version>1.16.20.0</version>
105+
<version>1.18.0.0</version>
111106
<executions>
112107
<execution>
113108
<id>delombok</id>

src/main/java/io/github/spair/byond/dmi/CheckSupplierUtil.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

src/main/java/io/github/spair/byond/dmi/Dmi.java

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
import lombok.NoArgsConstructor;
66
import lombok.Setter;
77

8-
import javax.annotation.Nonnull;
98
import java.util.Map;
109
import java.util.HashMap;
1110
import java.util.Set;
1211
import java.util.HashSet;
12+
import java.util.Optional;
1313

1414
@Data
15+
@Setter(AccessLevel.PACKAGE)
1516
@NoArgsConstructor
1617
@SuppressWarnings("WeakerAccess")
1718
public class Dmi {
@@ -21,35 +22,32 @@ public class Dmi {
2122
*/
2223
public static final int MAX_STATES = 512;
2324

24-
@Nonnull private String name = "";
25+
private String name = "";
2526
private int width;
2627
private int height;
27-
@Nonnull private DmiMeta metadata = new DmiMeta();
28-
@Nonnull private Map<String, DmiState> states = new HashMap<>();
28+
private DmiMeta metadata = new DmiMeta();
29+
private Map<String, DmiState> states = new HashMap<>();
30+
private Set<String> duplicateStatesNames = new HashSet<>();
2931

30-
@Setter(AccessLevel.NONE)
31-
@Nonnull private Set<String> duplicateStatesNames = new HashSet<>();
32-
33-
public Dmi(@Nonnull final String name, final int width, final int height,
34-
@Nonnull final DmiMeta metadata, @Nonnull final Map<String, DmiState> states) {
32+
public Dmi(final String name, final int width, final int height,
33+
final DmiMeta metadata, final Map<String, DmiState> states) {
3534
this.name = name;
3635
this.width = width;
3736
this.height = height;
3837
this.metadata = metadata;
3938
this.states = states;
40-
checkDuplicates();
41-
}
4239

43-
public void setStates(@Nonnull final Map<String, DmiState> states) {
44-
this.states = states;
45-
checkDuplicates();
40+
states.forEach((stateName, dmiState) -> {
41+
if (dmiState.isDuplicate()) {
42+
duplicateStatesNames.add(stateName);
43+
}
44+
});
4645
}
4746

4847
public void addState(final DmiState dmiState) {
49-
final String stateName = dmiState.getStateName();
50-
states.put(stateName, dmiState);
48+
states.put(dmiState.getName(), dmiState);
5149
if (dmiState.isDuplicate()) {
52-
duplicateStatesNames.add(stateName);
50+
duplicateStatesNames.add(dmiState.getName());
5351
}
5452
}
5553

@@ -59,8 +57,8 @@ public void addState(final DmiState dmiState) {
5957
* @param stateName state name to search
6058
* @return {@link DmiState} instance or null if wasn't found
6159
*/
62-
public DmiState getState(final String stateName) {
63-
return states.get(stateName);
60+
public Optional<DmiState> getState(final String stateName) {
61+
return Optional.ofNullable(states.get(stateName));
6462
}
6563

6664
/**
@@ -69,8 +67,8 @@ public DmiState getState(final String stateName) {
6967
* @param stateName state name to search
7068
* @return {@link DmiSprite} instance or null if wasn't found
7169
*/
72-
public DmiSprite getStateSprite(final String stateName) {
73-
return CheckSupplierUtil.returnIfNonNull(getState(stateName), DmiState::getSprite);
70+
public Optional<DmiSprite> getStateSprite(final String stateName) {
71+
return getState(stateName).flatMap(DmiState::getSprite);
7472
}
7573

7674
/**
@@ -79,8 +77,8 @@ public DmiSprite getStateSprite(final String stateName) {
7977
* @param stateName state name to search
8078
* @return {@link DmiSprite} instance or null if wasn't found
8179
*/
82-
public DmiSprite getStateSprite(final String stateName, final SpriteDir dir) {
83-
return CheckSupplierUtil.returnIfNonNull(getState(stateName), s -> s.getSprite(dir));
80+
public Optional<DmiSprite> getStateSprite(final String stateName, final SpriteDir dir) {
81+
return getState(stateName).flatMap(s -> s.getSprite(dir));
8482
}
8583

8684
/**
@@ -89,8 +87,8 @@ public DmiSprite getStateSprite(final String stateName, final SpriteDir dir) {
8987
* @param stateName state name to search
9088
* @return {@link DmiSprite} instance or null if wasn't found
9189
*/
92-
public DmiSprite getStateSprite(final String stateName, final SpriteDir dir, final int frame) {
93-
return CheckSupplierUtil.returnIfNonNull(getState(stateName), s -> s.getSprite(dir, frame));
90+
public Optional<DmiSprite> getStateSprite(final String stateName, final SpriteDir dir, final int frame) {
91+
return getState(stateName).flatMap(s -> s.getSprite(dir, frame));
9492
}
9593

9694
public boolean hasState(final String stateName) {
@@ -114,13 +112,4 @@ public boolean isHasDuplicates() {
114112
public boolean isStateOverflow() {
115113
return states.size() > MAX_STATES;
116114
}
117-
118-
private void checkDuplicates() {
119-
duplicateStatesNames.clear();
120-
states.forEach((stateName, dmiState) -> {
121-
if (dmiState.isDuplicate()) {
122-
duplicateStatesNames.add(stateName);
123-
}
124-
});
125-
}
126115
}

src/main/java/io/github/spair/byond/dmi/DmiDiff.java

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/main/java/io/github/spair/byond/dmi/DmiMeta.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,22 @@
44
import lombok.NoArgsConstructor;
55
import lombok.AllArgsConstructor;
66

7+
import java.util.Collections;
8+
import java.util.Iterator;
79
import java.util.List;
810

911
@Data
1012
@NoArgsConstructor
1113
@AllArgsConstructor
1214
@SuppressWarnings("WeakerAccess")
13-
public class DmiMeta {
15+
public class DmiMeta implements Iterable<DmiMetaEntry> {
1416

1517
private int spritesWidth;
1618
private int spritesHeight;
17-
private List<Meta> metas;
19+
private List<DmiMetaEntry> metas = Collections.emptyList();
20+
21+
@Override
22+
public Iterator<DmiMetaEntry> iterator() {
23+
return metas.iterator();
24+
}
1825
}

src/main/java/io/github/spair/byond/dmi/Meta.java renamed to src/main/java/io/github/spair/byond/dmi/DmiMetaEntry.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
@NoArgsConstructor
99
@AllArgsConstructor
1010
@SuppressWarnings("WeakerAccess")
11-
public class Meta {
12-
11+
public class DmiMetaEntry {
1312
private String name;
1413
private int dirs;
1514
private int frames;

src/main/java/io/github/spair/byond/dmi/DmiSprite.java

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,38 @@
33
import lombok.AllArgsConstructor;
44
import lombok.Data;
55

6-
import javax.annotation.Nonnull;
76
import java.awt.image.BufferedImage;
7+
import java.awt.image.DataBuffer;
8+
import java.awt.image.DataBufferByte;
9+
import java.awt.image.DataBufferInt;
10+
import java.util.Arrays;
811
import java.util.Objects;
912

1013
@Data
1114
@AllArgsConstructor
1215
@SuppressWarnings("WeakerAccess")
1316
public class DmiSprite {
1417

15-
@Nonnull private BufferedImage sprite;
16-
@Nonnull private SpriteDir dir;
18+
private BufferedImage sprite;
19+
private int width;
20+
private int height;
21+
private SpriteDir dir;
1722
private int frameNum;
1823

24+
public DmiSprite(final BufferedImage sprite, final SpriteDir dir, final int frameNum) {
25+
this.sprite = sprite;
26+
this.width = sprite.getWidth();
27+
this.height = sprite.getHeight();
28+
this.dir = dir;
29+
this.frameNum = frameNum;
30+
}
31+
1932
@Override
2033
public String toString() {
2134
return "DmiSprite{"
2235
+ "sprite=binary-image"
36+
+ ", width=" + width
37+
+ ", height=" + height
2338
+ ", dir=" + dir
2439
+ ", frameNum=" + frameNum
2540
+ '}';
@@ -44,23 +59,28 @@ public int hashCode() {
4459
return Objects.hash(sprite, dir, frameNum);
4560
}
4661

47-
private boolean isEqualSprite(final BufferedImage spriteToCompare) {
48-
if (sprite == spriteToCompare) {
62+
private boolean isEqualSprite(final BufferedImage spriteToCheck) {
63+
if (sprite == spriteToCheck) {
4964
return true;
5065
}
51-
52-
if (sprite.getHeight() != spriteToCompare.getHeight() || sprite.getWidth() != spriteToCompare.getWidth()) {
66+
if (sprite.getWidth() != spriteToCheck.getWidth() || sprite.getHeight() != spriteToCheck.getHeight()) {
5367
return false;
5468
}
5569

56-
for (int x = 0; x < sprite.getWidth(); x++) {
57-
for (int y = 0; y < sprite.getHeight(); y++) {
58-
if (sprite.getRGB(x, y) != spriteToCompare.getRGB(x, y)) {
59-
return false;
60-
}
61-
}
70+
DataBuffer actual = sprite.getData().getDataBuffer();
71+
DataBuffer toCheck = spriteToCheck.getData().getDataBuffer();
72+
73+
if (actual.getClass() != toCheck.getClass()) {
74+
return false;
6275
}
6376

64-
return true;
77+
// DataBufferByte - for RGB images, DataBufferInt - for ARGB
78+
if (actual instanceof DataBufferByte) {
79+
return Arrays.equals(((DataBufferByte) actual).getData(), ((DataBufferByte) toCheck).getData());
80+
} else if (actual instanceof DataBufferInt) {
81+
return Arrays.equals(((DataBufferInt) actual).getData(), ((DataBufferInt) toCheck).getData());
82+
} else {
83+
throw new IllegalStateException();
84+
}
6585
}
6686
}

0 commit comments

Comments
 (0)