Skip to content

Commit e0b6754

Browse files
mrjameshamiltonTim Van Den Broecke
authored andcommitted
Add isInternalType util function
1 parent ebf621f commit e0b6754

File tree

7 files changed

+68
-33
lines changed

7 files changed

+68
-33
lines changed

base/src/main/java/proguard/classfile/ClassConstants.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* ProGuardCORE -- library to process Java bytecode.
33
*
4-
* Copyright (c) 2002-2020 Guardsquare NV
4+
* Copyright (c) 2002-2022 Guardsquare NV
55
*
66
* Licensed under the Apache License, Version 2.0 (the "License");
77
* you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@ public class ClassConstants
3232
public static final String TYPE_JAVA_LANG_OBJECT = "Ljava/lang/Object;";
3333
public static final String NAME_JAVA_LANG_CLONEABLE = "java/lang/Cloneable";
3434
public static final String NAME_JAVA_LANG_THROWABLE = "java/lang/Throwable";
35+
public static final String TYPE_JAVA_LANG_THROWABLE = "Ljava/lang/Throwable;";
3536
public static final String NAME_JAVA_LANG_EXCEPTION = "java/lang/Exception";
3637
public static final String NAME_JAVA_LANG_UNSUPPORTED_OP_EXCEPTION = "java/lang/UnsupportedOperationException";
3738
public static final String NAME_JAVA_LANG_CLASS_NOT_FOUND_EXCEPTION = "java/lang/ClassNotFoundException";

base/src/main/java/proguard/classfile/util/ClassUtil.java

Lines changed: 45 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* ProGuardCORE -- library to process Java bytecode.
33
*
4-
* Copyright (c) 2002-2020 Guardsquare NV
4+
* Copyright (c) 2002-2022 Guardsquare NV
55
*
66
* Licensed under the Apache License, Version 2.0 (the "License");
77
* you may not use this file except in compliance with the License.
@@ -17,7 +17,13 @@
1717
*/
1818
package proguard.classfile.util;
1919

20-
import proguard.classfile.*;
20+
import proguard.classfile.AccessConstants;
21+
import proguard.classfile.ClassConstants;
22+
import proguard.classfile.JavaAccessConstants;
23+
import proguard.classfile.JavaTypeConstants;
24+
import proguard.classfile.JavaVersionConstants;
25+
import proguard.classfile.TypeConstants;
26+
import proguard.classfile.VersionConstants;
2127

2228
import java.util.List;
2329

@@ -397,6 +403,26 @@ public static boolean isInternalClassType(String internalType)
397403
}
398404

399405

