This repository has been archived by the owner on Nov 5, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e5ad888
commit 66ada41
Showing
11 changed files
with
236 additions
and
60 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
106 changes: 106 additions & 0 deletions
106
src/main/java/com/fasterxml/jackson/module/afterburner/util/ClassName.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
package com.fasterxml.jackson.module.afterburner.util; | ||
|
||
import java.util.zip.Adler32; | ||
|
||
/** | ||
* Accessing various permutations of dotted/slashed representations gets | ||
* tiresome after a while, so here's an abstraction for hiding complexities, | ||
* and for performing lazy transformations as necessary. | ||
*/ | ||
public class ClassName | ||
{ | ||
public final static String TEMPLATE_SUFFIX = actualClassName("", 0L); | ||
|
||
// Basenames with no checksum suffix | ||
protected final String _dottedBase; | ||
|
||
protected String _slashedBase; | ||
|
||
protected String _dottedName, _slashedName; | ||
|
||
protected long _checksum; | ||
|
||
private ClassName(String dottedBase) { | ||
_dottedBase = dottedBase; | ||
} | ||
|
||
public static ClassName constructFor(Class<?> baseClass, String suffix) { | ||
return new ClassName(baseClass.getName() + suffix); | ||
} | ||
|
||
public void assignChecksum(byte[] data) { | ||
long l = adler32(data); | ||
if (_checksum != 0L) { | ||
throw new IllegalStateException("Trying to re-assign checksum as 0x"+Long.toHexString(l) | ||
+" (had 0x"+Long.toHexString(_checksum)+")"); | ||
} | ||
// Need to mask unlikely checksum of 0 | ||
if (l == 0L) { | ||
l = 1; | ||
} | ||
_checksum = l; | ||
} | ||
|
||
public String getDottedTemplate() { | ||
return _dottedBase + TEMPLATE_SUFFIX; | ||
} | ||
|
||
public String getSlashedTemplate() { | ||
return getSlashedBase() + TEMPLATE_SUFFIX; | ||
} | ||
|
||
public String getDottedName() { | ||
if (_dottedName == null) { | ||
if (_checksum == 0) { | ||
throw new IllegalStateException("No checksum assigned yet"); | ||
} | ||
_dottedName = String.format("%s%08x", getDottedBase(), (int) _checksum); | ||
} | ||
return _dottedName; | ||
} | ||
|
||
public String getSlashedName() { | ||
if (_slashedName == null) { | ||
if (_checksum == 0) { | ||
throw new IllegalStateException("No checksum assigned yet"); | ||
} | ||
_slashedName = String.format("%s%08x", getSlashedBase(), (int) _checksum); | ||
} | ||
return _slashedName; | ||
} | ||
|
||
public String getSourceFilename() { | ||
return getSlashedBase() + ".java"; | ||
} | ||
|
||
public String getDottedBase() { | ||
return _dottedBase; | ||
} | ||
|
||
public String getSlashedBase() { | ||
if (_slashedBase == null) { | ||
_slashedBase = dotsToSlashes(_dottedBase); | ||
} | ||
return _slashedBase; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return getDottedName(); | ||
} | ||
|
||
private static String actualClassName(String base, long checksum) { | ||
return String.format("%s%08x", base, (int) checksum); | ||
} | ||
|
||
protected static String dotsToSlashes(String className) { | ||
return className.replace(".", "/"); | ||
} | ||
|
||
protected static long adler32(byte[] data) | ||
{ | ||
Adler32 adler = new Adler32(); | ||
adler.update(data); | ||
return adler.getValue(); | ||
} | ||
} |
Oops, something went wrong.