diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/ArrayDataTypeHTMLRepresentation.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/ArrayDataTypeHTMLRepresentation.java index c57aef672a..20359e93f2 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/ArrayDataTypeHTMLRepresentation.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/ArrayDataTypeHTMLRepresentation.java @@ -54,6 +54,9 @@ public class ArrayDataTypeHTMLRepresentation extends HTMLDataTypeRepresentation this.footerContent = footerContent; originalHTMLData = buildHTMLText(headerContent, bodyHtml, footerContent, false); + + String trimmedBodyHtml = buildBodyHTML(true); + truncatedHtmlData = buildHTMLText(headerContent, trimmedBodyHtml, footerContent, true); } private DataType getBaseDataType() { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/DataTypeLine.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/DataTypeLine.java index 6fb420eeed..7d3a3e0b8d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/DataTypeLine.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/DataTypeLine.java @@ -16,6 +16,7 @@ package ghidra.app.util.html; import java.awt.Color; +import java.util.Objects; import ghidra.program.model.data.DataType; import ghidra.util.StringUtilities; @@ -43,12 +44,8 @@ public class DataTypeLine implements ValidatableLine { name = ""; } - if (type == null) { - throw new NullPointerException("Type of data type cannot be null"); - } - this.name = name; - this.type = type; + this.type = Objects.requireNonNull(type, "Type of data type cannot be null"); this.comment = comment == null ? "" : comment; } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/EnumDataTypeHTMLRepresentation.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/EnumDataTypeHTMLRepresentation.java index bb3fa2444d..fd7b837050 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/EnumDataTypeHTMLRepresentation.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/EnumDataTypeHTMLRepresentation.java @@ -29,6 +29,8 @@ public class EnumDataTypeHTMLRepresentation extends HTMLDataTypeRepresentation { private static final int MAX_LINE_COUNT = 15; + private final Enum enumDataType; + protected List headerContent; protected List bodyContent; protected TextLine footerLine; @@ -37,26 +39,34 @@ public class EnumDataTypeHTMLRepresentation extends HTMLDataTypeRepresentation { private static String truncatedHtmlData; // private constructor for making diff copies - private EnumDataTypeHTMLRepresentation(List headerLines, TextLine displayName, + private EnumDataTypeHTMLRepresentation(Enum enumDataType, List headerLines, + TextLine displayName, List bodyContent, TextLine footerLine) { + this.enumDataType = enumDataType; this.headerContent = headerLines; this.displayName = displayName; this.bodyContent = bodyContent; this.footerLine = footerLine; - originalHTMLData = buildHTMLText(headerLines, displayName, bodyContent, footerLine, false); + originalHTMLData = + buildHTMLText(headerContent, displayName, bodyContent, footerLine, false); + + List trimmedBodyContent = buildContent(true); + truncatedHtmlData = + buildHTMLText(headerContent, displayName, trimmedBodyContent, footerLine, true); } public EnumDataTypeHTMLRepresentation(Enum enumDataType) { + this.enumDataType = enumDataType; headerContent = buildHeaderText(enumDataType); - bodyContent = buildContent(enumDataType, false); + bodyContent = buildContent(false); footerLine = buildFooterText(enumDataType); displayName = new TextLine("enum " + enumDataType.getDisplayName()); originalHTMLData = buildHTMLText(headerContent, displayName, bodyContent, footerLine, false); - List trimmedBodyContent = buildContent(enumDataType, true); + List trimmedBodyContent = buildContent(true); truncatedHtmlData = buildHTMLText(headerContent, displayName, trimmedBodyContent, footerLine, true); } @@ -83,7 +93,7 @@ public class EnumDataTypeHTMLRepresentation extends HTMLDataTypeRepresentation { return new EmptyTextLine(stringLength); } - private List buildContent(Enum enumDataType, boolean trim) { + private List buildContent(boolean trim) { long[] values = enumDataType.getValues(); Arrays.sort(values); @@ -213,16 +223,16 @@ public class EnumDataTypeHTMLRepresentation extends HTMLDataTypeRepresentation { return completelyDifferentDiff(otherRepresentation); } - EnumDataTypeHTMLRepresentation compositeRepresentation = + EnumDataTypeHTMLRepresentation enumRepresentation = (EnumDataTypeHTMLRepresentation) otherRepresentation; List header = copyLines(headerContent); List body = copyLines(bodyContent); TextLine diffDisplayName = new TextLine(displayName.getText()); - List otherHeader = copyLines(compositeRepresentation.headerContent); - List otherBody = copyLines(compositeRepresentation.bodyContent); - TextLine otherDiffDisplayName = new TextLine(compositeRepresentation.displayName.getText()); + List otherHeader = copyLines(enumRepresentation.headerContent); + List otherBody = copyLines(enumRepresentation.bodyContent); + TextLine otherDiffDisplayName = new TextLine(enumRepresentation.displayName.getText()); DataTypeDiff headerDiff = DataTypeDiffBuilder.diffHeader(getDiffInput(header), getDiffInput(otherHeader)); @@ -233,10 +243,12 @@ public class EnumDataTypeHTMLRepresentation extends HTMLDataTypeRepresentation { diffTextLine(diffDisplayName, otherDiffDisplayName); return new HTMLDataTypeRepresentation[] { - new EnumDataTypeHTMLRepresentation(headerDiff.getLeftLines(), diffDisplayName, - bodyDiff.getLeftLines(), footerLine), - new EnumDataTypeHTMLRepresentation(headerDiff.getRightLines(), otherDiffDisplayName, - bodyDiff.getRightLines(), compositeRepresentation.footerLine), }; + new EnumDataTypeHTMLRepresentation(enumDataType, headerDiff.getLeftLines(), + diffDisplayName, bodyDiff.getLeftLines(), footerLine), + new EnumDataTypeHTMLRepresentation(enumRepresentation.enumDataType, + headerDiff.getRightLines(), otherDiffDisplayName, bodyDiff.getRightLines(), + enumRepresentation.footerLine) + }; } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/FunctionDataTypeHTMLRepresentation.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/FunctionDataTypeHTMLRepresentation.java index e54eb13018..fac622d5db 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/FunctionDataTypeHTMLRepresentation.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/FunctionDataTypeHTMLRepresentation.java @@ -30,7 +30,6 @@ import ghidra.util.exception.AssertException; public class FunctionDataTypeHTMLRepresentation extends HTMLDataTypeRepresentation { - private static final int MAX_CHAR_COUNT = 30; private static final int MAX_LINE_COUNT = 10; protected TextLine returnType; @@ -50,7 +49,10 @@ public class FunctionDataTypeHTMLRepresentation extends HTMLDataTypeRepresentati this.arguments = arguments; this.varArgs = varArgs; this.voidArgs = voidArgs; + originalHTMLData = + buildHTMLText(returnType, functionName, arguments, varArgs, voidArgs, false); + truncatedHtmlData = buildHTMLText(returnType, functionName, arguments, varArgs, voidArgs, true); } @@ -236,19 +238,6 @@ public class FunctionDataTypeHTMLRepresentation extends HTMLDataTypeRepresentati fullHtml.append(string); truncatedHtml.append(string); } - - //maybeAppend(truncatedHtml, lineCount, content); - } - - private static void maybeAppend(StringBuilder buffer, int charCount, String... content) { - if (charCount > MAX_LINE_COUNT) { - return; - } - - for (String string : content) { - String trimmed = StringUtilities.trimMiddle(string, MAX_CHAR_COUNT); - buffer.append(trimmed); - } } private static String generateTypeText(VariableTextLine line, boolean trim) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/PlaceHolderLine.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/PlaceHolderLine.java index 201f356e3b..e6beed6113 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/PlaceHolderLine.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/PlaceHolderLine.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,4 +18,5 @@ package ghidra.app.util.html; /** Marker interface for lines that are generic place holders for diffing */ public interface PlaceHolderLine extends ValidatableLine { + // marker interface } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/TextLine.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/TextLine.java index fb9ee82b74..2482ac078f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/TextLine.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/TextLine.java @@ -16,6 +16,7 @@ package ghidra.app.util.html; import java.awt.Color; +import java.util.Objects; import ghidra.util.exception.AssertException; @@ -27,11 +28,7 @@ public class TextLine implements ValidatableLine { private ValidatableLine validationLine; public TextLine(String text) { - if (text == null) { - throw new NullPointerException("Text cannot be null."); - } - - this.text = text; + this.text = Objects.requireNonNull(text); } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/TypeDefDataTypeHTMLRepresentation.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/TypeDefDataTypeHTMLRepresentation.java index 21187411f4..e2e2d41826 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/TypeDefDataTypeHTMLRepresentation.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/TypeDefDataTypeHTMLRepresentation.java @@ -43,7 +43,10 @@ public class TypeDefDataTypeHTMLRepresentation extends HTMLDataTypeRepresentatio this.headerContent = headerLines; this.bodyContent = bodyLines; - originalHTMLData = buildHTMLText(typeDef, warningLines, headerLines, bodyLines, false); + List trimmedHeaderContent = buildHeaderText(typeDef, true); + List trimmedBodyContent = buildBodyText(getBaseDataType(), true); + truncatedHtmlData = + buildHTMLText(typeDef, warningLines, trimmedHeaderContent, trimmedBodyContent, true); } public TypeDefDataTypeHTMLRepresentation(TypeDef typeDef) { @@ -249,14 +252,14 @@ public class TypeDefDataTypeHTMLRepresentation extends HTMLDataTypeRepresentatio List body = new ArrayList<>(); if (diffs != null) { - body.add(new TextLine(diffs[0].getHTMLContentString())); + body.add(new TextLine(diffs[0].getFullHTMLContentString())); } List otherHeader = new ArrayList<>(typeDefRepresentation.headerContent); List otherBody = new ArrayList<>(); if (diffs != null) { - otherBody.add(new TextLine(diffs[1].getHTMLContentString())); + otherBody.add(new TextLine(diffs[1].getFullHTMLContentString())); } DataTypeDiff headerDiff = diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/VariableTextLine.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/VariableTextLine.java index 5bf75df20b..b862be9018 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/VariableTextLine.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/html/VariableTextLine.java @@ -16,6 +16,7 @@ package ghidra.app.util.html; import java.awt.Color; +import java.util.Objects; import ghidra.program.model.data.DataType; import ghidra.util.UniversalID; @@ -33,9 +34,6 @@ public class VariableTextLine implements ValidatableLine { private ValidatableLine validationLine; public VariableTextLine(String variableType, String variableName, DataType dataType) { - if (variableType == null) { - throw new NullPointerException("variable type cannot be null"); - } if (variableName == null) { //throw new NullPointerException( "variable name cannot be null" ); @@ -45,7 +43,8 @@ public class VariableTextLine implements ValidatableLine { variableName = ""; } - this.variableType = variableType; + this.variableType = + Objects.requireNonNull(variableType, "Variable type cannot be null"); this.variableName = variableName; this.dataType = dataType; }