406+
/**
407+
* Returns whether the given type is an internal type, i.e. one of:
408+
*
409+
* - an internal array type;
410+
* - an internal primitive type;
411+
* - an internal class type.
412+
*
413+
* @param type the type,
414+
* e.g. "<code>Ljava/lang/String;</code>", "<code>I</code>"
415+
* @return <code>true</code> if the given type is a class type,
416+
* <code>false</code> otherwise.
417+
*/
418+
public static boolean isInternalType(String type)
419+
{
420+
return isInternalArrayType(type) ||
421+
isInternalPrimitiveType(type) ||
422+
isInternalClassType(type);
423+
}
424+
425+
400426
/**
401427
* Returns the internal type of a given class name.
402428
* @param internalClassName the internal class name,
@@ -423,7 +449,7 @@ public static String internalTypeFromClassName(String internalClassName)
423449
public static String internalArrayTypeFromClassName(String internalClassName,
424450
int dimensionCount)
425451
{
426-
StringBuffer buffer = new StringBuffer(internalClassName.length() + dimensionCount + 2);
452+
StringBuilder buffer = new StringBuilder(internalClassName.length() + dimensionCount + 2);
427453

428454
for (int dimension = 0; dimension < dimensionCount; dimension++)
429455
{
@@ -450,7 +476,7 @@ public static String internalArrayTypeFromClassName(String internalClassName,
450476
public static String internalArrayTypeFromType(String internalType,
451477
int dimensionDelta)
452478
{
453-
StringBuffer buffer = new StringBuffer(internalType.length() + dimensionDelta);
479+
StringBuilder buffer = new StringBuilder(internalType.length() + dimensionDelta);
454480

455481
for (int dimension = 0; dimension < dimensionDelta; dimension++)
456482
{
@@ -1278,7 +1304,7 @@ public static String externalMethodName(String externalMethodNameAndArguments)
12781304
public static String internalMethodDescriptor(String externalReturnType,
12791305
String externalMethodNameAndArguments)
12801306
{
1281-
StringBuffer internalMethodDescriptor = new StringBuffer();
1307+
StringBuilder internalMethodDescriptor = new StringBuilder();
12821308
internalMethodDescriptor.append(TypeConstants.METHOD_ARGUMENTS_OPEN);
12831309

12841310
ExternalTypeEnumeration externalTypeEnumeration =
@@ -1306,15 +1332,15 @@ public static String internalMethodDescriptor(String externalReturnType,
13061332
* @return the internal method descriptor,
13071333
* e.g. "<code>(II)Z</code>".
13081334
*/
1309-
public static String internalMethodDescriptor(String externalReturnType,
1310-
List externalArguments)
1335+
public static String internalMethodDescriptor(String externalReturnType,
1336+
List<String> externalArguments)
13111337
{
1312-
StringBuffer internalMethodDescriptor = new StringBuffer();
1338+
StringBuilder internalMethodDescriptor = new StringBuilder();
13131339
internalMethodDescriptor.append(TypeConstants.METHOD_ARGUMENTS_OPEN);
13141340

1315-
for (int index = 0; index < externalArguments.size(); index++)
1341+
for (String externalArgument : externalArguments)
13161342
{
1317-
internalMethodDescriptor.append(internalType((String)externalArguments.get(index)));
1343+
internalMethodDescriptor.append(internalType(externalArgument));
13181344
}
13191345

13201346
internalMethodDescriptor.append(TypeConstants.METHOD_ARGUMENTS_CLOSE);
@@ -1428,7 +1454,7 @@ public static String externalClassAccessFlags(int accessFlags, String prefix)
14281454
return EMPTY_STRING;
14291455
}
14301456

1431-
StringBuffer string = new StringBuffer(50);
1457+
StringBuilder string = new StringBuilder(50);
14321458

14331459
if ((accessFlags & AccessConstants.PUBLIC) != 0)
14341460
{
@@ -1508,7 +1534,7 @@ public static String externalFieldAccessFlags(int accessFlags, String prefix)
15081534
return EMPTY_STRING;
15091535
}
15101536

1511-
StringBuffer string = new StringBuffer(50);
1537+
StringBuilder string = new StringBuilder(50);
15121538

15131539
if ((accessFlags & AccessConstants.PUBLIC) != 0)
15141540
{
@@ -1573,7 +1599,7 @@ public static String externalMethodAccessFlags(int accessFlags, String prefix)
15731599
return EMPTY_STRING;
15741600
}
15751601

1576-
StringBuffer string = new StringBuffer(50);
1602+
StringBuilder string = new StringBuilder(50);
15771603

