Skip to content

Commit 789ceda

Browse files
committed
A few parser things
1 parent c4ae849 commit 789ceda

3 files changed

Lines changed: 41 additions & 8 deletions

File tree

src/main/java/the/bytecode/club/bytecodeviewer/resources/classcontainer/parser/visitors/FieldAccessParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ else if (scope instanceof EnclosedExpr)
103103
packageName = qualifiedName.substring(0, qualifiedName.lastIndexOf('.')).replace('.', '/');
104104

105105
// For this purpose, we do not care about its line, columnStart or columnEnd
106-
container.putClassReference(className, new ClassReferenceLocation(getOwner(container), packageName,
106+
container.putClassReference(className, new ClassReferenceLocation(className, packageName,
107107
fieldValue.name, "reference", -1, -1, -1));
108108
}
109109

src/main/java/the/bytecode/club/bytecodeviewer/resources/classcontainer/parser/visitors/MyVoidVisitor.java

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.github.javaparser.ast.type.TypeParameter;
1313
import com.github.javaparser.ast.visitor.VoidVisitorAdapter;
1414
import com.github.javaparser.resolution.declarations.ResolvedConstructorDeclaration;
15+
import com.github.javaparser.resolution.declarations.ResolvedEnumDeclaration;
1516
import com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration;
1617
import com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration;
1718
import com.github.javaparser.resolution.types.ResolvedReferenceType;
@@ -294,7 +295,7 @@ public void visit(ClassOrInterfaceDeclaration n, Object arg)
294295

295296
ResolvedReferenceTypeDeclaration resolve = n.resolve();
296297
this.classFileContainer.putClassReference(resolve.getName(),
297-
new ClassReferenceLocation(getOwner(classFileContainer),
298+
new ClassReferenceLocation(resolve.getName(),
298299
resolve.getPackageName(), "", "declaration", value.line, value.columnStart, value.columnEnd + 1));
299300
}
300301
catch (Exception e)
@@ -343,9 +344,22 @@ public void visit(ClassOrInterfaceType n, Object arg)
343344
if (qualifiedName.contains("."))
344345
packagePath = qualifiedName.substring(0, qualifiedName.lastIndexOf('.')).replace('.', '/');
345346

346-
this.classFileContainer.putClassReference(classValue.name,
347-
new ClassReferenceLocation(getOwner(classFileContainer),
348-
packagePath, "", "reference", classValue.line, classValue.columnStart, classValue.columnEnd + 1));
347+
ClassOrInterfaceType classScope = n.getScope().orElse(null);
348+
if (classScope == null)
349+
{
350+
this.classFileContainer.putClassReference(classValue.name,
351+
new ClassReferenceLocation(classValue.name,
352+
packagePath, "", "reference", classValue.line, classValue.columnStart,
353+
classValue.columnEnd + 1));
354+
}
355+
else
356+
{
357+
packagePath = packagePath.substring(0, packagePath.lastIndexOf("/"));
358+
359+
this.classFileContainer.putClassReference(classValue.name,
360+
new ClassReferenceLocation(classScope.getNameAsString(), packagePath, "", "reference",
361+
classValue.line, classValue.columnStart, classValue.columnEnd + 1));
362+
}
349363
}
350364
catch (Exception e)
351365
{
@@ -459,6 +473,19 @@ public void visit(DoStmt n, Object arg)
459473
public void visit(EnumDeclaration n, Object arg)
460474
{
461475
super.visit(n, arg);
476+
477+
ResolvedEnumDeclaration resolve = n.resolve();
478+
479+
Range enumClassNameRange = n.getName().getRange().orElse(null);
480+
if (enumClassNameRange == null)
481+
return;
482+
483+
Value enumClassValue = new Value(n.getName(), enumClassNameRange);
484+
485+
this.classFileContainer.putClassReference(enumClassValue.name,
486+
new ClassReferenceLocation(getOwner(classFileContainer), resolve.getPackageName(), "", "declaration",
487+
enumClassValue.line, enumClassValue.columnStart, enumClassValue.columnEnd + 1));
488+
462489
n.getEntries().forEach(entry ->
463490
{
464491
SimpleName simpleName = entry.getName();

src/main/java/the/bytecode/club/bytecodeviewer/resources/classcontainer/parser/visitors/ParserUtil.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.github.javaparser.ast.stmt.Statement;
1515
import com.github.javaparser.ast.stmt.TryStmt;
1616
import com.github.javaparser.ast.visitor.VoidVisitorAdapter;
17+
import com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration;
1718
import com.github.javaparser.resolution.declarations.ResolvedValueDeclaration;
1819
import com.github.javaparser.resolution.types.ResolvedReferenceType;
1920
import com.github.javaparser.resolution.types.ResolvedType;
@@ -143,9 +144,14 @@ static void putClassResolvedValues(ClassFileContainer container, Expression visi
143144
if (qualifiedName.contains("."))
144145
packageName = qualifiedName.substring(0, qualifiedName.lastIndexOf('.')).replace('.', '/');
145146

146-
container.putClassReference(className, new ClassReferenceLocation(ParserUtil.getOwner(container), packageName
147+
ResolvedReferenceTypeDeclaration resolvedReferenceTypeDeclaration = resolvedType.asReferenceType().getTypeDeclaration().orElse(null);
148+
assert resolvedReferenceTypeDeclaration != null;
149+
if (resolvedReferenceTypeDeclaration.getClassName().contains("."))
150+
packageName = packageName.substring(0, packageName.lastIndexOf('/'));
151+
152+
container.putClassReference(className, new ClassReferenceLocation(className, packageName
147153
, fieldValue.name, "reference", scopeValue.line, scopeValue.columnStart, scopeValue.columnEnd + 1));
148-
container.putField(fieldValue.name, new ClassFieldLocation(scopeValue.name, "reference", fieldValue.line,
154+
container.putField(fieldValue.name, new ClassFieldLocation(className, "reference", fieldValue.line,
149155
fieldValue.columnStart, fieldValue.columnEnd + 1));
150156
}
151157

@@ -174,7 +180,7 @@ static void putClassResolvedValues(ClassFileContainer container, Expression visi
174180
if (qualifiedName.contains("."))
175181
packageName = qualifiedName.substring(0, qualifiedName.lastIndexOf('.')).replace('.', '/');
176182

177-
container.putClassReference(className, new ClassReferenceLocation(ParserUtil.getOwner(container), packageName
183+
container.putClassReference(className, new ClassReferenceLocation(className, packageName
178184
, "", "reference", scopeValue.line, scopeValue.columnStart, scopeValue.columnEnd + 1));
179185
}
180186

0 commit comments

Comments
 (0)