Skip to content

Commit ba090c7

Browse files
committed
fix: resolve JSpecify annotation errors and improve observer framework stability
Signed-off-by: Twiineenock <Twiineenock@users.noreply.github.com>
1 parent a40af9b commit ba090c7

12 files changed

Lines changed: 31 additions & 29 deletions

File tree

hiero-enterprise-base/src/main/java/module-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
exports org.hiero.base.verification;
99
exports org.hiero.base.data;
1010
exports org.hiero.base.config;
11+
exports org.hiero.base.observer;
1112
exports org.hiero.base.implementation to
1213
org.hiero.base.test;
1314
exports org.hiero.base.implementation.data to

hiero-enterprise-base/src/main/java/org/hiero/base/implementation/TopicRepositoryImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.hiero.base.implementation;
22

33
import com.hedera.hashgraph.sdk.TopicId;
4+
import java.time.Instant;
45
import java.util.Objects;
56
import java.util.Optional;
67
import org.hiero.base.HieroException;
@@ -32,7 +33,7 @@ public TopicRepositoryImpl(@NonNull final MirrorNodeClient mirrorNodeClient) {
3233
}
3334

3435
@Override
35-
public @NonNull Page<TopicMessage> getMessages(@NonNull TopicId topicId, @NonNull java.time.Instant after)
36+
public @NonNull Page<TopicMessage> getMessages(@NonNull TopicId topicId, @NonNull Instant after)
3637
throws HieroException {
3738
Objects.requireNonNull(topicId, "topicId must not be null");
3839
Objects.requireNonNull(after, "after must not be null");

hiero-enterprise-base/src/main/java/org/hiero/base/implementation/TransactionRepositoryImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.hiero.base.implementation;
22

33
import com.hedera.hashgraph.sdk.AccountId;
4+
import java.time.Instant;
45
import java.util.Objects;
56
import java.util.Optional;
67
import org.hiero.base.HieroException;
@@ -31,7 +32,7 @@ public Page<TransactionInfo> findByAccount(@NonNull final AccountId accountId)
3132

3233
@Override
3334
public @NonNull Page<TransactionInfo> findByAccount(
34-
@NonNull AccountId accountId, @NonNull java.time.Instant after) throws HieroException {
35+
@NonNull AccountId accountId, @NonNull Instant after) throws HieroException {
3536
Objects.requireNonNull(accountId, "accountId must not be null");
3637
Objects.requireNonNull(after, "after must not be null");
3738
return this.mirrorNodeClient.queryTransactionsByAccount(accountId, after);

hiero-enterprise-base/src/main/java/org/hiero/base/mirrornode/MirrorNodeClient.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.hedera.hashgraph.sdk.ContractId;
55
import com.hedera.hashgraph.sdk.TokenId;
66
import com.hedera.hashgraph.sdk.TopicId;
7+
import java.time.Instant;
78
import java.util.List;
89
import java.util.Objects;
910
import java.util.Optional;
@@ -183,8 +184,7 @@ default Optional<Nft> queryNftsByAccountAndTokenIdAndSerial(
183184
* @return a page of transaction information
184185
* @throws HieroException if an error occurs during the query
185186
*/
186-
@NonNull
187-
Page<TransactionInfo> queryTransactionsByAccount(@NonNull AccountId accountId, @NonNull java.time.Instant after)
187+
@NonNull Page<TransactionInfo> queryTransactionsByAccount(@NonNull AccountId accountId, @NonNull Instant after)
188188
throws HieroException;
189189

190190
/**
@@ -416,8 +416,7 @@ default Optional<Topic> queryTopicById(String topicId) throws HieroException {
416416
* @return Page of TopicMessage
417417
* @throws HieroException if the search fails
418418
*/
419-
@NonNull
420-
Page<TopicMessage> queryTopicMessages(@NonNull TopicId topicId, @NonNull java.time.Instant after)
419+
@NonNull Page<TopicMessage> queryTopicMessages(@NonNull TopicId topicId, @NonNull Instant after)
421420
throws HieroException;
422421

423422
/**

hiero-enterprise-base/src/main/java/org/hiero/base/mirrornode/TopicRepository.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,7 @@ default Page<TopicMessage> getMessages(String topicId) throws HieroException {
6767
* @return Page of TopicMessage
6868
* @throws HieroException if the search fails
6969
*/
70-
@NonNull
71-
Page<TopicMessage> getMessages(@NonNull TopicId topicId, @NonNull Instant after)
70+
@NonNull Page<TopicMessage> getMessages(@NonNull TopicId topicId, @NonNull Instant after)
7271
throws HieroException;
7372

7473
/**
@@ -79,8 +78,7 @@ Page<TopicMessage> getMessages(@NonNull TopicId topicId, @NonNull Instant after)
7978
* @return Page of TopicMessage
8079
* @throws HieroException if the search fails
8180
*/
82-
@NonNull
83-
default Page<TopicMessage> getMessages(@NonNull String topicId, @NonNull Instant after)
81+
@NonNull default Page<TopicMessage> getMessages(@NonNull String topicId, @NonNull Instant after)
8482
throws HieroException {
8583
Objects.requireNonNull(topicId, "topicId must not be null");
8684
Objects.requireNonNull(after, "after must not be null");

hiero-enterprise-base/src/main/java/org/hiero/base/mirrornode/TransactionRepository.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ default Page<TransactionInfo> findByAccount(@NonNull String accountId) throws Hi
4747
* @return page of transactions
4848
* @throws HieroException if the search fails
4949
*/
50-
@NonNull
51-
Page<TransactionInfo> findByAccount(@NonNull AccountId accountId, @NonNull Instant after)
50+
@NonNull Page<TransactionInfo> findByAccount(@NonNull AccountId accountId, @NonNull Instant after)
5251
throws HieroException;
5352

5453
/**
@@ -59,8 +58,7 @@ Page<TransactionInfo> findByAccount(@NonNull AccountId accountId, @NonNull Insta
5958
* @return page of transactions
6059
* @throws HieroException if the search fails
6160
*/
62-
@NonNull
63-
default Page<TransactionInfo> findByAccount(@NonNull String accountId, @NonNull Instant after)
61+
@NonNull default Page<TransactionInfo> findByAccount(@NonNull String accountId, @NonNull Instant after)
6462
throws HieroException {
6563
Objects.requireNonNull(accountId, "accountId must not be null");
6664
Objects.requireNonNull(after, "after must not be null");

hiero-enterprise-base/src/main/java/org/hiero/base/observer/AbstractPollingObserver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ private void pollSafe() {
7575
*
7676
* @throws Exception if polling fails.
7777
*/
78-
protected abstract void poll() throws Exception;
78+
public abstract void poll() throws Exception;
7979

8080
/**
8181
* Notifies the listener of a new event.

hiero-enterprise-base/src/main/java/org/hiero/base/observer/TopicObserver.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ public TopicObserver(
4343
}
4444

4545
@Override
46-
protected void poll() throws Exception {
46+
public void poll() throws Exception {
4747
log.trace("Polling messages for topic {} after {}", topicId, lastSeenTimestamp);
4848

4949
Page<TopicMessage> page = repository.getMessages(topicId, lastSeenTimestamp);
50-
List<TopicMessage> messages = page.getData();
50+
List<TopicMessage> messages = new java.util.ArrayList<>(page.getData());
5151

5252
if (messages.isEmpty()) {
5353
return;
@@ -57,8 +57,8 @@ protected void poll() throws Exception {
5757
messages.sort(Comparator.comparing(TopicMessage::consensusTimestamp));
5858

5959
for (TopicMessage msg : messages) {
60-
notifyListener(msg);
6160
if (msg.consensusTimestamp().isAfter(lastSeenTimestamp)) {
61+
notifyListener(msg);
6262
lastSeenTimestamp = msg.consensusTimestamp();
6363
}
6464
}

hiero-enterprise-base/src/main/java/org/hiero/base/observer/TransactionObserver.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ public TransactionObserver(
4747
}
4848

4949
@Override
50-
protected void poll() throws Exception {
50+
public void poll() throws Exception {
5151
log.trace("Polling transactions for account {} after {}", accountId, lastSeenTimestamp);
5252

5353
Page<TransactionInfo> page = repository.findByAccount(accountId, lastSeenTimestamp);
54-
List<TransactionInfo> transactions = page.getData();
54+
List<TransactionInfo> transactions = new java.util.ArrayList<>(page.getData());
5555

5656
if (transactions.isEmpty()) {
5757
return;
@@ -61,8 +61,8 @@ protected void poll() throws Exception {
6161
transactions.sort(Comparator.comparing(TransactionInfo::consensusTimestamp));
6262

6363
for (TransactionInfo tx : transactions) {
64-
notifyListener(tx);
6564
if (tx.consensusTimestamp().isAfter(lastSeenTimestamp)) {
65+
notifyListener(tx);
6666
lastSeenTimestamp = tx.consensusTimestamp();
6767
}
6868
}

hiero-enterprise-base/src/test/java/org/hiero/base/observer/TransactionObserverTest.java renamed to hiero-enterprise-base/src/test/java/org/hiero/base/test/TransactionObserverTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.hiero.base.observer;
1+
package org.hiero.base.test;
22

33
import static org.mockito.ArgumentMatchers.any;
44
import static org.mockito.ArgumentMatchers.eq;
@@ -12,6 +12,8 @@
1212
import org.hiero.base.data.Page;
1313
import org.hiero.base.data.TransactionInfo;
1414
import org.hiero.base.mirrornode.TransactionRepository;
15+
import org.hiero.base.observer.EventObserver;
16+
import org.hiero.base.observer.TransactionObserver;
1517
import org.hiero.base.protocol.data.TransactionType;
1618
import org.junit.jupiter.api.BeforeEach;
1719
import org.junit.jupiter.api.Test;
@@ -44,7 +46,7 @@ void testPollDetectsNewTransactions() throws Exception {
4446
TransactionInfo tx = new TransactionInfo(
4547
"0.0.1234@1234567890.000000001",
4648
null, 0, txTime, null, "100", null,
47-
TransactionType.CRYPTOTRANSFER, Collections.emptyList(), null, 0, null,
49+
TransactionType.CRYPTO_TRANSFER, Collections.emptyList(), null, 0, null,
4850
"SUCCESS", false, Collections.emptyList(), Collections.emptyList(), null,
4951
Collections.emptyList(), "120", Instant.now()
5052
);

0 commit comments

Comments
 (0)