15781604
if ((accessFlags & AccessConstants.PUBLIC) != 0)
15791605
{
@@ -1656,7 +1682,7 @@ public static String externalParameterAccessFlags(int accessFlags, String prefix
16561682
return EMPTY_STRING;
16571683
}
16581684

1659-
StringBuffer string = new StringBuffer(50);
1685+
StringBuilder string = new StringBuilder(50);
16601686

16611687
if ((accessFlags & AccessConstants.FINAL) != 0)
16621688
{
@@ -1716,7 +1742,7 @@ public static String externalModuleAccessFlags(int accessFlags, String prefix)
17161742
return EMPTY_STRING;
17171743
}
17181744

1719-
StringBuffer string = new StringBuffer(50);
1745+
StringBuilder string = new StringBuilder(50);
17201746

17211747
if ((accessFlags & AccessConstants.OPEN) != 0)
17221748
{
@@ -1763,7 +1789,7 @@ public static String externalRequiresAccessFlags(int accessFlags, String prefix)
17631789
return EMPTY_STRING;
17641790
}
17651791

1766-
StringBuffer string = new StringBuffer(50);
1792+
StringBuilder string = new StringBuilder(50);
17671793

17681794
if ((accessFlags & AccessConstants.TRANSITIVE) != 0)
17691795
{
@@ -1814,7 +1840,7 @@ public static String externalExportsAccessFlags(int accessFlags, String prefix)
18141840
return EMPTY_STRING;
18151841
}
18161842

1817-
StringBuffer string = new StringBuffer(50);
1843+
StringBuilder string = new StringBuilder(50);
18181844

18191845
if ((accessFlags & AccessConstants.SYNTHETIC) != 0)
18201846
{
@@ -1857,7 +1883,7 @@ public static String externalOpensAccessFlags(int accessFlags, String prefix)
18571883
return EMPTY_STRING;
18581884
}
18591885

1860-
StringBuffer string = new StringBuffer(50);
1886+
StringBuilder string = new StringBuilder(50);
18611887

18621888
if ((accessFlags & AccessConstants.SYNTHETIC) != 0)
18631889
{
@@ -1908,7 +1934,7 @@ private static String externalMethodReturnTypeAndName(String internalClassName,
19081934
*/
19091935
public static String externalMethodArguments(String internalMethodDescriptor)
19101936
{
1911-
StringBuffer externalMethodNameAndArguments = new StringBuffer();
1937+
StringBuilder externalMethodNameAndArguments = new StringBuilder();
19121938

19131939
InternalTypeEnumeration internalTypeEnumeration =
19141940
new InternalTypeEnumeration(internalMethodDescriptor);

base/src/test/kotlin/proguard/analysis/cpa/HeapOperatorsTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import proguard.analysis.cpa.jvm.cfa.nodes.JvmCfaNode
1515
import proguard.analysis.cpa.jvm.domain.reference.CompositeHeapJvmAbstractState
1616
import proguard.analysis.cpa.jvm.domain.reference.JvmReferenceAbstractState
1717
import proguard.analysis.cpa.jvm.domain.reference.Reference
18+
import proguard.analysis.cpa.jvm.domain.taint.JvmInvokeTaintSink
1819
import proguard.analysis.cpa.jvm.domain.taint.JvmTaintMemoryLocationBamCpaRun
1920
import proguard.analysis.cpa.jvm.state.JvmAbstractState
2021
import proguard.analysis.cpa.jvm.state.heap.HeapModel
@@ -33,7 +34,6 @@ import proguard.testutils.JavaSource
3334
import java.util.Optional
3435
import kotlin.reflect.full.memberProperties
3536
import kotlin.reflect.jvm.isAccessible
36-
import proguard.analysis.cpa.jvm.domain.taint.JvmInvokeTaintSink
3737

3838
@Ignored
3939
class HeapOperatorsTest : FreeSpec({

base/src/test/kotlin/proguard/analysis/cpa/JvmTaintTreeHeapFollowerAbstractStateTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import proguard.analysis.cpa.defaults.SetAbstractState
2525
import proguard.analysis.cpa.domain.taint.TaintAbstractState
2626
import proguard.analysis.cpa.domain.taint.TaintSource
2727
import proguard.analysis.cpa.jvm.domain.reference.Reference
28+
import proguard.analysis.cpa.jvm.domain.taint.JvmInvokeTaintSink
2829
import proguard.analysis.cpa.jvm.domain.taint.JvmTaintMemoryLocationBamCpaRun
2930
import proguard.analysis.cpa.jvm.state.heap.HeapModel
3031
import proguard.analysis.cpa.jvm.state.heap.tree.HeapNode
@@ -36,7 +37,6 @@ import proguard.analysis.cpa.state.MapAbstractStateFactory
3637
import proguard.testutils.ClassPoolBuilder
3738
import proguard.testutils.JavaSource
3839
import java.util.Optional
39-
import proguard.analysis.cpa.jvm.domain.taint.JvmInvokeTaintSink
4040

4141
@Ignored
4242
class JvmTaintTreeHeapFollowerAbstractStateTest : FreeSpec({

base/src/test/kotlin/proguard/analysis/cpa/TraceExtractorTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import io.kotest.core.spec.style.StringSpec
2222
import io.kotest.matchers.shouldBe
2323
import proguard.analysis.cpa.domain.taint.TaintAbstractState
2424
import proguard.analysis.cpa.domain.taint.TaintSource
25+
import proguard.analysis.cpa.jvm.domain.taint.JvmInvokeTaintSink
26+
import proguard.analysis.cpa.jvm.domain.taint.JvmReturnTaintSink
2527
import proguard.analysis.cpa.jvm.domain.taint.JvmTaintMemoryLocationBamCpaRun
2628
import proguard.analysis.cpa.jvm.util.CfaUtil
2729
import proguard.analysis.cpa.state.DifferentialMapAbstractStateFactory
@@ -30,8 +32,6 @@ import proguard.analysis.cpa.state.LimitedHashMapAbstractStateFactory
3032
import proguard.testutils.ClassPoolBuilder
3133
import proguard.testutils.JavaSource
3234
import java.util.Optional
33-
import proguard.analysis.cpa.jvm.domain.taint.JvmInvokeTaintSink
34-
import proguard.analysis.cpa.jvm.domain.taint.JvmReturnTaintSink
3535

3636
class TraceExtractorTest : StringSpec({
3737

base/src/test/kotlin/proguard/analysis/cpa/TreeHeapTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import proguard.analysis.cpa.defaults.SetAbstractState
2525
import proguard.analysis.cpa.domain.taint.TaintAbstractState
2626
import proguard.analysis.cpa.domain.taint.TaintSource
2727
import proguard.analysis.cpa.jvm.domain.reference.Reference
28+
import proguard.analysis.cpa.jvm.domain.taint.JvmInvokeTaintSink
2829
import proguard.analysis.cpa.jvm.domain.taint.JvmTaintMemoryLocationBamCpaRun
2930
import proguard.analysis.cpa.jvm.state.heap.HeapModel
3031
import proguard.analysis.cpa.jvm.state.heap.tree.HeapNode
@@ -36,7 +37,6 @@ import proguard.analysis.cpa.state.MapAbstractStateFactory
3637
import proguard.testutils.ClassPoolBuilder
3738
import proguard.testutils.JavaSource
3839
import java.util.Optional
39-
import proguard.analysis.cpa.jvm.domain.taint.JvmInvokeTaintSink
4040

4141
@Ignored
4242
class TreeHeapTest : StringSpec({

base/src/test/kotlin/proguard/util/kotlin/asserter/KotlinMetadataAsserterTest.kt

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,16 @@ import proguard.testutils.KotlinSource
2626
class KotlinMetadataAsserterTest : FreeSpec({
2727
"Given an interface with default implementation" - {
2828
val (programClassPool, libraryClassPool) = ClassPoolBuilder.fromSource(
29-
KotlinSource("Test.kt",
29+
KotlinSource(
30+
"Test.kt",
3031
"""
3132
interface Test {
3233
fun foo() {
3334
println("DEFAULT")
3435
}
3536
}
36-
""".trimIndent())
37+
""".trimIndent()
38+
)
3739
)
3840

3941
"When the KotlinMetadataAsserter is run" - {
@@ -59,14 +61,16 @@ class KotlinMetadataAsserterTest : FreeSpec({
5961

6062
"Given an interface with default implementation and missing \$DefaultImpls class" - {
6163
val (programClassPool, libraryClassPool) = ClassPoolBuilder.fromSource(
62-
KotlinSource("Test.kt",
64+
KotlinSource(
65+
"Test.kt",
6366
"""
6467
interface Test {
6568
fun foo() {
6669
println("DEFAULT")
6770
}
6871
}
69-
""".trimIndent())
72+
""".trimIndent()
73+
)
7074
)
7175

7276
"When the KotlinMetadataAsserter is run" - {
@@ -94,14 +98,16 @@ class KotlinMetadataAsserterTest : FreeSpec({
9498

9599
"Given an interface with default implementation using Java 8+ default methods" - {
96100
val (programClassPool, libraryClassPool) = ClassPoolBuilder.fromSource(
97-
KotlinSource("Test.kt",
101+
KotlinSource(
102+
"Test.kt",
98103
"""
99104
interface Test {
100105
fun foo() {
101106
println("DEFAULT")
102107
}
103108
}
104-
""".trimIndent()),
109+
""".trimIndent()
110+
),
105111
kotlincArguments = listOf("-Xjvm-default=all")
106112
)
107113

@@ -126,13 +132,15 @@ class KotlinMetadataAsserterTest : FreeSpec({
126132

127133
"Given an enum" - {
128134
val (programClassPool, libraryClassPool) = ClassPoolBuilder.fromSource(
129-
KotlinSource("Test.kt",
135+
KotlinSource(
136+
"Test.kt",
130137
"""
131138
enum class Test {
132139
CENTER,
133140
BOTTOM
134141
}
135-
""".trimIndent())
142+
""".trimIndent()
143+
)
136144
)
137145

138146
"When the referencedEnumEntries are set to null" - {

0 commit comments

Comments
 (0)